mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-05 20:09:04 +00:00
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:
@@ -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() }
|
||||
|
||||
+2
-2
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -232,7 +232,7 @@ class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScr
|
||||
state.canKickUsers = powerLevels.canOwnUserKick()
|
||||
state.canBanUsers = powerLevels.canOwnUserBan()
|
||||
state.canJoinCall = powerLevels.canOwnUserJoinCall()
|
||||
state.canEditRolesOrPermissions = powerLevels.suggestedRole(forUser: roomProxy.ownUserID) == .administrator
|
||||
state.canEditRolesOrPermissions = powerLevels.canOwnUserEditRolesAndPermissions()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -168,6 +168,8 @@ struct RoomMembersListScreen_Previews: PreviewProvider, TestablePreview {
|
||||
.mockBob,
|
||||
.mockCharlie,
|
||||
mockAdmin,
|
||||
.mockCreator,
|
||||
.mockOwner,
|
||||
.mockModerator
|
||||
]
|
||||
|
||||
|
||||
+2
@@ -55,6 +55,8 @@ struct RoomMembersListScreenMemberCell: View {
|
||||
|
||||
var role: String? {
|
||||
switch listEntry.member.role {
|
||||
case .creator, .owner:
|
||||
L10n.screenRoomMemberListRoleOwner
|
||||
case .administrator:
|
||||
L10n.screenRoomMemberListRoleAdministrator
|
||||
case .moderator:
|
||||
|
||||
+2
-1
@@ -84,7 +84,8 @@ class RoomRolesAndPermissionsScreenViewModel: RoomRolesAndPermissionsScreenViewM
|
||||
// MARK: - Members
|
||||
|
||||
private func updateMembers(_ members: [RoomMemberProxyProtocol]) {
|
||||
state.administratorCount = members.filter { $0.role == .administrator && $0.isActive }.count
|
||||
// TODO: Will probably be changed when we implement the owners list
|
||||
state.administratorCount = members.filter { $0.role.isAdminOrHigher && $0.isActive }.count
|
||||
state.moderatorCount = members.filter { $0.role == .moderator && $0.isActive }.count
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user