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 import io.element.android.libraries.matrix.ui.model.SelectRoomInfo
sealed interface RoomSelectEvents { sealed interface RoomSelectEvent {
data class ToggleSelectedRoom(val room: SelectRoomInfo) : RoomSelectEvents data class ToggleSelectedRoom(val room: SelectRoomInfo) : RoomSelectEvent
data object ToggleSearchActive : RoomSelectEvents data object ToggleSearchActive : RoomSelectEvent
data class UpdateVisibleRange(val range: IntRange) : RoomSelectEvents data class UpdateVisibleRange(val range: IntRange) : RoomSelectEvent
} }
@@ -67,9 +67,9 @@ class RoomSelectPresenter(
} }
} }
fun handleEvent(event: RoomSelectEvents) { fun handleEvent(event: RoomSelectEvent) {
when (event) { when (event) {
is RoomSelectEvents.ToggleSelectedRoom -> { is RoomSelectEvent.ToggleSelectedRoom -> {
val index = selectedRooms.indexOfFirst { it.roomId == event.room.roomId } val index = selectedRooms.indexOfFirst { it.roomId == event.room.roomId }
selectedRooms = if (index >= 0) { selectedRooms = if (index >= 0) {
selectedRooms.removeAt(index) selectedRooms.removeAt(index)
@@ -77,8 +77,8 @@ class RoomSelectPresenter(
selectedRooms.add(event.room) selectedRooms.add(event.room)
} }
} }
RoomSelectEvents.ToggleSearchActive -> isSearchActive = !isSearchActive RoomSelectEvent.ToggleSearchActive -> isSearchActive = !isSearchActive
is RoomSelectEvents.UpdateVisibleRange -> coroutineScope.launch { is RoomSelectEvent.UpdateVisibleRange -> coroutineScope.launch {
dataSource.updateVisibleRange(event.range) dataSource.updateVisibleRange(event.range)
} }
} }
@@ -20,5 +20,5 @@ data class RoomSelectState(
val searchQuery: TextFieldState, val searchQuery: TextFieldState,
val isSearchActive: Boolean, val isSearchActive: Boolean,
val selectedRooms: ImmutableList<SelectRoomInfo>, val selectedRooms: ImmutableList<SelectRoomInfo>,
val eventSink: (RoomSelectEvents) -> Unit val eventSink: (RoomSelectEvent) -> Unit
) )
@@ -49,7 +49,7 @@ internal fun aRoomSelectState(
searchQuery: String = "", searchQuery: String = "",
isSearchActive: Boolean = false, isSearchActive: Boolean = false,
selectedRooms: ImmutableList<SelectRoomInfo> = persistentListOf(), selectedRooms: ImmutableList<SelectRoomInfo> = persistentListOf(),
eventSink: (RoomSelectEvents) -> Unit = {}, eventSink: (RoomSelectEvent) -> Unit = {},
) = RoomSelectState( ) = RoomSelectState(
mode = mode, mode = mode,
resultState = resultState, resultState = resultState,
@@ -72,7 +72,7 @@ fun RoomSelectView(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
fun onRoomRemoved(roomInfo: SelectRoomInfo) { fun onRoomRemoved(roomInfo: SelectRoomInfo) {
state.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomInfo)) state.eventSink(RoomSelectEvent.ToggleSelectedRoom(roomInfo))
} }
@Composable @Composable
@@ -87,7 +87,7 @@ fun RoomSelectView(
var canHandleBack by remember { mutableStateOf(true) } var canHandleBack by remember { mutableStateOf(true) }
fun onBackButton(state: RoomSelectState) { fun onBackButton(state: RoomSelectState) {
if (state.isSearchActive) { if (state.isSearchActive) {
state.eventSink(RoomSelectEvents.ToggleSearchActive) state.eventSink(RoomSelectEvent.ToggleSearchActive)
} else if (canHandleBack) { } else if (canHandleBack) {
canHandleBack = false canHandleBack = false
onDismiss() onDismiss()
@@ -101,7 +101,7 @@ fun RoomSelectView(
val lazyListState = rememberLazyListState() val lazyListState = rememberLazyListState()
OnVisibleRangeChangeEffect(lazyListState) { visibleRange -> OnVisibleRangeChangeEffect(lazyListState) { visibleRange ->
state.eventSink(RoomSelectEvents.UpdateVisibleRange(visibleRange)) state.eventSink(RoomSelectEvent.UpdateVisibleRange(visibleRange))
} }
Scaffold( Scaffold(
@@ -138,7 +138,7 @@ fun RoomSelectView(
placeHolderTitle = stringResource(CommonStrings.action_search), placeHolderTitle = stringResource(CommonStrings.action_search),
queryState = state.searchQuery, queryState = state.searchQuery,
active = state.isSearchActive, active = state.isSearchActive,
onActiveChange = { state.eventSink(RoomSelectEvents.ToggleSearchActive) }, onActiveChange = { state.eventSink(RoomSelectEvent.ToggleSearchActive) },
resultState = state.resultState, resultState = state.resultState,
showBackButton = false, showBackButton = false,
) { summaries -> ) { summaries ->
@@ -154,7 +154,7 @@ fun RoomSelectView(
roomSummary, roomSummary,
isSelected = state.selectedRooms.any { it.roomId == roomSummary.roomId }, isSelected = state.selectedRooms.any { it.roomId == roomSummary.roomId },
onSelection = { roomSummary -> onSelection = { roomSummary ->
state.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomSummary)) state.eventSink(RoomSelectEvent.ToggleSelectedRoom(roomSummary))
} }
) )
HorizontalDivider(modifier = Modifier.fillMaxWidth()) HorizontalDivider(modifier = Modifier.fillMaxWidth())
@@ -177,7 +177,7 @@ fun RoomSelectView(
roomSummary, roomSummary,
isSelected = state.selectedRooms.any { it.roomId == roomSummary.roomId }, isSelected = state.selectedRooms.any { it.roomId == roomSummary.roomId },
onSelection = { roomSummary -> onSelection = { roomSummary ->
state.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomSummary)) state.eventSink(RoomSelectEvent.ToggleSelectedRoom(roomSummary))
} }
) )
HorizontalDivider(modifier = Modifier.fillMaxWidth()) HorizontalDivider(modifier = Modifier.fillMaxWidth())
@@ -57,9 +57,9 @@ class RoomSelectPresenterTest {
presenter.present() presenter.present()
}.test { }.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink(RoomSelectEvents.ToggleSearchActive) initialState.eventSink(RoomSelectEvent.ToggleSearchActive)
assertThat(awaitItem().isSearchActive).isTrue() assertThat(awaitItem().isSearchActive).isTrue()
initialState.eventSink(RoomSelectEvents.ToggleSearchActive) initialState.eventSink(RoomSelectEvent.ToggleSearchActive)
assertThat(awaitItem().isSearchActive).isFalse() 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 // 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 val result = (awaitItem().resultState as SearchBarResultState.Results).results
assertThat(result).isEqualTo(listOf(expectedRoomInfo)) assertThat(result).isEqualTo(listOf(expectedRoomInfo))
initialState.eventSink(RoomSelectEvents.ToggleSearchActive) initialState.eventSink(RoomSelectEvent.ToggleSearchActive)
skipItems(1) skipItems(1)
initialState.searchQuery.setTextAndPlaceCursorAtEnd("string not contained") initialState.searchQuery.setTextAndPlaceCursorAtEnd("string not contained")
assertThat( assertThat(
@@ -117,9 +117,9 @@ class RoomSelectPresenterTest {
}.test { }.test {
val initialState = awaitItem() val initialState = awaitItem()
val roomInfo = roomSummary.toSelectRoomInfo() val roomInfo = roomSummary.toSelectRoomInfo()
initialState.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomInfo)) initialState.eventSink(RoomSelectEvent.ToggleSelectedRoom(roomInfo))
assertThat(awaitItem().selectedRooms).isEqualTo(persistentListOf(roomInfo)) assertThat(awaitItem().selectedRooms).isEqualTo(persistentListOf(roomInfo))
initialState.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomInfo)) initialState.eventSink(RoomSelectEvent.ToggleSelectedRoom(roomInfo))
assertThat(awaitItem().selectedRooms).isEmpty() assertThat(awaitItem().selectedRooms).isEmpty()
cancel() cancel()
} }
@@ -146,7 +146,7 @@ class RoomSelectPresenterTest {
skipItems(1) skipItems(1)
// UpdateVisibleRange near end should trigger loadMore // 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 // Give time for the coroutine to complete
testScheduler.advanceUntilIdle() testScheduler.advanceUntilIdle()