Sort members in the member list by power level and show mods and admins. (#2448)

This commit is contained in:
Doug
2024-02-12 10:39:06 +00:00
committed by GitHub
parent 316e351dbb
commit c1aaf331a3
12 changed files with 127 additions and 15 deletions
@@ -77,7 +77,9 @@ struct RoomMembersListScreen_Previews: PreviewProvider, TestablePreview {
let members: [RoomMemberProxyMock] = [
.mockAlice,
.mockBob,
.mockCharlie
.mockCharlie,
.mockAdmin,
.mockModerator
]
return RoomMembersListScreenViewModel(roomProxy: RoomProxyMock(with: .init(displayName: "Some room", members: members)),
mediaProvider: MockMediaProvider(),
@@ -31,28 +31,50 @@ struct RoomMembersListScreenMemberCell: View {
avatarSize: .user(on: .roomDetails),
imageProvider: context.imageProvider)
.accessibilityHidden(true)
VStack(alignment: .leading, spacing: 0) {
Text(member.name ?? "")
.font(.compound.bodyMDSemibold)
.foregroundColor(.compound.textPrimary)
.lineLimit(1)
Text(member.id)
.font(.compound.bodySM)
.foregroundColor(.compound.textSecondary)
.lineLimit(1)
HStack(alignment: .firstTextBaseline, spacing: 4) {
VStack(alignment: .leading, spacing: 0) {
Text(member.name ?? "")
.font(.compound.bodyMDSemibold)
.foregroundColor(.compound.textPrimary)
.lineLimit(1)
Text(member.id)
.font(.compound.bodySM)
.foregroundColor(.compound.textSecondary)
.lineLimit(1)
}
.frame(maxWidth: .infinity, alignment: .leading)
if let role {
Text(role)
.font(.compound.bodyXS)
.foregroundStyle(.compound.textSecondary)
}
}
}
.frame(maxWidth: .infinity, alignment: .leading)
.accessibilityElement(children: .combine)
}
}
var role: String? {
switch member.role {
case .administrator:
L10n.screenRoomMemberListRoleAdministrator
case .moderator:
L10n.screenRoomMemberListRoleModerator
case .user:
nil
}
}
}
struct RoomMembersListMemberCell_Previews: PreviewProvider, TestablePreview {
static let members: [RoomMemberProxyMock] = [
.mockAlice,
.mockBob,
.mockCharlie
.mockCharlie,
.mockModerator
]
static let viewModel = RoomMembersListScreenViewModel(roomProxy: RoomProxyMock(with: .init(displayName: "Some room", members: members)),
mediaProvider: MockMediaProvider(),