RoomListSearchEvents -> RoomListSearchEvent

This commit is contained in:
Benoit Marty 2026-01-27 15:04:39 +01:00
parent 5f2ee2dc8c
commit 6cebe2d948
8 changed files with 21 additions and 21 deletions

View file

@ -29,7 +29,7 @@ import io.element.android.features.announcement.api.Announcement
import io.element.android.features.announcement.api.AnnouncementService import io.element.android.features.announcement.api.AnnouncementService
import io.element.android.features.home.impl.datasource.RoomListDataSource import io.element.android.features.home.impl.datasource.RoomListDataSource
import io.element.android.features.home.impl.filters.RoomListFiltersState import io.element.android.features.home.impl.filters.RoomListFiltersState
import io.element.android.features.home.impl.search.RoomListSearchEvents import io.element.android.features.home.impl.search.RoomListSearchEvent
import io.element.android.features.home.impl.search.RoomListSearchState import io.element.android.features.home.impl.search.RoomListSearchState
import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.features.invite.api.SeenInvitesStore
import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteEvents.AcceptInvite import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteEvents.AcceptInvite
@ -126,7 +126,7 @@ class RoomListPresenter(
RoomListEvent.DismissNewNotificationSoundBanner -> coroutineScope.launch { RoomListEvent.DismissNewNotificationSoundBanner -> coroutineScope.launch {
announcementService.onAnnouncementDismissed(Announcement.NewNotificationSound) announcementService.onAnnouncementDismissed(Announcement.NewNotificationSound)
} }
RoomListEvent.ToggleSearchResults -> searchState.eventSink(RoomListSearchEvents.ToggleSearchVisibility) RoomListEvent.ToggleSearchResults -> searchState.eventSink(RoomListSearchEvent.ToggleSearchVisibility)
is RoomListEvent.ShowContextMenu -> { is RoomListEvent.ShowContextMenu -> {
coroutineScope.showContextMenu(event, contextMenu) coroutineScope.showContextMenu(event, contextMenu)
} }

View file

@ -8,7 +8,7 @@
package io.element.android.features.home.impl.search package io.element.android.features.home.impl.search
sealed interface RoomListSearchEvents { sealed interface RoomListSearchEvent {
data object ToggleSearchVisibility : RoomListSearchEvents data object ToggleSearchVisibility : RoomListSearchEvent
data object ClearQuery : RoomListSearchEvents data object ClearQuery : RoomListSearchEvent
} }

View file

@ -45,12 +45,12 @@ class RoomListSearchPresenter(
dataSource.setSearchQuery(searchQuery.text.toString()) dataSource.setSearchQuery(searchQuery.text.toString())
} }
fun handleEvent(event: RoomListSearchEvents) { fun handleEvent(event: RoomListSearchEvent) {
when (event) { when (event) {
RoomListSearchEvents.ClearQuery -> { RoomListSearchEvent.ClearQuery -> {
searchQuery.clearText() searchQuery.clearText()
} }
RoomListSearchEvents.ToggleSearchVisibility -> { RoomListSearchEvent.ToggleSearchVisibility -> {
isSearchActive = !isSearchActive isSearchActive = !isSearchActive
searchQuery.clearText() searchQuery.clearText()
} }

View file

@ -16,5 +16,5 @@ data class RoomListSearchState(
val isSearchActive: Boolean, val isSearchActive: Boolean,
val query: TextFieldState, val query: TextFieldState,
val results: ImmutableList<RoomListRoomSummary>, val results: ImmutableList<RoomListRoomSummary>,
val eventSink: (RoomListSearchEvents) -> Unit val eventSink: (RoomListSearchEvent) -> Unit
) )

View file

@ -31,7 +31,7 @@ fun aRoomListSearchState(
isSearchActive: Boolean = false, isSearchActive: Boolean = false,
query: String = "", query: String = "",
results: ImmutableList<RoomListRoomSummary> = persistentListOf(), results: ImmutableList<RoomListRoomSummary> = persistentListOf(),
eventSink: (RoomListSearchEvents) -> Unit = { }, eventSink: (RoomListSearchEvent) -> Unit = { },
) = RoomListSearchState( ) = RoomListSearchState(
isSearchActive = isSearchActive, isSearchActive = isSearchActive,
query = TextFieldState(initialText = query), query = TextFieldState(initialText = query),

View file

@ -59,7 +59,7 @@ internal fun RoomListSearchView(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
BackHandler(enabled = state.isSearchActive) { BackHandler(enabled = state.isSearchActive) {
state.eventSink(RoomListSearchEvents.ToggleSearchVisibility) state.eventSink(RoomListSearchEvent.ToggleSearchVisibility)
} }
AnimatedVisibility( AnimatedVisibility(
@ -89,7 +89,7 @@ private fun RoomListSearchContent(
val borderColor = MaterialTheme.colorScheme.tertiary val borderColor = MaterialTheme.colorScheme.tertiary
val strokeWidth = 1.dp val strokeWidth = 1.dp
fun onBackButtonClick() { fun onBackButtonClick() {
state.eventSink(RoomListSearchEvents.ToggleSearchVisibility) state.eventSink(RoomListSearchEvent.ToggleSearchVisibility)
} }
fun onRoomClick(room: RoomListRoomSummary) { fun onRoomClick(room: RoomListRoomSummary) {
@ -127,7 +127,7 @@ private fun RoomListSearchContent(
), ),
trailingIcon = if (state.query.text.isNotEmpty()) { trailingIcon = if (state.query.text.isNotEmpty()) {
@Composable { @Composable {
IconButton(onClick = { state.eventSink(RoomListSearchEvents.ClearQuery) }) { IconButton(onClick = { state.eventSink(RoomListSearchEvent.ClearQuery) }) {
Icon( Icon(
imageVector = CompoundIcons.Close(), imageVector = CompoundIcons.Close(),
contentDescription = stringResource(CommonStrings.action_cancel) contentDescription = stringResource(CommonStrings.action_cancel)

View file

@ -21,7 +21,7 @@ import io.element.android.features.home.impl.datasource.aRoomListRoomSummaryFact
import io.element.android.features.home.impl.filters.RoomListFiltersState import io.element.android.features.home.impl.filters.RoomListFiltersState
import io.element.android.features.home.impl.filters.aRoomListFiltersState import io.element.android.features.home.impl.filters.aRoomListFiltersState
import io.element.android.features.home.impl.model.createRoomListRoomSummary import io.element.android.features.home.impl.model.createRoomListRoomSummary
import io.element.android.features.home.impl.search.RoomListSearchEvents import io.element.android.features.home.impl.search.RoomListSearchEvent
import io.element.android.features.home.impl.search.RoomListSearchState import io.element.android.features.home.impl.search.RoomListSearchState
import io.element.android.features.home.impl.search.aRoomListSearchState import io.element.android.features.home.impl.search.aRoomListSearchState
import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.features.invite.api.SeenInvitesStore
@ -327,7 +327,7 @@ class RoomListPresenterTest {
@Test @Test
fun `present - toggle search menu`() = runTest { fun `present - toggle search menu`() = runTest {
val eventRecorder = EventsRecorder<RoomListSearchEvents>() val eventRecorder = EventsRecorder<RoomListSearchEvent>()
val searchPresenter: Presenter<RoomListSearchState> = Presenter { val searchPresenter: Presenter<RoomListSearchState> = Presenter {
aRoomListSearchState( aRoomListSearchState(
eventSink = eventRecorder eventSink = eventRecorder
@ -343,13 +343,13 @@ class RoomListPresenterTest {
eventRecorder.assertEmpty() eventRecorder.assertEmpty()
initialState.eventSink(RoomListEvent.ToggleSearchResults) initialState.eventSink(RoomListEvent.ToggleSearchResults)
eventRecorder.assertSingle( eventRecorder.assertSingle(
RoomListSearchEvents.ToggleSearchVisibility RoomListSearchEvent.ToggleSearchVisibility
) )
initialState.eventSink(RoomListEvent.ToggleSearchResults) initialState.eventSink(RoomListEvent.ToggleSearchResults)
eventRecorder.assertList( eventRecorder.assertList(
listOf( listOf(
RoomListSearchEvents.ToggleSearchVisibility, RoomListSearchEvent.ToggleSearchVisibility,
RoomListSearchEvents.ToggleSearchVisibility RoomListSearchEvent.ToggleSearchVisibility
) )
) )
} }

View file

@ -48,11 +48,11 @@ class RoomListSearchPresenterTest {
}.test { }.test {
awaitItem().let { state -> awaitItem().let { state ->
assertThat(state.isSearchActive).isFalse() assertThat(state.isSearchActive).isFalse()
state.eventSink(RoomListSearchEvents.ToggleSearchVisibility) state.eventSink(RoomListSearchEvent.ToggleSearchVisibility)
} }
awaitItem().let { state -> awaitItem().let { state ->
assertThat(state.isSearchActive).isTrue() assertThat(state.isSearchActive).isTrue()
state.eventSink(RoomListSearchEvents.ToggleSearchVisibility) state.eventSink(RoomListSearchEvent.ToggleSearchVisibility)
} }
awaitItem().let { state -> awaitItem().let { state ->
assertThat(state.isSearchActive).isFalse() assertThat(state.isSearchActive).isFalse()
@ -82,7 +82,7 @@ class RoomListSearchPresenterTest {
).isEqualTo( ).isEqualTo(
RoomListFilter.NormalizedMatchRoomName("Search") RoomListFilter.NormalizedMatchRoomName("Search")
) )
state.eventSink(RoomListSearchEvents.ClearQuery) state.eventSink(RoomListSearchEvent.ClearQuery)
} }
awaitItem().let { state -> awaitItem().let { state ->
assertThat(state.query.text.toString()).isEmpty() assertThat(state.query.text.toString()).isEmpty()