// // Copyright 2025 Element Creations Ltd. // Copyright 2023-2025 New Vector Ltd. // // SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial. // Please see LICENSE files in the repository root for full details. // import Compound import SwiftUI struct NotificationSettingsEditScreenRoomCell: View { @Environment(\.dynamicTypeSize) var dynamicTypeSize let room: NotificationSettingsEditScreenRoom let context: NotificationSettingsEditScreenViewModel.Context var body: some View { ListRow(label: .avatar(title: room.name, icon: avatar), details: roomDetailsLabel, kind: .navigationLink { if let roomId = room.roomId { context.send(viewAction: .selectRoom(roomIdentifier: roomId)) } }) .lineLimit(1) .accessibilityIdentifier(A11yIdentifiers.notificationSettingsEditScreen.roomName(room.name)) } @ViewBuilder var avatar: some View { if dynamicTypeSize < .accessibility3 { RoomAvatarImage(avatar: room.avatar, avatarSize: .room(on: .notificationSettings), mediaProvider: context.mediaProvider) .dynamicTypeSize(dynamicTypeSize < .accessibility1 ? dynamicTypeSize : .accessibility1) .accessibilityHidden(true) } } var roomDetailsLabel: ListRowDetails? { guard let mode = room.notificationMode else { return nil } return .label(title: context.viewState.strings.string(for: mode), icon: EmptyView()) } } struct NotificationSettingsEditScreenRoomCell_Previews: PreviewProvider, TestablePreview { static let (rooms, viewModel) = makeRooms() static var previews: some View { Form { ForEach(rooms) { room in NotificationSettingsEditScreenRoomCell(room: room, context: viewModel.context) } } .compoundList() } private static func makeRooms() -> ([NotificationSettingsEditScreenRoom], NotificationSettingsEditScreenViewModel) { let summaryProvider = RoomSummaryProviderMock(.init(state: .loaded(.mockRooms))) let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init()) notificationSettingsProxy.getRoomsWithUserDefinedRulesReturnValue = [] let userSession = UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userID: "John Doe", roomSummaryProvider: summaryProvider, notificationSettings: notificationSettingsProxy)))) let viewModel = NotificationSettingsEditScreenViewModel(chatType: .groupChat, userSession: userSession) let rooms = summaryProvider.roomListPublisher.value.map { summary in NotificationSettingsEditScreenRoom(id: UUID().uuidString, roomId: summary.id, name: summary.name, avatar: summary.avatar) } return (rooms, viewModel) } }