mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 01:20:12 +00:00
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:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user