From 15e7445e3c6b2f265f5d7c59a4fe857ee7a929f2 Mon Sep 17 00:00:00 2001 From: Vova Ignatov Date: Mon, 22 Jul 2024 11:59:24 +0100 Subject: [PATCH] IOS-3152 Fix default object type selection for types from marketplace --- .../ObjectTypeSearchViewModel.swift | 14 +++++++++----- .../Object/TypeProvider/ObjectTypeProvider.swift | 6 ++++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Anytype/Sources/PresentationLayer/ObjectTypeSearch/ObjectTypeSearchViewModel.swift b/Anytype/Sources/PresentationLayer/ObjectTypeSearch/ObjectTypeSearchViewModel.swift index 051df65d60..e3639a5072 100644 --- a/Anytype/Sources/PresentationLayer/ObjectTypeSearch/ObjectTypeSearchViewModel.swift +++ b/Anytype/Sources/PresentationLayer/ObjectTypeSearch/ObjectTypeSearchViewModel.swift @@ -119,15 +119,19 @@ final class ObjectTypeSearchViewModel: ObservableObject { } func didSelectType(_ type: ObjectType, section: SectionType) { + AnytypeAnalytics.instance().logTypeSearchResult() + Task { if section == .library { - _ = try await workspaceService.installObject(spaceId: spaceId, objectId: type.id) + let newTypeDetails = try await workspaceService.installObject(spaceId: spaceId, objectId: type.id) + let newType = ObjectType(details: newTypeDetails) + toastData = ToastBarData(text: Loc.ObjectType.addedToLibrary(type.name), showSnackBar: true) + + onSelect(.objectType(type: newType)) + } else { + onSelect(.objectType(type: type)) } - - AnytypeAnalytics.instance().logTypeSearchResult() - - onSelect(.objectType(type: type)) } } diff --git a/Anytype/Sources/ServiceLayer/Object/TypeProvider/ObjectTypeProvider.swift b/Anytype/Sources/ServiceLayer/Object/TypeProvider/ObjectTypeProvider.swift index c5d28f5b95..477a82a248 100644 --- a/Anytype/Sources/ServiceLayer/Object/TypeProvider/ObjectTypeProvider.swift +++ b/Anytype/Sources/ServiceLayer/Object/TypeProvider/ObjectTypeProvider.swift @@ -54,6 +54,12 @@ final class ObjectTypeProvider: ObjectTypeProviderProtocol { } func setDefaultObjectType(type: ObjectType, spaceId: String, route: AnalyticsDefaultObjectTypeChangeRoute) { + if !objectTypes.contains(where: { $0.id == type.id }) { + // Fix: When a new type is added via default object type menu we are lacking type data at this point. + // Save it explicitly + objectTypes.append(type) + } + defaultObjectTypes[spaceId] = type.id AnytypeAnalytics.instance().logDefaultObjectTypeChange(type.analyticsType, route: route) }