Permissions screen redesign (#4735)

* Redesigned permissions screen

# Conflicts:
#	ElementX.xcodeproj/project.pbxproj

* updated tests

* update proj

* fix pseudo language tests
This commit is contained in:
Mauro
2025-11-12 14:41:44 +01:00
committed by GitHub
parent cd411b57e0
commit cbe0cfe129
76 changed files with 545 additions and 467 deletions
@@ -17,7 +17,7 @@ struct RoomRolesAndPermissionsScreenCoordinatorParameters {
enum RoomRolesAndPermissionsScreenCoordinatorAction {
case editRoles(RoomRolesAndPermissionsScreenRole)
case editPermissions(permissions: RoomPermissions, group: RoomRolesAndPermissionsScreenPermissionsGroup)
case editPermissions(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, let group):
actionsSubject.send(.editPermissions(permissions: permissions, group: group))
case .editPermissions(let permissions):
actionsSubject.send(.editPermissions(permissions: permissions))
case .demotedOwnUser:
actionsSubject.send(.demotedOwnUser)
}
@@ -12,7 +12,7 @@ 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, group: RoomRolesAndPermissionsScreenPermissionsGroup)
case editPermissions(permissions: RoomPermissions)
/// The user has demoted themself.
case demotedOwnUser
}
@@ -47,7 +47,7 @@ enum RoomRolesAndPermissionsScreenAlertType {
enum RoomRolesAndPermissionsScreenViewAction {
case editRoles(RoomRolesAndPermissionsScreenRole)
case editOwnUserRole
case editPermissions(RoomRolesAndPermissionsScreenPermissionsGroup)
case editPermissions
case reset
}
@@ -55,9 +55,3 @@ enum RoomRolesAndPermissionsScreenRole: Hashable {
case administrators
case moderators
}
enum RoomRolesAndPermissionsScreenPermissionsGroup {
case roomDetails
case messagesAndContent
case memberModeration
}
@@ -71,8 +71,8 @@ class RoomRolesAndPermissionsScreenViewModel: RoomRolesAndPermissionsScreenViewM
Task { await self.updateOwnRole(.user) }
}
])
case .editPermissions(let permissionsGroup):
editPermissions(group: permissionsGroup)
case .editPermissions:
editPermissions()
case .reset:
state.bindings.alertInfo = AlertInfo(id: .resetConfirmation,
title: L10n.screenRoomRolesAndPermissionsResetConfirmTitle,
@@ -126,13 +126,13 @@ class RoomRolesAndPermissionsScreenViewModel: RoomRolesAndPermissionsScreenViewM
}
}
private func editPermissions(group: RoomRolesAndPermissionsScreenPermissionsGroup) {
private func editPermissions() {
guard let permissions = state.permissions else {
state.bindings.alertInfo = AlertInfo(id: .error)
MXLog.error("Missing permissions.")
return
}
actionsSubject.send(.editPermissions(permissions: permissions, group: group))
actionsSubject.send(.editPermissions(permissions: permissions))
}
private func resetPermissions() async {
@@ -92,42 +92,22 @@ struct RoomRolesAndPermissionsScreen: View {
private var permissionsSection: some View {
Section {
ListRow(label: .default(title: L10n.screenRoomRolesAndPermissionsRoomDetails,
icon: \.info),
ListRow(label: .default(title: L10n.screenRoomRolesAndPermissionsPermissionsHeader,
icon: \.settings),
details: .isWaiting(context.viewState.permissions == nil),
kind: .navigationLink {
context.send(viewAction: .editPermissions(.roomDetails))
context.send(viewAction: .editPermissions)
})
.accessibilityIdentifier(A11yIdentifiers.roomRolesAndPermissionsScreen.roomDetails)
.accessibilityIdentifier(A11yIdentifiers.roomRolesAndPermissionsScreen.permissions)
.disabled(context.viewState.permissions == nil)
ListRow(label: .default(title: L10n.screenRoomRolesAndPermissionsMessagesAndContent,
icon: \.chat),
details: .isWaiting(context.viewState.permissions == nil),
kind: .navigationLink {
context.send(viewAction: .editPermissions(.messagesAndContent))
})
.accessibilityIdentifier(A11yIdentifiers.roomRolesAndPermissionsScreen.messagesAndContent)
.disabled(context.viewState.permissions == nil)
ListRow(label: .default(title: L10n.screenRoomRolesAndPermissionsMemberModeration,
icon: \.user),
details: .isWaiting(context.viewState.permissions == nil),
kind: .navigationLink {
context.send(viewAction: .editPermissions(.memberModeration))
})
.accessibilityIdentifier(A11yIdentifiers.roomRolesAndPermissionsScreen.memberModeration)
.disabled(context.viewState.permissions == nil)
} header: {
Text(L10n.screenRoomRolesAndPermissionsPermissionsHeader)
.compoundListSectionHeader()
}
}
private var resetSection: some View {
Section {
ListRow(label: .plain(title: L10n.screenRoomRolesAndPermissionsReset,
role: .destructive),
ListRow(label: .default(title: L10n.screenRoomRolesAndPermissionsReset,
icon: \.delete,
role: .destructive),
kind: .button {
context.send(viewAction: .reset)
})