diff --git a/Anytype.xcodeproj/project.pbxproj b/Anytype.xcodeproj/project.pbxproj index ca54e9315c..749767f3d9 100644 --- a/Anytype.xcodeproj/project.pbxproj +++ b/Anytype.xcodeproj/project.pbxproj @@ -688,10 +688,8 @@ 2AC429A629B784280002AD05 /* BaseDocumentProtocol+Home.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC429A529B784280002AD05 /* BaseDocumentProtocol+Home.swift */; }; 2AC434972B7A0683006166BF /* SpaceShareView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC434962B7A0683006166BF /* SpaceShareView.swift */; }; 2AC434992B7A068B006166BF /* SpaceShareViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC434982B7A068B006166BF /* SpaceShareViewModel.swift */; }; - 2AC4349B2B7A0697006166BF /* SpaceShareModuleAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC4349A2B7A0697006166BF /* SpaceShareModuleAssembly.swift */; }; 2AC4349E2B7A074B006166BF /* SpaceShareCoordinatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC4349D2B7A074B006166BF /* SpaceShareCoordinatorView.swift */; }; 2AC434A02B7A0759006166BF /* SpaceShareCoordinatorViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC4349F2B7A0759006166BF /* SpaceShareCoordinatorViewModel.swift */; }; - 2AC434A22B7A0763006166BF /* SpaceShareCoordinatorAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC434A12B7A0763006166BF /* SpaceShareCoordinatorAssembly.swift */; }; 2AC434AA2B7A15B9006166BF /* SpaceShareParticipantView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC434A92B7A15B9006166BF /* SpaceShareParticipantView.swift */; }; 2AC434AC2B7A1D17006166BF /* CommonError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC434AB2B7A1D17006166BF /* CommonError.swift */; }; 2AC434B02B7A20EF006166BF /* Participant+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC434AF2B7A20EF006166BF /* Participant+Extensions.swift */; }; @@ -2484,10 +2482,8 @@ 2AC434942B7A0100006166BF /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = nl; path = nl.lproj/Localizable.stringsdict; sourceTree = ""; }; 2AC434962B7A0683006166BF /* SpaceShareView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceShareView.swift; sourceTree = ""; }; 2AC434982B7A068B006166BF /* SpaceShareViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceShareViewModel.swift; sourceTree = ""; }; - 2AC4349A2B7A0697006166BF /* SpaceShareModuleAssembly.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceShareModuleAssembly.swift; sourceTree = ""; }; 2AC4349D2B7A074B006166BF /* SpaceShareCoordinatorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceShareCoordinatorView.swift; sourceTree = ""; }; 2AC4349F2B7A0759006166BF /* SpaceShareCoordinatorViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceShareCoordinatorViewModel.swift; sourceTree = ""; }; - 2AC434A12B7A0763006166BF /* SpaceShareCoordinatorAssembly.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceShareCoordinatorAssembly.swift; sourceTree = ""; }; 2AC434A92B7A15B9006166BF /* SpaceShareParticipantView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceShareParticipantView.swift; sourceTree = ""; }; 2AC434AB2B7A1D17006166BF /* CommonError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommonError.swift; sourceTree = ""; }; 2AC434AF2B7A20EF006166BF /* Participant+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Participant+Extensions.swift"; sourceTree = ""; }; @@ -6546,7 +6542,6 @@ 2AC434A82B7A15AD006166BF /* Subviews */, 2AC434962B7A0683006166BF /* SpaceShareView.swift */, 2AC434982B7A068B006166BF /* SpaceShareViewModel.swift */, - 2AC4349A2B7A0697006166BF /* SpaceShareModuleAssembly.swift */, ); path = SpaceShare; sourceTree = ""; @@ -6556,7 +6551,6 @@ children = ( 2AC4349D2B7A074B006166BF /* SpaceShareCoordinatorView.swift */, 2AC4349F2B7A0759006166BF /* SpaceShareCoordinatorViewModel.swift */, - 2AC434A12B7A0763006166BF /* SpaceShareCoordinatorAssembly.swift */, ); path = SpaceShareCoordinator; sourceTree = ""; @@ -11508,7 +11502,6 @@ 2E2D256028880C8D00E3DFD1 /* SetFiltersContentViewBuilder.swift in Sources */, C93B2D32274E4FA70008544D /* TwoStandardButtonsView.swift in Sources */, 120E818E26A05946006FE84E /* ObjectIconPickerViewModel.swift in Sources */, - 2AC434A22B7A0763006166BF /* SpaceShareCoordinatorAssembly.swift in Sources */, 2AFD7E182B626C2D003B16EB /* KeyboardDismiss.swift in Sources */, 3DB692B12697645C00149864 /* MiddlewareColorConverter.swift in Sources */, 2A5BC4BE2A78F9D9004FAABF /* SquircleIconPainter.swift in Sources */, @@ -12139,7 +12132,6 @@ 3D471E1F26C3B60200457DE5 /* BlockLinkState+Icon.swift in Sources */, 3DA6263D2657AB8000942249 /* AnimationExtension.swift in Sources */, 53728D00273596C40092A8CF /* MarkupAccessoryViewModel.swift in Sources */, - 2AC4349B2B7A0697006166BF /* SpaceShareModuleAssembly.swift in Sources */, 1289F5A42733C50500656EC2 /* TextRelationFactory.swift in Sources */, 2AF2C6B928BD104B00F8612B /* UIAnytypeActivityIndicator.swift in Sources */, 120EB4DC26E8E94C003A0C2B /* ObjectHeaderView.swift in Sources */, diff --git a/Anytype/Sources/PresentationLayer/Assemblies/CoordinatorsDI.swift b/Anytype/Sources/PresentationLayer/Assemblies/CoordinatorsDI.swift index 0f6d8e5b59..8eeac95017 100644 --- a/Anytype/Sources/PresentationLayer/Assemblies/CoordinatorsDI.swift +++ b/Anytype/Sources/PresentationLayer/Assemblies/CoordinatorsDI.swift @@ -189,10 +189,6 @@ final class CoordinatorsDI: CoordinatorsDIProtocol { ) } - func spaceShare() -> SpaceShareCoordinatorAssemblyProtocol { - SpaceShareCoordinatorAssembly(modulesDI: modulesDI) - } - func typeSearchForNewObject() -> TypeSearchForNewObjectCoordinatorAssemblyProtocol { TypeSearchForNewObjectCoordinatorAssembly( serviceLocator: serviceLocator, diff --git a/Anytype/Sources/PresentationLayer/Assemblies/CoordinatorsDIProtocol.swift b/Anytype/Sources/PresentationLayer/Assemblies/CoordinatorsDIProtocol.swift index acd81ae226..5863747ef6 100644 --- a/Anytype/Sources/PresentationLayer/Assemblies/CoordinatorsDIProtocol.swift +++ b/Anytype/Sources/PresentationLayer/Assemblies/CoordinatorsDIProtocol.swift @@ -34,7 +34,6 @@ protocol CoordinatorsDIProtocol: AnyObject { func setObjectCreation() -> SetObjectCreationCoordinatorAssemblyProtocol func serverConfiguration() -> ServerConfigurationCoordinatorAssemblyProtocol func sharingTip() -> SharingTipCoordinatorProtocol - func spaceShare() -> SpaceShareCoordinatorAssemblyProtocol func typeSearchForNewObject() -> TypeSearchForNewObjectCoordinatorAssemblyProtocol // Now like a coordinator. Migrate to isolated modules diff --git a/Anytype/Sources/PresentationLayer/Assemblies/ModulesDI.swift b/Anytype/Sources/PresentationLayer/Assemblies/ModulesDI.swift index 01108fde34..695382b260 100644 --- a/Anytype/Sources/PresentationLayer/Assemblies/ModulesDI.swift +++ b/Anytype/Sources/PresentationLayer/Assemblies/ModulesDI.swift @@ -213,8 +213,4 @@ final class ModulesDI: ModulesDIProtocol { func shareOptions() -> ShareOptionsModuleAssemblyProtocol { ShareOptionsModuleAssembly(serviceLocator: serviceLocator) } - - func spareShare() -> SpaceShareModuleAssemblyProtocol { - SpaceShareModuleAssembly(serviceLocator: serviceLocator) - } } diff --git a/Anytype/Sources/PresentationLayer/Assemblies/ModulesDIProtocol.swift b/Anytype/Sources/PresentationLayer/Assemblies/ModulesDIProtocol.swift index 62bffbd159..9246708f2a 100644 --- a/Anytype/Sources/PresentationLayer/Assemblies/ModulesDIProtocol.swift +++ b/Anytype/Sources/PresentationLayer/Assemblies/ModulesDIProtocol.swift @@ -50,5 +50,4 @@ protocol ModulesDIProtocol: AnyObject { func serverDocumentPicker() -> ServerDocumentPickerModuleAssemblyProtocol func sharingTip() -> SharingTipModuleAssemblyProtocol func shareOptions() -> ShareOptionsModuleAssemblyProtocol - func spareShare() -> SpaceShareModuleAssemblyProtocol } diff --git a/Anytype/Sources/PresentationLayer/Flows/SpaceSettings/SpaceSettingsCoordinatorAssembly.swift b/Anytype/Sources/PresentationLayer/Flows/SpaceSettings/SpaceSettingsCoordinatorAssembly.swift index 1571fad9b9..5aa20fd8c7 100644 --- a/Anytype/Sources/PresentationLayer/Flows/SpaceSettings/SpaceSettingsCoordinatorAssembly.swift +++ b/Anytype/Sources/PresentationLayer/Flows/SpaceSettings/SpaceSettingsCoordinatorAssembly.swift @@ -39,7 +39,6 @@ final class SpaceSettingsCoordinatorAssembly: SpaceSettingsCoordinatorAssemblyPr newSearchModuleAssembly: self.modulesDI.newSearch(), objectTypeSearchModuleAssembly: self.modulesDI.objectTypeSearch(), wallpaperPickerModuleAssembly: self.modulesDI.wallpaperPicker(), - spaceShareCoordinatorAssembly: self.coordinatorsDI.spaceShare(), objectTypeProvider: self.serviceLocator.objectTypeProvider(), urlOpener: self.uiHelpersDI.urlOpener(), documentService: self.serviceLocator.documentService() diff --git a/Anytype/Sources/PresentationLayer/Flows/SpaceSettings/SpaceSettingsCoordinatorView.swift b/Anytype/Sources/PresentationLayer/Flows/SpaceSettings/SpaceSettingsCoordinatorView.swift index 151b13fa38..3da2404925 100644 --- a/Anytype/Sources/PresentationLayer/Flows/SpaceSettings/SpaceSettingsCoordinatorView.swift +++ b/Anytype/Sources/PresentationLayer/Flows/SpaceSettings/SpaceSettingsCoordinatorView.swift @@ -18,7 +18,7 @@ struct SpaceSettingsCoordinatorView: View { } } .sheet(isPresented: $model.showSpaceShare) { - model.spaceShareModule() + SpaceShareCoordinatorView() } .sheet(isPresented: $model.showSpaceMembers) { SpaceMembersView() diff --git a/Anytype/Sources/PresentationLayer/Flows/SpaceSettings/SpaceSettingsCoordinatorViewModel.swift b/Anytype/Sources/PresentationLayer/Flows/SpaceSettings/SpaceSettingsCoordinatorViewModel.swift index cebe3589dd..4791c6c33e 100644 --- a/Anytype/Sources/PresentationLayer/Flows/SpaceSettings/SpaceSettingsCoordinatorViewModel.swift +++ b/Anytype/Sources/PresentationLayer/Flows/SpaceSettings/SpaceSettingsCoordinatorViewModel.swift @@ -14,7 +14,6 @@ final class SpaceSettingsCoordinatorViewModel: ObservableObject, SpaceSettingsMo private let newSearchModuleAssembly: NewSearchModuleAssemblyProtocol private let objectTypeSearchModuleAssembly: ObjectTypeSearchModuleAssemblyProtocol private let wallpaperPickerModuleAssembly: WallpaperPickerModuleAssemblyProtocol - private let spaceShareCoordinatorAssembly: SpaceShareCoordinatorAssemblyProtocol private let objectTypeProvider: ObjectTypeProviderProtocol private let urlOpener: URLOpenerProtocol private let documentService: OpenedDocumentsProviderProtocol @@ -38,7 +37,6 @@ final class SpaceSettingsCoordinatorViewModel: ObservableObject, SpaceSettingsMo newSearchModuleAssembly: NewSearchModuleAssemblyProtocol, objectTypeSearchModuleAssembly: ObjectTypeSearchModuleAssemblyProtocol, wallpaperPickerModuleAssembly: WallpaperPickerModuleAssemblyProtocol, - spaceShareCoordinatorAssembly: SpaceShareCoordinatorAssemblyProtocol, objectTypeProvider: ObjectTypeProviderProtocol, urlOpener: URLOpenerProtocol, documentService: OpenedDocumentsProviderProtocol @@ -51,7 +49,6 @@ final class SpaceSettingsCoordinatorViewModel: ObservableObject, SpaceSettingsMo self.newSearchModuleAssembly = newSearchModuleAssembly self.objectTypeSearchModuleAssembly = objectTypeSearchModuleAssembly self.wallpaperPickerModuleAssembly = wallpaperPickerModuleAssembly - self.spaceShareCoordinatorAssembly = spaceShareCoordinatorAssembly self.objectTypeProvider = objectTypeProvider self.urlOpener = urlOpener self.documentService = documentService @@ -67,10 +64,6 @@ final class SpaceSettingsCoordinatorViewModel: ObservableObject, SpaceSettingsMo return wallpaperPickerModuleAssembly.make(spaceId: accountSpaceId) } - func spaceShareModule() -> AnyView { - return spaceShareCoordinatorAssembly.make() - } - // MARK: - SpaceSettingsModuleOutput func onChangeIconSelected(objectId: String) { diff --git a/Anytype/Sources/PresentationLayer/Flows/SpaceShareCoordinator/SpaceShareCoordinatorAssembly.swift b/Anytype/Sources/PresentationLayer/Flows/SpaceShareCoordinator/SpaceShareCoordinatorAssembly.swift deleted file mode 100644 index 9e33f537c9..0000000000 --- a/Anytype/Sources/PresentationLayer/Flows/SpaceShareCoordinator/SpaceShareCoordinatorAssembly.swift +++ /dev/null @@ -1,24 +0,0 @@ -import Foundation -import SwiftUI - -@MainActor -protocol SpaceShareCoordinatorAssemblyProtocol: AnyObject { - func make() -> AnyView -} - -final class SpaceShareCoordinatorAssembly: SpaceShareCoordinatorAssemblyProtocol { - - private let modulesDI: ModulesDIProtocol - - nonisolated init(modulesDI: ModulesDIProtocol) { - self.modulesDI = modulesDI - } - - // MARK: - SpaceShareCoordinatorAssemblyProtocol - - func make() -> AnyView { - return SpaceShareCoordinatorView( - model: SpaceShareCoordinatorViewModel(spaceShareModule: self.modulesDI.spareShare()) - ).eraseToAnyView() - } -} diff --git a/Anytype/Sources/PresentationLayer/Flows/SpaceShareCoordinator/SpaceShareCoordinatorView.swift b/Anytype/Sources/PresentationLayer/Flows/SpaceShareCoordinator/SpaceShareCoordinatorView.swift index c9c522ede1..8d0a27285c 100644 --- a/Anytype/Sources/PresentationLayer/Flows/SpaceShareCoordinator/SpaceShareCoordinatorView.swift +++ b/Anytype/Sources/PresentationLayer/Flows/SpaceShareCoordinator/SpaceShareCoordinatorView.swift @@ -3,9 +3,9 @@ import SwiftUI struct SpaceShareCoordinatorView: View { - @StateObject var model: SpaceShareCoordinatorViewModel + @StateObject private var model = SpaceShareCoordinatorViewModel() var body: some View { - model.shareModule() + SpaceShareView() } } diff --git a/Anytype/Sources/PresentationLayer/Flows/SpaceShareCoordinator/SpaceShareCoordinatorViewModel.swift b/Anytype/Sources/PresentationLayer/Flows/SpaceShareCoordinator/SpaceShareCoordinatorViewModel.swift index 76e44e7047..7a8a622bcf 100644 --- a/Anytype/Sources/PresentationLayer/Flows/SpaceShareCoordinator/SpaceShareCoordinatorViewModel.swift +++ b/Anytype/Sources/PresentationLayer/Flows/SpaceShareCoordinator/SpaceShareCoordinatorViewModel.swift @@ -4,13 +4,6 @@ import SwiftUI @MainActor final class SpaceShareCoordinatorViewModel: ObservableObject { - private let spaceShareModule: SpaceShareModuleAssemblyProtocol - - init(spaceShareModule: SpaceShareModuleAssemblyProtocol) { - self.spaceShareModule = spaceShareModule - } - - func shareModule() -> AnyView { - return spaceShareModule.make() + init() { } } diff --git a/Anytype/Sources/PresentationLayer/Modules/SpaceShare/SpaceShareModuleAssembly.swift b/Anytype/Sources/PresentationLayer/Modules/SpaceShare/SpaceShareModuleAssembly.swift deleted file mode 100644 index e602dab0f8..0000000000 --- a/Anytype/Sources/PresentationLayer/Modules/SpaceShare/SpaceShareModuleAssembly.swift +++ /dev/null @@ -1,30 +0,0 @@ -import Foundation -import SwiftUI - -@MainActor -protocol SpaceShareModuleAssemblyProtocol: AnyObject { - func make() -> AnyView -} - -@MainActor -final class SpaceShareModuleAssembly: SpaceShareModuleAssemblyProtocol { - - private let serviceLocator: ServiceLocator - - nonisolated init(serviceLocator: ServiceLocator) { - self.serviceLocator = serviceLocator - } - - // MARK: - SpaceShareModuleAssemblyProtocol - - func make() -> AnyView { - return SpaceShareView( - model: SpaceShareViewModel( - activeSpaceParticipantStorage: self.serviceLocator.activeSpaceParticipantStorage(), - workspaceService: self.serviceLocator.workspaceService(), - activeWorkspaceStorage: self.serviceLocator.activeWorkspaceStorage(), - deppLinkParser: self.serviceLocator.deepLinkParser() - ) - ).eraseToAnyView() - } -} diff --git a/Anytype/Sources/PresentationLayer/Modules/SpaceShare/SpaceShareView.swift b/Anytype/Sources/PresentationLayer/Modules/SpaceShare/SpaceShareView.swift index 5bf54aa25f..c73e3040d5 100644 --- a/Anytype/Sources/PresentationLayer/Modules/SpaceShare/SpaceShareView.swift +++ b/Anytype/Sources/PresentationLayer/Modules/SpaceShare/SpaceShareView.swift @@ -3,7 +3,7 @@ import SwiftUI struct SpaceShareView: View { - @StateObject var model: SpaceShareViewModel + @StateObject private var model = SpaceShareViewModel() var body: some View { VStack(spacing: 0) { @@ -27,6 +27,12 @@ struct SpaceShareView: View { } } } + .task { + await model.startParticipantsTask() + } + .task { + await model.onAppear() + } .anytypeShareView(item: $model.shareInviteLink) .snackbar(toastBarData: $model.toastBarData) .anytypeSheet(item: $model.requestAlertModel) { model in diff --git a/Anytype/Sources/PresentationLayer/Modules/SpaceShare/SpaceShareViewModel.swift b/Anytype/Sources/PresentationLayer/Modules/SpaceShare/SpaceShareViewModel.swift index e9aa821c1a..96204e24f3 100644 --- a/Anytype/Sources/PresentationLayer/Modules/SpaceShare/SpaceShareViewModel.swift +++ b/Anytype/Sources/PresentationLayer/Modules/SpaceShare/SpaceShareViewModel.swift @@ -11,15 +11,18 @@ final class SpaceShareViewModel: ObservableObject { static let participantLimit = 11 // 10 participants and 1 owner } - private let activeSpaceParticipantStorage: ActiveSpaceParticipantStorageProtocol - private let workspaceService: WorkspaceServiceProtocol - private let activeWorkspaceStorage: ActiveWorkpaceStorageProtocol - private let deppLinkParser: DeepLinkParserProtocol + @Injected(\.activeSpaceParticipantStorage) + private var activeSpaceParticipantStorage: ActiveSpaceParticipantStorageProtocol + @Injected(\.workspaceService) + private var workspaceService: WorkspaceServiceProtocol + @Injected(\.activeWorkspaceStorage) + private var activeWorkspaceStorage: ActiveWorkpaceStorageProtocol + @Injected(\.deepLinkParser) + private var deppLinkParser: DeepLinkParserProtocol private var participants: [Participant] = [] - private var subscriptions: [AnyCancellable] = [] - @Published var accountSpaceId: String + var accountSpaceId: String { activeWorkspaceStorage.workspaceInfo.accountSpaceId } @Published var rows: [SpaceShareParticipantViewModel] = [] @Published var inviteLink: URL? @Published var shareInviteLink: URL? @@ -31,22 +34,19 @@ final class SpaceShareViewModel: ObservableObject { @Published var showDeleteLinkAlert = false @Published var showStopSharingAlert = false - init( - activeSpaceParticipantStorage: ActiveSpaceParticipantStorageProtocol, - workspaceService: WorkspaceServiceProtocol, - activeWorkspaceStorage: ActiveWorkpaceStorageProtocol, - deppLinkParser: DeepLinkParserProtocol - ) { - self.activeSpaceParticipantStorage = activeSpaceParticipantStorage - self.workspaceService = workspaceService - self.activeWorkspaceStorage = activeWorkspaceStorage - self.deppLinkParser = deppLinkParser - self.accountSpaceId = activeWorkspaceStorage.workspaceInfo.accountSpaceId - startSubscriptions() - Task { + nonisolated init() {} + + func startParticipantsTask() async { + for await items in activeSpaceParticipantStorage.participantsPublisher.values { + updateParticipant(items: items) + } + } + + func onAppear() async { + do { let invite = try await workspaceService.getCurrentInvite(spaceId: accountSpaceId) inviteLink = deppLinkParser.createUrl(deepLink: .invite(cid: invite.cid, key: invite.fileKey), scheme: .main) - } + } catch {} } func onShareInvite() { @@ -81,13 +81,6 @@ final class SpaceShareViewModel: ObservableObject { // MARK: - Private - private func startSubscriptions() { - activeSpaceParticipantStorage.participantsPublisher.sink { [weak self] items in - self?.updateParticipant(items: items) - } - .store(in: &subscriptions) - } - private func updateParticipant(items: [Participant]) { participants = items.sorted { $0.sortingWeight > $1.sortingWeight } rows = participants.map { participant in