mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
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:
+6
-1
@@ -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 {
|
||||
|
||||
+3
-3
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user