Always open manage member sheet (#4110)

* always open manage member sheet

* Update ElementX/Sources/Screens/ManageRoomMemberSheet/ManageRoomMemberSheetModels.swift

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>

* Update ElementX/Sources/Screens/ManageRoomMemberSheet/ManageRoomMemberSheetModels.swift

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>

* pr suggestions and handled the buttons actions correctly

* Update ElementX/Sources/Screens/ManageRoomMemberSheet/View/ManageRoomMemberSheetView.swift

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>

* fixed some compilation errors

* added some documentation

* using a struct instead of a protocol

* using arguments instead of a struct

---------

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>
This commit is contained in:
Mauro
2025-05-19 16:17:57 +02:00
committed by GitHub
parent 4f4b4b236d
commit 9a8819ac26
25 changed files with 334 additions and 170 deletions
@@ -10,9 +10,35 @@ enum ManageRoomMemberSheetViewModelAction: Equatable {
}
struct ManageRoomMemberSheetViewState: BindableState {
let member: RoomMemberDetails
let canKick: Bool
let canBan: Bool
let memberDetails: ManageRoomMemberDetails
let permissions: ManageRoomMemberPermissions
var isBanUnbanDisabled: Bool {
// This is a best effort check, if we haven't fetched the member yet we assume we can peform the action
guard case let .memberDetails(member) = memberDetails else {
return false
}
return permissions.ownPowerLevel <= member.powerLevel
}
var isKickDisabled: Bool {
// This is a best effort check, if we haven't fetched the member yet we assume we can peform the action
guard case let .memberDetails(member) = memberDetails else {
return false
}
return !member.isActive || permissions.ownPowerLevel <= member.powerLevel
}
var isMemberBanned: Bool {
// This is a best effort check, if we haven't fetched the member yet we assume the member is not banned
guard case let .memberDetails(member) = memberDetails else {
return false
}
return member.isBanned
}
var bindings = ManageRoomMemberSheetViewStateBindings()
}
@@ -24,10 +50,41 @@ struct ManageRoomMemberSheetViewStateBindings {
enum ManageRoomMemberSheetViewAlertType {
case kick
case ban
case unban
}
enum ManageRoomMemberSheetViewAction {
case kick
case ban
case unban
case displayDetails
}
enum ManageRoomMemberDetails {
case memberDetails(roomMember: RoomMemberDetails)
case loadingMemberDetails(sender: TimelineItemSender)
var id: String {
switch self {
case let .memberDetails(roomMember):
roomMember.id
case let .loadingMemberDetails(sender):
sender.id
}
}
var name: String? {
switch self {
case let .memberDetails(roomMember):
roomMember.name
case let .loadingMemberDetails(sender):
sender.displayName
}
}
}
struct ManageRoomMemberPermissions {
let canKick: Bool
let canBan: Bool
let ownPowerLevel: Int
}