From 722e99b1ea456b3572473b231a72bb16dc66a106 Mon Sep 17 00:00:00 2001 From: Vova Ignatov Date: Tue, 25 Feb 2025 17:01:59 +0000 Subject: [PATCH] IOS-4194 Supported dynamic space info opening --- .../HomeWidgetsCoordinatorViewModel.swift | 2 +- .../Flows/SpaceHub/SpaceHubCoordinatorView.swift | 8 +++++++- .../SpaceHub/SpaceHubCoordinatorViewModel.swift | 15 +++++++++++++-- .../TextEditor/Assembly/ScreenData.swift | 8 ++++---- .../TextEditor/Assembly/SettingsScreenData.swift | 11 +++++++++-- 5 files changed, 34 insertions(+), 10 deletions(-) diff --git a/Anytype/Sources/PresentationLayer/Flows/HomeWidgetsCoordinator/HomeWidgetsCoordinatorViewModel.swift b/Anytype/Sources/PresentationLayer/Flows/HomeWidgetsCoordinator/HomeWidgetsCoordinatorViewModel.swift index f7175121c8..4366830bf8 100644 --- a/Anytype/Sources/PresentationLayer/Flows/HomeWidgetsCoordinator/HomeWidgetsCoordinatorViewModel.swift +++ b/Anytype/Sources/PresentationLayer/Flows/HomeWidgetsCoordinator/HomeWidgetsCoordinatorViewModel.swift @@ -39,7 +39,7 @@ final class HomeWidgetsCoordinatorViewModel: ObservableObject, HomeWidgetsModule func onSpaceSelected() { if FeatureFlags.newSettings { - pageNavigation?.open(.settings(.mainScreen(info: spaceInfo))) + pageNavigation?.open(.spaceInfo(.mainScreen(info: spaceInfo))) } else { showSpaceSettingsData = spaceInfo } diff --git a/Anytype/Sources/PresentationLayer/Flows/SpaceHub/SpaceHubCoordinatorView.swift b/Anytype/Sources/PresentationLayer/Flows/SpaceHub/SpaceHubCoordinatorView.swift index 902c76f995..1fa9eb0c35 100644 --- a/Anytype/Sources/PresentationLayer/Flows/SpaceHub/SpaceHubCoordinatorView.swift +++ b/Anytype/Sources/PresentationLayer/Flows/SpaceHub/SpaceHubCoordinatorView.swift @@ -64,6 +64,12 @@ struct SpaceHubCoordinatorView: View { .anytypeSheet(item: $model.profileData) { ProfileView(info: $0) } + .anytypeSheet(item: $model.spaceProfileData) { _ in + ZStack { + RoundedRectangle(cornerRadius: 8).frame(height: 300).foregroundStyle(Color.System.amber25) + AnytypeText("TBD; space profile", style: .title) + } + } .safariBookmarkObject($model.bookmarkScreenData) { model.onOpenBookmarkAsObject($0) } @@ -89,7 +95,7 @@ struct SpaceHubCoordinatorView: View { builder.appendBuilder(for: ChatCoordinatorData.self) { ChatCoordinatorView(data: $0) } - builder.appendBuilder(for: SettingsScreenData.self) { data in + builder.appendBuilder(for: SpaceInfoScreenData.self) { data in switch data { case .mainScreen(let info): NewSpaceSettingsCoordinatorView(workspaceInfo: info) diff --git a/Anytype/Sources/PresentationLayer/Flows/SpaceHub/SpaceHubCoordinatorViewModel.swift b/Anytype/Sources/PresentationLayer/Flows/SpaceHub/SpaceHubCoordinatorViewModel.swift index 4df6acdf4d..fdea6afec6 100644 --- a/Anytype/Sources/PresentationLayer/Flows/SpaceHub/SpaceHubCoordinatorViewModel.swift +++ b/Anytype/Sources/PresentationLayer/Flows/SpaceHub/SpaceHubCoordinatorViewModel.swift @@ -12,6 +12,7 @@ final class SpaceHubCoordinatorViewModel: ObservableObject { @Published var showSpaceManager = false @Published var showObjectIsNotAvailableAlert = false @Published var profileData: ObjectInfo? + @Published var spaceProfileData: AccountInfo? @Published var userWarningAlert: UserWarningAlert? @Published var typeSearchForObjectCreationSpaceId: StringIdentifiable? @Published var sharingSpaceId: StringIdentifiable? @@ -261,8 +262,18 @@ final class SpaceHubCoordinatorViewModel: ObservableObject { case .bookmark(let data): await dismissAllPresented?() bookmarkScreenData = data - case .settings(let data): - navigationPath.push(data) + case .spaceInfo(let data): + guard let spaceView = participantSpacesStorage.participantSpaceView(spaceId: data.spaceId) else { + return + } + + if spaceView.isOwner { + navigationPath.push(data) + } else { + await dismissAllPresented?() + spaceProfileData = spaceInfo + } + case nil: return } diff --git a/Anytype/Sources/PresentationLayer/TextEditor/Assembly/ScreenData.swift b/Anytype/Sources/PresentationLayer/TextEditor/Assembly/ScreenData.swift index 80a4b201c3..0a31a54ea7 100644 --- a/Anytype/Sources/PresentationLayer/TextEditor/Assembly/ScreenData.swift +++ b/Anytype/Sources/PresentationLayer/TextEditor/Assembly/ScreenData.swift @@ -16,7 +16,7 @@ enum ScreenData: Hashable, Identifiable { case alert(AlertScreenData) case preview(MediaFileScreenData) case bookmark(BookmarkScreenData) - case settings(SettingsScreenData) + case spaceInfo(SpaceInfoScreenData) var id: Int { hashValue } } @@ -30,7 +30,7 @@ extension ScreenData { return alertScreenData.objectId case .bookmark(let data): return data.editorScreenData.objectId - case .preview, .settings: + case .preview, .spaceInfo: return nil } } @@ -45,7 +45,7 @@ extension ScreenData { mediaFileScreenData.spaceId case .bookmark(let data): data.editorScreenData.spaceId - case .settings(let data): + case .spaceInfo(let data): data.spaceId } } @@ -54,7 +54,7 @@ extension ScreenData { switch self { case .editor(let editorScreenData): return editorScreenData - case .alert, .preview, .bookmark, .settings: + case .alert, .preview, .bookmark, .spaceInfo: return nil } } diff --git a/Anytype/Sources/PresentationLayer/TextEditor/Assembly/SettingsScreenData.swift b/Anytype/Sources/PresentationLayer/TextEditor/Assembly/SettingsScreenData.swift index 55d14d9f96..ccb54c4712 100644 --- a/Anytype/Sources/PresentationLayer/TextEditor/Assembly/SettingsScreenData.swift +++ b/Anytype/Sources/PresentationLayer/TextEditor/Assembly/SettingsScreenData.swift @@ -1,6 +1,6 @@ import Services -enum SettingsScreenData: Hashable, Codable, Equatable, Identifiable { +enum SpaceInfoScreenData: Hashable, Codable, Equatable, Identifiable { // Anytype widget screens case mainScreen(info: AccountInfo) @@ -11,7 +11,14 @@ enum SettingsScreenData: Hashable, Codable, Equatable, Identifiable { var spaceId: String { switch self { case .mainScreen(let info): - return info.accountSpaceId + info.accountSpaceId + } + } + + var accountInfo: AccountInfo { + switch self { + case .mainScreen(let info): + info } } }