mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 00:49:44 +00:00
implemented a way to filter out roles that can't be assigned to permission, and disable permissions that are above the current power level of the user.
This commit is contained in:
+3
-3
@@ -17,7 +17,7 @@ struct RoomRolesAndPermissionsScreenCoordinatorParameters {
|
||||
|
||||
enum RoomRolesAndPermissionsScreenCoordinatorAction {
|
||||
case editRoles(RoomRolesAndPermissionsScreenRole)
|
||||
case editPermissions(permissions: RoomPermissions)
|
||||
case editPermissions(ownPowerLevel: RoomPowerLevel, permissions: RoomPermissions)
|
||||
case demotedOwnUser
|
||||
}
|
||||
|
||||
@@ -44,8 +44,8 @@ final class RoomRolesAndPermissionsScreenCoordinator: CoordinatorProtocol {
|
||||
switch action {
|
||||
case .editRoles(let role):
|
||||
actionsSubject.send(.editRoles(role))
|
||||
case .editPermissions(let permissions):
|
||||
actionsSubject.send(.editPermissions(permissions: permissions))
|
||||
case .editPermissions(let ownPowerLevel, let permissions):
|
||||
actionsSubject.send(.editPermissions(ownPowerLevel: ownPowerLevel, permissions: permissions))
|
||||
case .demotedOwnUser:
|
||||
actionsSubject.send(.demotedOwnUser)
|
||||
}
|
||||
|
||||
+2
-2
@@ -12,13 +12,13 @@ enum RoomRolesAndPermissionsScreenViewModelAction {
|
||||
/// The user would like to edit member roles.
|
||||
case editRoles(RoomRolesAndPermissionsScreenRole)
|
||||
/// The user would like to edit room permissions.
|
||||
case editPermissions(permissions: RoomPermissions)
|
||||
case editPermissions(ownPowerLevel: RoomPowerLevel, permissions: RoomPermissions)
|
||||
/// The user has demoted themself.
|
||||
case demotedOwnUser
|
||||
}
|
||||
|
||||
struct RoomRolesAndPermissionsScreenViewState: BindableState {
|
||||
var ownRole: RoomRole
|
||||
var ownPowerLevel: RoomPowerLevel
|
||||
|
||||
var administratorsAndOwnersCount: Int?
|
||||
/// The number of administrators in the room.
|
||||
|
||||
+3
-3
@@ -26,7 +26,7 @@ class RoomRolesAndPermissionsScreenViewModel: RoomRolesAndPermissionsScreenViewM
|
||||
self.roomProxy = roomProxy
|
||||
self.userIndicatorController = userIndicatorController
|
||||
self.analytics = analytics
|
||||
super.init(initialViewState: RoomRolesAndPermissionsScreenViewState(ownRole: roomProxy.membersPublisher.value.first { $0.userID == roomProxy.ownUserID }?.role ?? .administrator,
|
||||
super.init(initialViewState: RoomRolesAndPermissionsScreenViewState(ownPowerLevel: roomProxy.membersPublisher.value.first { $0.userID == roomProxy.ownUserID }?.powerLevel ?? .value(Int(RoomRole.administrator.powerLevelValue)),
|
||||
permissions: initialPermissions))
|
||||
|
||||
// Automatically update the admin/moderator counts.
|
||||
@@ -91,7 +91,7 @@ class RoomRolesAndPermissionsScreenViewModel: RoomRolesAndPermissionsScreenViewM
|
||||
state.administratorCount = members.filter { $0.role == .administrator && $0.isActive }.count
|
||||
state.moderatorCount = members.filter { $0.role == .moderator && $0.isActive }.count
|
||||
if let ownUser = members.first(where: { $0.userID == roomProxy.ownUserID }) {
|
||||
state.ownRole = ownUser.role
|
||||
state.ownPowerLevel = ownUser.powerLevel
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,7 +132,7 @@ class RoomRolesAndPermissionsScreenViewModel: RoomRolesAndPermissionsScreenViewM
|
||||
MXLog.error("Missing permissions.")
|
||||
return
|
||||
}
|
||||
actionsSubject.send(.editPermissions(permissions: permissions))
|
||||
actionsSubject.send(.editPermissions(ownPowerLevel: state.ownPowerLevel, permissions: permissions))
|
||||
}
|
||||
|
||||
private func resetPermissions() async {
|
||||
|
||||
+2
-2
@@ -27,7 +27,7 @@ struct RoomRolesAndPermissionsScreen: View {
|
||||
|
||||
private var rolesSection: some View {
|
||||
Section {
|
||||
if context.viewState.ownRole == .creator {
|
||||
if context.viewState.ownPowerLevel.role == .creator {
|
||||
ListRow(label: .default(title: L10n.screenRoomRolesAndPermissionsAdminsAndOwners,
|
||||
icon: \.admin),
|
||||
details: administratorOrOwnersDetails,
|
||||
@@ -53,7 +53,7 @@ struct RoomRolesAndPermissionsScreen: View {
|
||||
})
|
||||
.accessibilityIdentifier(A11yIdentifiers.roomRolesAndPermissionsScreen.moderators)
|
||||
|
||||
if context.viewState.ownRole != .creator {
|
||||
if context.viewState.ownPowerLevel.role != .creator {
|
||||
ListRow(label: .default(title: L10n.screenRoomRolesAndPermissionsChangeMyRole,
|
||||
icon: \.edit),
|
||||
kind: .button {
|
||||
|
||||
Reference in New Issue
Block a user