Restore permissions to creator and display them as owners in the list (#4369)

* restore permissions to creator and display them as owners in the list

* improved the code to use actually 5 roles in the app to distinguish a real creator from an owner
This commit is contained in:
Mauro
2025-07-31 16:52:55 +02:00
committed by GitHub
parent 496c29ae36
commit 731d60b6e9
29 changed files with 205 additions and 137 deletions
@@ -35,7 +35,8 @@ struct RoomChangeRolesScreenViewState: BindableState {
/// The screen's title.
var title: String {
switch mode {
case .administrator:
case .creator, .owner, .administrator:
// TODO: Handle the creator permissions change
L10n.screenRoomChangeRoleAdministratorsTitle
case .moderator:
L10n.screenRoomChangeRoleModeratorsTitle
@@ -64,7 +64,7 @@ class RoomChangeRolesScreenViewModel: RoomChangeRolesScreenViewModelType, RoomCh
case .demoteMember(let member):
demoteMember(member)
case .save:
if state.mode == .administrator, !state.membersToPromote.isEmpty {
if state.mode.isAdminOrHigher, !state.membersToPromote.isEmpty {
showPromotionWarning()
} else {
Task { await save() }
@@ -24,7 +24,7 @@ struct RoomChangeRolesScreenSection: View {
isSelected: isMemberSelected(member)) {
context.send(viewAction: .toggleMember(member))
}
.disabled(member.role == .administrator)
.disabled(member.role.isAdminOrHigher)
}
} header: {
Text(title)
@@ -40,6 +40,6 @@ struct RoomChangeRolesScreenSection: View {
private func isMemberSelected(_ member: RoomMemberDetails) -> Bool {
// We always show administrators as selected, even on the moderators screen.
member.role == .administrator || context.viewState.isMemberSelected(member)
member.role.isAdminOrHigher || context.viewState.isMemberSelected(member)
}
}