mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:55:59 +00:00
Fix various bugs in the moderation feature. (#2608)
* Fix search field string. * Show your own user as an Admin when changing roles. * Also show invited users when changing roles. * Don't allow admin's to kick/ban other admins or themselves. * Fix a bug when left members were counted as admins/moderators. * Show when a member is pending. * Add sections to the change role screen.
This commit is contained in:
+7
-2
@@ -19,6 +19,8 @@ import SwiftUI
|
||||
|
||||
struct RoomMembersListManageMemberSheet: View {
|
||||
let member: RoomMemberDetails
|
||||
let actions: [RoomMembersListScreenManagementDetails.Action]
|
||||
|
||||
@ObservedObject var context: RoomMembersListScreenViewModel.Context
|
||||
|
||||
@State private var isPresentingBanConfirmation = false
|
||||
@@ -38,7 +40,7 @@ struct RoomMembersListManageMemberSheet: View {
|
||||
context.send(viewAction: .showMemberDetails(member))
|
||||
})
|
||||
|
||||
if context.viewState.canKickUsers, !member.isBanned {
|
||||
if actions.contains(.kick) {
|
||||
ListRow(label: .default(title: L10n.screenRoomMemberListManageMemberRemove,
|
||||
icon: \.close),
|
||||
kind: .button {
|
||||
@@ -46,7 +48,7 @@ struct RoomMembersListManageMemberSheet: View {
|
||||
})
|
||||
}
|
||||
|
||||
if context.viewState.canBanUsers, !member.isBanned {
|
||||
if actions.contains(.ban) {
|
||||
ListRow(label: .default(title: L10n.screenRoomMemberListManageMemberBan,
|
||||
icon: \.block,
|
||||
role: .destructive),
|
||||
@@ -76,11 +78,13 @@ struct RoomMembersListManageMemberSheet_Previews: PreviewProvider, TestablePrevi
|
||||
|
||||
static var previews: some View {
|
||||
RoomMembersListManageMemberSheet(member: .init(withProxy: RoomMemberProxyMock.mockDan),
|
||||
actions: [.kick, .ban],
|
||||
context: viewModel.context)
|
||||
.previewDisplayName("Joined")
|
||||
.snapshot(delay: 0.2)
|
||||
|
||||
RoomMembersListManageMemberSheet(member: .init(withProxy: RoomMemberProxyMock.mockBanned[3]),
|
||||
actions: [],
|
||||
context: viewModel.context)
|
||||
.previewDisplayName("Banned")
|
||||
.snapshot(delay: 0.2)
|
||||
@@ -94,6 +98,7 @@ struct RoomMembersListManageMemberSheetLive_Previews: PreviewProvider {
|
||||
Color.clear
|
||||
.sheet(isPresented: .constant(true)) {
|
||||
RoomMembersListManageMemberSheet(member: .init(withProxy: RoomMemberProxyMock.mockDan),
|
||||
actions: [.kick, .ban],
|
||||
context: viewModel.context)
|
||||
}
|
||||
.previewDisplayName("Sheet")
|
||||
|
||||
@@ -49,13 +49,15 @@ struct RoomMembersListScreen: View {
|
||||
.background(.compound.bgCanvasDefault)
|
||||
}
|
||||
}
|
||||
.searchable(text: $context.searchQuery, placement: .navigationBarDrawer(displayMode: .always))
|
||||
.searchable(text: $context.searchQuery,
|
||||
placement: .navigationBarDrawer(displayMode: .always),
|
||||
prompt: L10n.commonSearchForSomeone)
|
||||
.compoundSearchField()
|
||||
.autocorrectionDisabled()
|
||||
.background(Color.compound.bgCanvasDefault.ignoresSafeArea())
|
||||
.navigationTitle(L10n.commonPeople)
|
||||
.sheet(item: $context.memberToManage) {
|
||||
RoomMembersListManageMemberSheet(member: $0, context: context)
|
||||
RoomMembersListManageMemberSheet(member: $0.member, actions: $0.actions, context: context)
|
||||
}
|
||||
.alert(item: $context.alertInfo)
|
||||
.toolbar { toolbar }
|
||||
|
||||
Reference in New Issue
Block a user