From dc9e853d00f001606e4da87ff692fb246c43c2c6 Mon Sep 17 00:00:00 2001 From: Mauro Romito Date: Mon, 3 Nov 2025 17:33:12 +0100 Subject: [PATCH] Implementation for all navigations inside the space settings aside the left space action # Conflicts: # ElementX/Sources/FlowCoordinators/SpaceSettingsFlowCoordinator.swift --- .../SpaceSettingsFlowCoordinator.swift | 4 +++ .../Views/OverridableAvatarImage.swift | 34 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/ElementX/Sources/FlowCoordinators/SpaceSettingsFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/SpaceSettingsFlowCoordinator.swift index 19bc13ebc..c3e510023 100644 --- a/ElementX/Sources/FlowCoordinators/SpaceSettingsFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/SpaceSettingsFlowCoordinator.swift @@ -63,6 +63,10 @@ final class SpaceSettingsFlowCoordinator: FlowCoordinatorProtocol { private let stateMachine: StateMachine private var cancellables = Set() + private var modalNavigationStackCoordinator: NavigationStackCoordinator? + + private var membersFlowCoordinator: RoomMembersFlowCoordinator? + private var rolesAndPermissionsFlowCoordinator: RoomRolesAndPermissionsFlowCoordinator? private var membersFlowCoordinator: RoomMembersFlowCoordinator? private var rolesAndPermissionsFlowCoordinator: RoomRolesAndPermissionsFlowCoordinator? diff --git a/ElementX/Sources/Other/SwiftUI/Views/OverridableAvatarImage.swift b/ElementX/Sources/Other/SwiftUI/Views/OverridableAvatarImage.swift index 30f9d7795..2238ee2e5 100644 --- a/ElementX/Sources/Other/SwiftUI/Views/OverridableAvatarImage.swift +++ b/ElementX/Sources/Other/SwiftUI/Views/OverridableAvatarImage.swift @@ -39,3 +39,37 @@ struct OverridableAvatarImage: View { } } } + +extension View { + func clipAvatar(isSpace: Bool, size: CGFloat) -> some View { + modifier(ClipAvatarModifier(isSpace: isSpace, size: size)) + } + + func clipAvatar(isSpace: Bool, scaledSize: ScaledMetric) -> some View { + modifier(ClipAvatarModifier(isSpace: isSpace, scaledSize: scaledSize)) + } +} + +struct ClipAvatarModifier: ViewModifier { + private let isSpace: Bool + @ScaledMetric private var scaledSize: CGFloat + + init(isSpace: Bool, size: CGFloat) { + self.isSpace = isSpace + _scaledSize = ScaledMetric(wrappedValue: size) + } + + init(isSpace: Bool, scaledSize: ScaledMetric) { + self.isSpace = isSpace + _scaledSize = scaledSize + } + + func body(content: Content) -> some View { + content + .clipShape(avatarShape) + } + + private var avatarShape: some Shape { + isSpace ? AnyShape(RoundedRectangle(cornerRadius: scaledSize / 4)) : AnyShape(Circle()) + } +}