Add RoomChangeRolesScreen. (#2534)

Not part of a flow yet, just the screen.
This commit is contained in:
Doug
2024-03-07 16:24:05 +00:00
committed by GitHub
parent 063b3732b1
commit 046f1dd533
19 changed files with 904 additions and 0 deletions
@@ -0,0 +1,80 @@
//
// Copyright 2023 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
import SwiftUI
struct RoomChangeRolesScreenSelectedItem: View {
let member: RoomMemberDetails
let imageProvider: ImageProviderProtocol?
let dismissAction: () -> Void
var body: some View {
VStack(spacing: 4) {
avatar
Text(member.name ?? member.id)
.font(.compound.bodyMD)
.foregroundColor(.compound.textPrimary)
.lineLimit(1)
}
}
// MARK: - Private
var avatar: some View {
LoadableAvatarImage(url: member.avatarURL,
name: member.name,
contentID: member.id,
avatarSize: .user(on: .inviteUsers),
imageProvider: imageProvider)
.overlay(alignment: .topTrailing) {
if member.role != .administrator {
Button(action: dismissAction) {
Image(systemName: "xmark.circle.fill")
.resizable()
.scaledFrame(size: 20)
.symbolRenderingMode(.palette)
.foregroundStyle(Color.compound.iconOnSolidPrimary, Color.compound.iconPrimary)
}
.offset(x: 4)
}
}
}
}
struct RoomChangeRolesScreenSelectedItem_Previews: PreviewProvider, TestablePreview {
static let members: [RoomMemberDetails] = [
RoomMemberProxyMock.mockAlice,
RoomMemberProxyMock.mockDan,
RoomMemberProxyMock.mockVerbose,
RoomMemberProxyMock(with: .init(userID: "@someone:server.org", membership: .join)),
RoomMemberProxyMock.mockAdmin
]
.map { .init(withProxy: $0) }
static var previews: some View {
HStack(spacing: 12) {
ForEach(members, id: \.id) { member in
RoomChangeRolesScreenSelectedItem(member: member,
imageProvider: MockMediaProvider(),
dismissAction: { })
.frame(width: 72)
}
}
.padding()
.previewLayout(.sizeThatFits)
}
}