mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-03 16:10:00 +00:00
RoomSelectEvents -> RoomSelectEvent
This commit is contained in:
+4
-4
@@ -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
|
||||||
}
|
}
|
||||||
+4
-4
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -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
|
||||||
)
|
)
|
||||||
|
|||||||
+1
-1
@@ -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,
|
||||||
|
|||||||
+6
-6
@@ -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())
|
||||||
|
|||||||
+6
-6
@@ -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()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user