mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-03 16:10:00 +00:00
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
|
import io.element.android.libraries.matrix.ui.model.SelectRoomInfo
|
||||||
|
|
||||||
sealed interface RoomSelectEvents {
|
sealed interface RoomSelectEvents {
|
||||||
data class SetSelectedRoom(val room: SelectRoomInfo) : RoomSelectEvents
|
data class ToggleSelectedRoom(val room: SelectRoomInfo) : RoomSelectEvents
|
||||||
|
|
||||||
// TODO remove to restore multi-selection
|
|
||||||
data object RemoveSelectedRoom : RoomSelectEvents
|
|
||||||
data object ToggleSearchActive : RoomSelectEvents
|
data object ToggleSearchActive : RoomSelectEvents
|
||||||
data class UpdateVisibleRange(val range: IntRange) : RoomSelectEvents
|
data class UpdateVisibleRange(val range: IntRange) : RoomSelectEvents
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-10
@@ -69,17 +69,14 @@ class RoomSelectPresenter(
|
|||||||
|
|
||||||
fun handleEvent(event: RoomSelectEvents) {
|
fun handleEvent(event: RoomSelectEvents) {
|
||||||
when (event) {
|
when (event) {
|
||||||
is RoomSelectEvents.SetSelectedRoom -> {
|
is RoomSelectEvents.ToggleSelectedRoom -> {
|
||||||
selectedRooms = persistentListOf(event.room)
|
val index = selectedRooms.indexOfFirst { it.roomId == event.room.roomId }
|
||||||
// Restore for multi-selection
|
selectedRooms = if (index >= 0) {
|
||||||
// val index = selectedRooms.indexOfFirst { it.roomId == event.room.roomId }
|
selectedRooms.removeAt(index)
|
||||||
// selectedRooms = if (index >= 0) {
|
} else {
|
||||||
// selectedRooms.removeAt(index)
|
selectedRooms.add(event.room)
|
||||||
// } else {
|
}
|
||||||
// selectedRooms.add(event.room)
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
RoomSelectEvents.RemoveSelectedRoom -> selectedRooms = persistentListOf()
|
|
||||||
RoomSelectEvents.ToggleSearchActive -> isSearchActive = !isSearchActive
|
RoomSelectEvents.ToggleSearchActive -> isSearchActive = !isSearchActive
|
||||||
is RoomSelectEvents.UpdateVisibleRange -> coroutineScope.launch {
|
is RoomSelectEvents.UpdateVisibleRange -> coroutineScope.launch {
|
||||||
dataSource.updateVisibleRange(event.range)
|
dataSource.updateVisibleRange(event.range)
|
||||||
|
|||||||
+7
-14
@@ -71,15 +71,12 @@ fun RoomSelectView(
|
|||||||
onSubmit: (List<RoomId>) -> Unit,
|
onSubmit: (List<RoomId>) -> Unit,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
) {
|
) {
|
||||||
@Suppress("UNUSED_PARAMETER")
|
|
||||||
fun onRoomRemoved(roomInfo: SelectRoomInfo) {
|
fun onRoomRemoved(roomInfo: SelectRoomInfo) {
|
||||||
// TODO toggle selection when multi-selection is enabled
|
state.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomInfo))
|
||||||
state.eventSink(RoomSelectEvents.RemoveSelectedRoom)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun SelectedRoomsHelper(isForwarding: Boolean, selectedRooms: ImmutableList<SelectRoomInfo>) {
|
fun SelectedRoomsHelper(selectedRooms: ImmutableList<SelectRoomInfo>) {
|
||||||
if (isForwarding) return
|
|
||||||
SelectedRooms(
|
SelectedRooms(
|
||||||
selectedRooms = selectedRooms,
|
selectedRooms = selectedRooms,
|
||||||
onRemoveRoom = ::onRoomRemoved,
|
onRemoveRoom = ::onRoomRemoved,
|
||||||
@@ -148,8 +145,6 @@ fun RoomSelectView(
|
|||||||
LazyColumn(state = lazyListState) {
|
LazyColumn(state = lazyListState) {
|
||||||
item {
|
item {
|
||||||
SelectedRoomsHelper(
|
SelectedRoomsHelper(
|
||||||
// TODO state.isForwarding
|
|
||||||
isForwarding = false,
|
|
||||||
selectedRooms = state.selectedRooms
|
selectedRooms = state.selectedRooms
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -159,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.SetSelectedRoom(roomSummary))
|
state.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomSummary))
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
HorizontalDivider(modifier = Modifier.fillMaxWidth())
|
HorizontalDivider(modifier = Modifier.fillMaxWidth())
|
||||||
@@ -169,11 +164,9 @@ fun RoomSelectView(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!state.isSearchActive) {
|
if (!state.isSearchActive) {
|
||||||
// TODO restore for multi-selection
|
SelectedRoomsHelper(
|
||||||
// SelectedRoomsHelper(
|
selectedRooms = state.selectedRooms
|
||||||
// isForwarding = state.isForwarding,
|
)
|
||||||
// selectedRooms = state.selectedRooms
|
|
||||||
// )
|
|
||||||
Spacer(modifier = Modifier.height(20.dp))
|
Spacer(modifier = Modifier.height(20.dp))
|
||||||
|
|
||||||
if (state.resultState is SearchBarResultState.Results) {
|
if (state.resultState is SearchBarResultState.Results) {
|
||||||
@@ -184,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.SetSelectedRoom(roomSummary))
|
state.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomSummary))
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
HorizontalDivider(modifier = Modifier.fillMaxWidth())
|
HorizontalDivider(modifier = Modifier.fillMaxWidth())
|
||||||
|
|||||||
+2
-2
@@ -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.SetSelectedRoom(roomInfo))
|
initialState.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomInfo))
|
||||||
assertThat(awaitItem().selectedRooms).isEqualTo(persistentListOf(roomInfo))
|
assertThat(awaitItem().selectedRooms).isEqualTo(persistentListOf(roomInfo))
|
||||||
initialState.eventSink(RoomSelectEvents.RemoveSelectedRoom)
|
initialState.eventSink(RoomSelectEvents.ToggleSelectedRoom(roomInfo))
|
||||||
assertThat(awaitItem().selectedRooms).isEmpty()
|
assertThat(awaitItem().selectedRooms).isEmpty()
|
||||||
cancel()
|
cancel()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user