More Moderation tweaks (#2566)

* Show room member role changes in the timeline.

* Fix a bug in room flow coordinator.

* Tidy up roles and permissions flow.

* Refresh the power levels in the room details screen.

* Automatically update permissions after saving.

* Remove extra button.

* Add a short delay to the roles and permissions screen snapshots.
The permissions rows are now in a loading state initially.
This commit is contained in:
Doug
2024-03-13 15:36:38 +00:00
committed by GitHub
parent 9d68d9e250
commit 1c914c314f
17 changed files with 212 additions and 43 deletions
@@ -26,7 +26,7 @@ struct RoomChangeRolesScreenCoordinatorParameters {
}
enum RoomChangeRolesScreenCoordinatorAction {
case done
case complete
}
final class RoomChangeRolesScreenCoordinator: CoordinatorProtocol {
@@ -54,8 +54,8 @@ final class RoomChangeRolesScreenCoordinator: CoordinatorProtocol {
guard let self else { return }
switch action {
case .done:
self.actionsSubject.send(.done)
case .complete:
self.actionsSubject.send(.complete)
}
}
.store(in: &cancellables)
@@ -18,7 +18,7 @@ import Collections
import Foundation
enum RoomChangeRolesScreenViewModelAction {
case done
case complete
}
struct RoomChangeRolesScreenViewState: BindableState {
@@ -122,9 +122,19 @@ class RoomChangeRolesScreenViewModel: RoomChangeRolesScreenViewModelType, RoomCh
let promotingUpdates = state.membersToPromote.map { ($0.id, state.mode.rustPowerLevel) }
let demotingUpdates = state.membersToDemote.map { ($0.id, Int64(0)) }
// A task we can await until the room's info gets modified with the new power levels.
let infoTask = Task { await roomProxy.actionsPublisher.values.first { $0 == .roomInfoUpdate } }
switch await roomProxy.updatePowerLevelsForUsers(promotingUpdates + demotingUpdates) {
case .success:
MXLog.info("Success")
// Call updateMembers so the count is correct on the root screen.
_ = await infoTask.value
await roomProxy.updateMembers()
actionsSubject.send(.complete)
case .failure:
context.alertInfo = AlertInfo(id: .error)
}