mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
implemented the navigation to the manage auth spaces screen
# Conflicts: # ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift # ElementX/Sources/FlowCoordinators/SpaceSettingsFlowCoordinator.swift # ElementX/Sources/Screens/SecurityAndPrivacyScreen/SecurityAndPrivacyScreenCoordinator.swift # ElementX/Sources/Screens/SecurityAndPrivacyScreen/SecurityAndPrivacyScreenModels.swift
This commit is contained in:
+3
@@ -19,6 +19,7 @@ struct SecurityAndPrivacyScreenCoordinatorParameters {
|
||||
enum SecurityAndPrivacyScreenCoordinatorAction {
|
||||
case displayEditAddressScreen
|
||||
case dismiss
|
||||
case displayManageAuthorizedSpacesScreen(AuthorizedSpacesSelection)
|
||||
}
|
||||
|
||||
final class SecurityAndPrivacyScreenCoordinator: CoordinatorProtocol {
|
||||
@@ -44,6 +45,8 @@ final class SecurityAndPrivacyScreenCoordinator: CoordinatorProtocol {
|
||||
|
||||
guard let self else { return }
|
||||
switch action {
|
||||
case .displayManageAuthorizedSpacesScreen(let selection):
|
||||
actionsSubject.send(.displayManageAuthorizedSpacesScreen(selection))
|
||||
case .displayEditAddressScreen:
|
||||
actionsSubject.send(.displayEditAddressScreen)
|
||||
case .dismiss:
|
||||
|
||||
@@ -11,6 +11,7 @@ import Foundation
|
||||
enum SecurityAndPrivacyScreenViewModelAction {
|
||||
case displayEditAddressScreen
|
||||
case dismiss
|
||||
case displayManageAuthorizedSpacesScreen(AuthorizedSpacesSelection)
|
||||
}
|
||||
|
||||
struct SecurityAndPrivacyScreenViewState: BindableState {
|
||||
|
||||
+23
-10
@@ -81,8 +81,7 @@ class SecurityAndPrivacyScreenViewModel: SecurityAndPrivacyScreenViewModelType,
|
||||
case .selectedSpaceMembersAccess:
|
||||
handleSelectedSpaceMembersAccess()
|
||||
case .manageSpaces:
|
||||
// TODO: Implement multiple space selection
|
||||
break
|
||||
displayManageAuthorizedSpacesScreen()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -236,15 +235,29 @@ class SecurityAndPrivacyScreenViewModel: SecurityAndPrivacyScreenViewModelType,
|
||||
}
|
||||
|
||||
private func handleSelectedSpaceMembersAccess() {
|
||||
switch context.viewState.spaceSelection {
|
||||
case .singleJoined(let joinedParent):
|
||||
context.desiredSettings.accessType = .spaceUsers(spaceIDs: [joinedParent.id])
|
||||
case .singleUnknown(let id):
|
||||
context.desiredSettings.accessType = .spaceUsers(spaceIDs: [id])
|
||||
case .multiple:
|
||||
// TODO: Implement multiple space selection
|
||||
break
|
||||
guard !state.bindings.desiredSettings.accessType.isSpaceUsers else {
|
||||
return
|
||||
}
|
||||
|
||||
switch state.spaceSelection {
|
||||
case .singleJoined(let joinedParent):
|
||||
state.bindings.desiredSettings.accessType = .spaceUsers(spaceIDs: [joinedParent.id])
|
||||
case .singleUnknown(let id):
|
||||
state.bindings.desiredSettings.accessType = .spaceUsers(spaceIDs: [id])
|
||||
case .multiple:
|
||||
displayManageAuthorizedSpacesScreen()
|
||||
}
|
||||
}
|
||||
|
||||
private func displayManageAuthorizedSpacesScreen() {
|
||||
let joinedParentSpaces = state.joinedParentSpaces
|
||||
let unknownSpaceIDs = state.currentSettings.accessType.spaceIDs.filter { id in
|
||||
!joinedParentSpaces.contains(where: { $0.id == id })
|
||||
}
|
||||
let selectedIDs = Set(state.bindings.desiredSettings.accessType.spaceIDs)
|
||||
actionsSubject.send(.displayManageAuthorizedSpacesScreen(.init(joinedParentSpaces: joinedParentSpaces,
|
||||
unknownSpacesIDs: unknownSpaceIDs,
|
||||
selectedIDs: selectedIDs)))
|
||||
}
|
||||
|
||||
private static let loadingIndicatorIdentifier = "\(EditRoomAddressScreenViewModel.self)-Loading"
|
||||
|
||||
Reference in New Issue
Block a user