Limit conversations a message can be forwarded to (#5793)

* Limit conversations a message can be forwarded to

* Review fixups

* fix: remove the unused constant argument

---------

Co-authored-by: Mauro Romito <mauro.romito@element.io>
This commit is contained in:
Michael
2026-06-30 07:01:49 -05:00
committed by GitHub
parent 2d486ece33
commit ff9c260674
3 changed files with 12 additions and 4 deletions
@@ -16,8 +16,13 @@ enum MessageForwardingScreenViewModelAction {
struct MessageForwardingScreenViewState: BindableState {
var rooms: [MessageForwardingRoom] = []
var selectedRoomIDs = [String]()
var selectedRoomIDs: Set<String> = []
let maxRoomSelectionCount = 10
var bindings = MessageForwardingScreenViewStateBindings()
var isAtRoomSelectionLimit: Bool {
selectedRoomIDs.count >= maxRoomSelectionCount
}
}
struct MessageForwardingScreenViewStateBindings {
@@ -63,10 +63,10 @@ class MessageForwardingScreenViewModel: MessageForwardingScreenViewModelType, Me
case .send:
Task { await forward() }
case .selectRoom(let roomID):
if let index = state.selectedRoomIDs.firstIndex(of: roomID) {
state.selectedRoomIDs.remove(at: index)
if state.selectedRoomIDs.contains(roomID) == false, state.selectedRoomIDs.count < state.maxRoomSelectionCount {
state.selectedRoomIDs.insert(roomID)
} else {
state.selectedRoomIDs.append(roomID)
state.selectedRoomIDs.remove(roomID)
}
case .reachedTop:
updateVisibleRange(edge: .top)
@@ -19,6 +19,7 @@ struct MessageForwardingScreen: View {
ForEach(context.viewState.rooms) { room in
MessageForwardingListRow(room: room,
isSelected: context.viewState.selectedRoomIDs.contains(room.id),
isDisabled: context.viewState.isAtRoomSelectionLimit && !context.viewState.selectedRoomIDs.contains(room.id),
context: context)
}
// Replace these with ScrollView's `scrollPosition` when dropping iOS 16.
@@ -68,6 +69,7 @@ private struct MessageForwardingListRow: View {
let room: MessageForwardingRoom
let isSelected: Bool
let isDisabled: Bool
let context: MessageForwardingScreenViewModel.Context
var body: some View {
@@ -77,6 +79,7 @@ private struct MessageForwardingListRow: View {
kind: .selection(isSelected: isSelected) {
context.send(viewAction: .selectRoom(roomID: room.id))
})
.disabled(isDisabled)
}
@ViewBuilder