mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-05 11:58:32 +00:00
Moderation tweaks (#2548)
* Only allow admins to see the roles and permissions screen. * Hide the selection checkbox on Admins when changing roles. * Show an empty state for banned users. * Add separate actions for ban and remove. * Implement reset permissions and demote self alerts. * Add tests for resetting permissions and demoting self. * Add a warning when promoting someone to administrator.
This commit is contained in:
@@ -54,8 +54,10 @@ class RoomRolesAndPermissionsFlowCoordinator: FlowCoordinatorProtocol {
|
||||
case finishedChangingRoles
|
||||
/// The user would like to change room permissions.
|
||||
case changePermissions
|
||||
/// The user finished changing room permissions
|
||||
/// The user finished changing room permissions.
|
||||
case finishedChangingPermissions
|
||||
/// The user has demoted themself.
|
||||
case demotedOwnUser
|
||||
}
|
||||
|
||||
private let stateMachine: StateMachine<State, Event>
|
||||
@@ -118,20 +120,26 @@ class RoomRolesAndPermissionsFlowCoordinator: FlowCoordinatorProtocol {
|
||||
}
|
||||
stateMachine.addRoutes(event: .finishedChangingPermissions, transitions: [.changingPermissions => .rolesAndPermissionsScreen])
|
||||
|
||||
stateMachine.addHandler(event: .demotedOwnUser) { [weak self] _ in
|
||||
self?.actionsSubject.send(.complete)
|
||||
}
|
||||
|
||||
stateMachine.addErrorHandler { context in
|
||||
fatalError("Unexpected transition: \(context)")
|
||||
}
|
||||
}
|
||||
|
||||
private func presentRolesAndPermissionsScreen() {
|
||||
let parameters = RoomRolesAndPermissionsScreenCoordinatorParameters(roomProxy: roomProxy)
|
||||
let parameters = RoomRolesAndPermissionsScreenCoordinatorParameters(roomProxy: roomProxy, userIndicatorController: userIndicatorController)
|
||||
let coordinator = RoomRolesAndPermissionsScreenCoordinator(parameters: parameters)
|
||||
coordinator.actions.sink { [stateMachine] action in
|
||||
coordinator.actionsPublisher.sink { [stateMachine] action in
|
||||
switch action {
|
||||
case .editRoles(let role):
|
||||
stateMachine.tryEvent(.changeRoles, userInfo: role)
|
||||
case .editPermissions(let group):
|
||||
stateMachine.tryEvent(.changePermissions, userInfo: (group, RoomPermissions(powerLevels: .mock)))
|
||||
case .demotedOwnUser:
|
||||
stateMachine.tryEvent(.demotedOwnUser)
|
||||
}
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
|
||||
Reference in New Issue
Block a user