RoomSelectEvents -> RoomSelectEvent

This commit is contained in:
Benoit Marty
2026-06-11 16:49:57 +02:00
parent 66c7c35785
commit 9739f58901
6 changed files with 22 additions and 22 deletions
@@ -10,8 +10,8 @@ package io.element.android.libraries.roomselect.impl
import io.element.android.libraries.matrix.ui.model.SelectRoomInfo
sealed interface RoomSelectEvents {
data class ToggleSelectedRoom(val room: SelectRoomInfo) : RoomSelectEvents
data object ToggleSearchActive : RoomSelectEvents
data class UpdateVisibleRange(val range: IntRange) : RoomSelectEvents
sealed interface RoomSelectEvent {
data class ToggleSelectedRoom(val room: SelectRoomInfo) : RoomSelectEvent
data object ToggleSearchActive : RoomSelectEvent
data class UpdateVisibleRange(val range: IntRange) : RoomSelectEvent
}
@@ -67,9 +67,9 @@ class RoomSelectPresenter(
}
}
fun handleEvent(event: RoomSelectEvents) {
fun handleEvent(event: RoomSelectEvent) {
when (event) {
is RoomSelectEvents.ToggleSelectedRoom -> {
is RoomSelectEvent.ToggleSelectedRoom -> {
val index = selectedRooms.indexOfFirst { it.roomId == event.room.roomId }
selectedRooms = if (index >= 0) {
selectedRooms.removeAt(index)
@@ -77,8 +77,8 @@ class RoomSelectPresenter(
selectedRooms.add(event.room)
}
}
RoomSelectEvents.ToggleSearchActive -> isSearchActive = !isSearchActive
is RoomSelectEvents.UpdateVisibleRange -> coroutineScope.launch {
RoomSelectEvent.ToggleSearchActive -> isSearchActive = !isSearchActive
is RoomSelectEvent.UpdateVisibleRange -> coroutineScope.launch {
dataSource.updateVisibleRange(event.range)
}
}
@@ -20,5 +20,5 @@ data class RoomSelectState(
val searchQuery: TextFieldState,
val isSearchActive: Boolean,
val selectedRooms: ImmutableList<SelectRoomInfo>,
val eventSink: (RoomSelectEvents) -> Unit
val eventSink: (RoomSelectEvent) -> Unit
)
@@ -49,7 +49,7 @@ internal fun aRoomSelectState(
searchQuery: String = "",
isSearchActive: Boolean = false,
selectedRooms: ImmutableList<SelectRoomInfo> = persistentListOf(),
eventSink: (RoomSelectEvents) -> Unit = {},
eventSink: (RoomSelectEvent) -> Unit = {},
) = RoomSelectState(
mode = mode,
resultState = resultState,
@@ -72,7 +72,7 @@ fun RoomSelectView(
modifier: Modifier = Modifier,
) {
fun onRoomRemoved(roomInfo: SelectRoomInfo) {
state.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomInfo))
state.eventSink(RoomSelectEvent.ToggleSelectedRoom(roomInfo))
}
@Composable
@@ -87,7 +87,7 @@ fun RoomSelectView(
var canHandleBack by remember { mutableStateOf(true) }
fun onBackButton(state: RoomSelectState) {
if (state.isSearchActive) {
state.eventSink(RoomSelectEvents.ToggleSearchActive)
state.eventSink(RoomSelectEvent.ToggleSearchActive)
} else if (canHandleBack) {
canHandleBack = false
onDismiss()
@@ -101,7 +101,7 @@ fun RoomSelectView(
val lazyListState = rememberLazyListState()
OnVisibleRangeChangeEffect(lazyListState) { visibleRange ->
state.eventSink(RoomSelectEvents.UpdateVisibleRange(visibleRange))
state.eventSink(RoomSelectEvent.UpdateVisibleRange(visibleRange))
}
Scaffold(
@@ -138,7 +138,7 @@ fun RoomSelectView(
placeHolderTitle = stringResource(CommonStrings.action_search),
queryState = state.searchQuery,
active = state.isSearchActive,
onActiveChange = { state.eventSink(RoomSelectEvents.ToggleSearchActive) },
onActiveChange = { state.eventSink(RoomSelectEvent.ToggleSearchActive) },
resultState = state.resultState,
showBackButton = false,
) { summaries ->
@@ -154,7 +154,7 @@ fun RoomSelectView(
roomSummary,
isSelected = state.selectedRooms.any { it.roomId == roomSummary.roomId },
onSelection = { roomSummary ->
state.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomSummary))
state.eventSink(RoomSelectEvent.ToggleSelectedRoom(roomSummary))
}
)
HorizontalDivider(modifier = Modifier.fillMaxWidth())
@@ -177,7 +177,7 @@ fun RoomSelectView(
roomSummary,
isSelected = state.selectedRooms.any { it.roomId == roomSummary.roomId },
onSelection = { roomSummary ->
state.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomSummary))
state.eventSink(RoomSelectEvent.ToggleSelectedRoom(roomSummary))
}
)
HorizontalDivider(modifier = Modifier.fillMaxWidth())
@@ -57,9 +57,9 @@ class RoomSelectPresenterTest {
presenter.present()
}.test {
val initialState = awaitItem()
initialState.eventSink(RoomSelectEvents.ToggleSearchActive)
initialState.eventSink(RoomSelectEvent.ToggleSearchActive)
assertThat(awaitItem().isSearchActive).isTrue()
initialState.eventSink(RoomSelectEvents.ToggleSearchActive)
initialState.eventSink(RoomSelectEvent.ToggleSearchActive)
assertThat(awaitItem().isSearchActive).isFalse()
}
}
@@ -84,7 +84,7 @@ class RoomSelectPresenterTest {
// Do not compare the lambda because they will be different. So copy the lambda from expectedRoomSummary to result
val result = (awaitItem().resultState as SearchBarResultState.Results).results
assertThat(result).isEqualTo(listOf(expectedRoomInfo))
initialState.eventSink(RoomSelectEvents.ToggleSearchActive)
initialState.eventSink(RoomSelectEvent.ToggleSearchActive)
skipItems(1)
initialState.searchQuery.setTextAndPlaceCursorAtEnd("string not contained")
assertThat(
@@ -117,9 +117,9 @@ class RoomSelectPresenterTest {
}.test {
val initialState = awaitItem()
val roomInfo = roomSummary.toSelectRoomInfo()
initialState.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomInfo))
initialState.eventSink(RoomSelectEvent.ToggleSelectedRoom(roomInfo))
assertThat(awaitItem().selectedRooms).isEqualTo(persistentListOf(roomInfo))
initialState.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomInfo))
initialState.eventSink(RoomSelectEvent.ToggleSelectedRoom(roomInfo))
assertThat(awaitItem().selectedRooms).isEmpty()
cancel()
}
@@ -146,7 +146,7 @@ class RoomSelectPresenterTest {
skipItems(1)
// UpdateVisibleRange near end should trigger loadMore
initialState.eventSink(RoomSelectEvents.UpdateVisibleRange(IntRange(0, 9)))
initialState.eventSink(RoomSelectEvent.UpdateVisibleRange(IntRange(0, 9)))
// Give time for the coroutine to complete
testScheduler.advanceUntilIdle()