mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 15:45:11 +00:00
Last Owner should edit admins, and not leave when is last (#4372)
This commit is contained in:
+11
-6
@@ -14,6 +14,7 @@ class RoomRolesAndPermissionsScreenViewModel: RoomRolesAndPermissionsScreenViewM
|
||||
private let roomProxy: JoinedRoomProxyProtocol
|
||||
private let userIndicatorController: UserIndicatorControllerProtocol
|
||||
private let analytics: AnalyticsService
|
||||
private var ownUser: RoomMemberDetails?
|
||||
|
||||
private var actionsSubject: PassthroughSubject<RoomRolesAndPermissionsScreenViewModelAction, Never> = .init()
|
||||
var actionsPublisher: AnyPublisher<RoomRolesAndPermissionsScreenViewModelAction, Never> {
|
||||
@@ -24,7 +25,8 @@ class RoomRolesAndPermissionsScreenViewModel: RoomRolesAndPermissionsScreenViewM
|
||||
self.roomProxy = roomProxy
|
||||
self.userIndicatorController = userIndicatorController
|
||||
self.analytics = analytics
|
||||
super.init(initialViewState: RoomRolesAndPermissionsScreenViewState(permissions: initialPermissions))
|
||||
super.init(initialViewState: RoomRolesAndPermissionsScreenViewState(ownRole: roomProxy.membersPublisher.value.first(where: { $0.userID == roomProxy.ownUserID })?.role ?? .administrator,
|
||||
permissions: initialPermissions))
|
||||
|
||||
// Automatically update the admin/moderator counts.
|
||||
roomProxy.membersPublisher
|
||||
@@ -80,16 +82,19 @@ class RoomRolesAndPermissionsScreenViewModel: RoomRolesAndPermissionsScreenViewM
|
||||
secondaryButton: .init(title: L10n.actionCancel, role: .cancel) { })
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Members
|
||||
|
||||
private func updateMembers(_ members: [RoomMemberProxyProtocol]) {
|
||||
// TODO: Will probably be changed when we implement the owners list
|
||||
state.administratorCount = members.filter { $0.role.isAdminOrHigher && $0.isActive }.count
|
||||
state.administratorsAndOwnersCount = members.filter { $0.role.isAdminOrHigher && $0.isActive }.count
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
private func updateOwnRole(_ role: RoomMemberDetails.Role) async {
|
||||
private func updateOwnRole(_ role: RoomRole) async {
|
||||
showSavingIndicator()
|
||||
|
||||
// A task we can await until the room's info gets modified with the new power levels.
|
||||
@@ -142,7 +147,7 @@ class RoomRolesAndPermissionsScreenViewModel: RoomRolesAndPermissionsScreenViewM
|
||||
|
||||
hideSavingIndicator()
|
||||
}
|
||||
|
||||
|
||||
// MARK: Loading indicator
|
||||
|
||||
private static let savingIndicatorID = "RolesAndPermissionsSaving"
|
||||
|
||||
Reference in New Issue
Block a user