RoomListFiltersEvents -> RoomListFiltersEvent
This commit is contained in:
parent
c92d34f46a
commit
5eccea5ada
7 changed files with 18 additions and 18 deletions
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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) }
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue