RoomListFiltersEvents -> RoomListFiltersEvent

This commit is contained in:
Benoit Marty 2026-01-27 15:01:57 +01:00
parent c92d34f46a
commit 5eccea5ada
7 changed files with 18 additions and 18 deletions

View file

@ -8,7 +8,7 @@
package io.element.android.features.home.impl.filters package io.element.android.features.home.impl.filters
sealed interface RoomListFiltersEvents { sealed interface RoomListFiltersEvent {
data class ToggleFilter(val filter: RoomListFilter) : RoomListFiltersEvents data class ToggleFilter(val filter: RoomListFilter) : RoomListFiltersEvent
data object ClearSelectedFilters : RoomListFiltersEvents data object ClearSelectedFilters : RoomListFiltersEvent
} }

View file

@ -28,12 +28,12 @@ class RoomListFiltersPresenter(
@Composable @Composable
override fun present(): RoomListFiltersState { override fun present(): RoomListFiltersState {
fun handleEvent(event: RoomListFiltersEvents) { fun handleEvent(event: RoomListFiltersEvent) {
when (event) { when (event) {
RoomListFiltersEvents.ClearSelectedFilters -> { RoomListFiltersEvent.ClearSelectedFilters -> {
filterSelectionStrategy.clear() filterSelectionStrategy.clear()
} }
is RoomListFiltersEvents.ToggleFilter -> { is RoomListFiltersEvent.ToggleFilter -> {
filterSelectionStrategy.toggle(event.filter) filterSelectionStrategy.toggle(event.filter)
} }
} }

View file

@ -14,7 +14,7 @@ import kotlinx.collections.immutable.toImmutableList
data class RoomListFiltersState( data class RoomListFiltersState(
val filterSelectionStates: ImmutableList<FilterSelectionState>, val filterSelectionStates: ImmutableList<FilterSelectionState>,
val eventSink: (RoomListFiltersEvents) -> Unit, val eventSink: (RoomListFiltersEvent) -> Unit,
) { ) {
val hasAnyFilterSelected = filterSelectionStates.any { it.isSelected } val hasAnyFilterSelected = filterSelectionStates.any { it.isSelected }

View file

@ -24,7 +24,7 @@ class RoomListFiltersStateProvider : PreviewParameterProvider<RoomListFiltersSta
fun aRoomListFiltersState( fun aRoomListFiltersState(
filterSelectionStates: List<FilterSelectionState> = RoomListFilter.entries.map { FilterSelectionState(it, isSelected = false) }, filterSelectionStates: List<FilterSelectionState> = RoomListFilter.entries.map { FilterSelectionState(it, isSelected = false) },
eventSink: (RoomListFiltersEvents) -> Unit = {}, eventSink: (RoomListFiltersEvent) -> Unit = {},
) = RoomListFiltersState( ) = RoomListFiltersState(
filterSelectionStates = filterSelectionStates.toImmutableList(), filterSelectionStates = filterSelectionStates.toImmutableList(),
eventSink = eventSink, eventSink = eventSink,

View file

@ -60,11 +60,11 @@ fun RoomListFiltersView(
modifier: Modifier = Modifier modifier: Modifier = Modifier
) { ) {
fun onClearFiltersClick() { fun onClearFiltersClick() {
state.eventSink(RoomListFiltersEvents.ClearSelectedFilters) state.eventSink(RoomListFiltersEvent.ClearSelectedFilters)
} }
fun onToggleFilter(filter: RoomListFilter) { fun onToggleFilter(filter: RoomListFilter) {
state.eventSink(RoomListFiltersEvents.ToggleFilter(filter)) state.eventSink(RoomListFiltersEvent.ToggleFilter(filter))
} }
var scrollToStart by remember { mutableIntStateOf(0) } var scrollToStart by remember { mutableIntStateOf(0) }

View file

@ -49,7 +49,7 @@ class RoomListFiltersPresenterTest {
moleculeFlow(RecompositionMode.Immediate) { moleculeFlow(RecompositionMode.Immediate) {
presenter.present() presenter.present()
}.test { }.test {
awaitItem().eventSink.invoke(RoomListFiltersEvents.ToggleFilter(RoomListFilter.Rooms)) awaitItem().eventSink.invoke(RoomListFiltersEvent.ToggleFilter(RoomListFilter.Rooms))
awaitLastSequentialItem().let { state -> awaitLastSequentialItem().let { state ->
assertThat(state.hasAnyFilterSelected).isTrue() assertThat(state.hasAnyFilterSelected).isTrue()
@ -66,7 +66,7 @@ class RoomListFiltersPresenterTest {
assertThat(roomListCurrentFilter.filters).containsExactly( assertThat(roomListCurrentFilter.filters).containsExactly(
MatrixRoomListFilter.Category.Group, MatrixRoomListFilter.Category.Group,
) )
state.eventSink.invoke(RoomListFiltersEvents.ToggleFilter(RoomListFilter.Rooms)) state.eventSink.invoke(RoomListFiltersEvent.ToggleFilter(RoomListFilter.Rooms))
} }
awaitLastSequentialItem().let { state -> awaitLastSequentialItem().let { state ->
assertThat(state.hasAnyFilterSelected).isFalse() assertThat(state.hasAnyFilterSelected).isFalse()
@ -91,10 +91,10 @@ class RoomListFiltersPresenterTest {
moleculeFlow(RecompositionMode.Immediate) { moleculeFlow(RecompositionMode.Immediate) {
presenter.present() presenter.present()
}.test { }.test {
awaitItem().eventSink.invoke(RoomListFiltersEvents.ToggleFilter(RoomListFilter.Rooms)) awaitItem().eventSink.invoke(RoomListFiltersEvent.ToggleFilter(RoomListFilter.Rooms))
awaitLastSequentialItem().let { state -> awaitLastSequentialItem().let { state ->
assertThat(state.hasAnyFilterSelected).isTrue() assertThat(state.hasAnyFilterSelected).isTrue()
state.eventSink.invoke(RoomListFiltersEvents.ClearSelectedFilters) state.eventSink.invoke(RoomListFiltersEvent.ClearSelectedFilters)
} }
awaitLastSequentialItem().let { state -> awaitLastSequentialItem().let { state ->
assertThat(state.hasAnyFilterSelected).isFalse() assertThat(state.hasAnyFilterSelected).isFalse()

View file

@ -27,7 +27,7 @@ class RoomListFiltersViewTest {
@Test @Test
fun `clicking on filters generates expected Event`() { fun `clicking on filters generates expected Event`() {
val eventsRecorder = EventsRecorder<RoomListFiltersEvents>() val eventsRecorder = EventsRecorder<RoomListFiltersEvent>()
rule.setContent { rule.setContent {
RoomListFiltersView( RoomListFiltersView(
state = aRoomListFiltersState(eventSink = eventsRecorder), state = aRoomListFiltersState(eventSink = eventsRecorder),
@ -36,14 +36,14 @@ class RoomListFiltersViewTest {
rule.clickOn(R.string.screen_roomlist_filter_rooms) rule.clickOn(R.string.screen_roomlist_filter_rooms)
eventsRecorder.assertList( eventsRecorder.assertList(
listOf( listOf(
RoomListFiltersEvents.ToggleFilter(RoomListFilter.Rooms), RoomListFiltersEvent.ToggleFilter(RoomListFilter.Rooms),
) )
) )
} }
@Test @Test
fun `clicking on clear filters generates expected Event`() { fun `clicking on clear filters generates expected Event`() {
val eventsRecorder = EventsRecorder<RoomListFiltersEvents>() val eventsRecorder = EventsRecorder<RoomListFiltersEvent>()
rule.setContent { rule.setContent {
RoomListFiltersView( RoomListFiltersView(
state = aRoomListFiltersState( state = aRoomListFiltersState(
@ -55,7 +55,7 @@ class RoomListFiltersViewTest {
rule.pressTag(TestTags.homeScreenClearFilters.value) rule.pressTag(TestTags.homeScreenClearFilters.value)
eventsRecorder.assertList( eventsRecorder.assertList(
listOf( listOf(
RoomListFiltersEvents.ClearSelectedFilters, RoomListFiltersEvent.ClearSelectedFilters,
) )
) )
} }