Forward message to multiple rooms
This commit is contained in:
+1
-4
@@ -11,10 +11,7 @@ package io.element.android.libraries.roomselect.impl
|
||||
import io.element.android.libraries.matrix.ui.model.SelectRoomInfo
|
||||
|
||||
sealed interface RoomSelectEvents {
|
||||
data class SetSelectedRoom(val room: SelectRoomInfo) : RoomSelectEvents
|
||||
|
||||
// TODO remove to restore multi-selection
|
||||
data object RemoveSelectedRoom : RoomSelectEvents
|
||||
data class ToggleSelectedRoom(val room: SelectRoomInfo) : RoomSelectEvents
|
||||
data object ToggleSearchActive : RoomSelectEvents
|
||||
data class UpdateVisibleRange(val range: IntRange) : RoomSelectEvents
|
||||
}
|
||||
|
||||
+7
-10
@@ -69,17 +69,14 @@ class RoomSelectPresenter(
|
||||
|
||||
fun handleEvent(event: RoomSelectEvents) {
|
||||
when (event) {
|
||||
is RoomSelectEvents.SetSelectedRoom -> {
|
||||
selectedRooms = persistentListOf(event.room)
|
||||
// Restore for multi-selection
|
||||
// val index = selectedRooms.indexOfFirst { it.roomId == event.room.roomId }
|
||||
// selectedRooms = if (index >= 0) {
|
||||
// selectedRooms.removeAt(index)
|
||||
// } else {
|
||||
// selectedRooms.add(event.room)
|
||||
// }
|
||||
is RoomSelectEvents.ToggleSelectedRoom -> {
|
||||
val index = selectedRooms.indexOfFirst { it.roomId == event.room.roomId }
|
||||
selectedRooms = if (index >= 0) {
|
||||
selectedRooms.removeAt(index)
|
||||
} else {
|
||||
selectedRooms.add(event.room)
|
||||
}
|
||||
}
|
||||
RoomSelectEvents.RemoveSelectedRoom -> selectedRooms = persistentListOf()
|
||||
RoomSelectEvents.ToggleSearchActive -> isSearchActive = !isSearchActive
|
||||
is RoomSelectEvents.UpdateVisibleRange -> coroutineScope.launch {
|
||||
dataSource.updateVisibleRange(event.range)
|
||||
|
||||
+7
-14
@@ -71,15 +71,12 @@ fun RoomSelectView(
|
||||
onSubmit: (List<RoomId>) -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
@Suppress("UNUSED_PARAMETER")
|
||||
fun onRoomRemoved(roomInfo: SelectRoomInfo) {
|
||||
// TODO toggle selection when multi-selection is enabled
|
||||
state.eventSink(RoomSelectEvents.RemoveSelectedRoom)
|
||||
state.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomInfo))
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun SelectedRoomsHelper(isForwarding: Boolean, selectedRooms: ImmutableList<SelectRoomInfo>) {
|
||||
if (isForwarding) return
|
||||
fun SelectedRoomsHelper(selectedRooms: ImmutableList<SelectRoomInfo>) {
|
||||
SelectedRooms(
|
||||
selectedRooms = selectedRooms,
|
||||
onRemoveRoom = ::onRoomRemoved,
|
||||
@@ -148,8 +145,6 @@ fun RoomSelectView(
|
||||
LazyColumn(state = lazyListState) {
|
||||
item {
|
||||
SelectedRoomsHelper(
|
||||
// TODO state.isForwarding
|
||||
isForwarding = false,
|
||||
selectedRooms = state.selectedRooms
|
||||
)
|
||||
}
|
||||
@@ -159,7 +154,7 @@ fun RoomSelectView(
|
||||
roomSummary,
|
||||
isSelected = state.selectedRooms.any { it.roomId == roomSummary.roomId },
|
||||
onSelection = { roomSummary ->
|
||||
state.eventSink(RoomSelectEvents.SetSelectedRoom(roomSummary))
|
||||
state.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomSummary))
|
||||
}
|
||||
)
|
||||
HorizontalDivider(modifier = Modifier.fillMaxWidth())
|
||||
@@ -169,11 +164,9 @@ fun RoomSelectView(
|
||||
}
|
||||
|
||||
if (!state.isSearchActive) {
|
||||
// TODO restore for multi-selection
|
||||
// SelectedRoomsHelper(
|
||||
// isForwarding = state.isForwarding,
|
||||
// selectedRooms = state.selectedRooms
|
||||
// )
|
||||
SelectedRoomsHelper(
|
||||
selectedRooms = state.selectedRooms
|
||||
)
|
||||
Spacer(modifier = Modifier.height(20.dp))
|
||||
|
||||
if (state.resultState is SearchBarResultState.Results) {
|
||||
@@ -184,7 +177,7 @@ fun RoomSelectView(
|
||||
roomSummary,
|
||||
isSelected = state.selectedRooms.any { it.roomId == roomSummary.roomId },
|
||||
onSelection = { roomSummary ->
|
||||
state.eventSink(RoomSelectEvents.SetSelectedRoom(roomSummary))
|
||||
state.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomSummary))
|
||||
}
|
||||
)
|
||||
HorizontalDivider(modifier = Modifier.fillMaxWidth())
|
||||
|
||||
+2
-2
@@ -117,9 +117,9 @@ class RoomSelectPresenterTest {
|
||||
}.test {
|
||||
val initialState = awaitItem()
|
||||
val roomInfo = roomSummary.toSelectRoomInfo()
|
||||
initialState.eventSink(RoomSelectEvents.SetSelectedRoom(roomInfo))
|
||||
initialState.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomInfo))
|
||||
assertThat(awaitItem().selectedRooms).isEqualTo(persistentListOf(roomInfo))
|
||||
initialState.eventSink(RoomSelectEvents.RemoveSelectedRoom)
|
||||
initialState.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomInfo))
|
||||
assertThat(awaitItem().selectedRooms).isEmpty()
|
||||
cancel()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user