diff --git a/analytics/src/main/java/com/anytypeio/anytype/analytics/base/EventsDictionary.kt b/analytics/src/main/java/com/anytypeio/anytype/analytics/base/EventsDictionary.kt index 4b1af9f23f..9badaff310 100644 --- a/analytics/src/main/java/com/anytypeio/anytype/analytics/base/EventsDictionary.kt +++ b/analytics/src/main/java/com/anytypeio/anytype/analytics/base/EventsDictionary.kt @@ -101,6 +101,7 @@ object EventsDictionary { const val relationAdd = "AddExistingRelation" const val relationCreate = "CreateRelation" const val relationChangeValue = "ChangeRelationValue" + const val relationDeleteValue = "DeleteRelationValue" const val relationDelete = "DeleteRelation" const val relationUrlOpen = "RelationUrlOpen" const val relationUrlCopy = "RelationUrlCopy" diff --git a/analytics/src/main/java/com/anytypeio/anytype/analytics/props/Props.kt b/analytics/src/main/java/com/anytypeio/anytype/analytics/props/Props.kt index 687e8d17f0..f969d0b803 100644 --- a/analytics/src/main/java/com/anytypeio/anytype/analytics/props/Props.kt +++ b/analytics/src/main/java/com/anytypeio/anytype/analytics/props/Props.kt @@ -6,6 +6,7 @@ data class Props(val map: Map) { const val OBJ_TYPE_CUSTOM = "custom" const val OBJ_LAYOUT_NONE = "none" + const val OBJ_RELATION_CUSTOM = "custom" fun empty() = Props(emptyMap()) } diff --git a/app/src/androidTest/java/com/anytypeio/anytype/features/relations/ObjectRelationListTest.kt b/app/src/androidTest/java/com/anytypeio/anytype/features/relations/ObjectRelationListTest.kt index 24f578e6f8..11244a9650 100644 --- a/app/src/androidTest/java/com/anytypeio/anytype/features/relations/ObjectRelationListTest.kt +++ b/app/src/androidTest/java/com/anytypeio/anytype/features/relations/ObjectRelationListTest.kt @@ -28,6 +28,8 @@ import com.anytypeio.anytype.domain.relations.AddRelationToObject import com.anytypeio.anytype.domain.relations.AddToFeaturedRelations import com.anytypeio.anytype.domain.relations.DeleteRelationFromObject import com.anytypeio.anytype.domain.relations.RemoveFromFeaturedRelations +import com.anytypeio.anytype.domain.workspace.SpaceManager +import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate import com.anytypeio.anytype.presentation.editor.Editor import com.anytypeio.anytype.presentation.objects.LockedStateProvider import com.anytypeio.anytype.presentation.relations.ObjectRelationListViewModelFactory @@ -87,6 +89,12 @@ class ObjectRelationListTest { @Mock lateinit var lockedStateProvider: LockedStateProvider + @Mock + lateinit var spaceManager: SpaceManager + + @Mock + lateinit var analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate + private lateinit var updateDetail: UpdateDetail private lateinit var addToFeaturedRelations: AddToFeaturedRelations private lateinit var removeFromFeaturedRelations: RemoveFromFeaturedRelations @@ -116,7 +124,9 @@ class ObjectRelationListTest { deleteRelationFromObject = deleteRelationFromObject, analytics = analytics, storeOfRelations = storeOfRelations, - addRelationToObject = addRelationToObject + addRelationToObject = addRelationToObject, + spaceManager = spaceManager, + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate ) } diff --git a/app/src/main/java/com/anytypeio/anytype/di/feature/ObjectRelationListDI.kt b/app/src/main/java/com/anytypeio/anytype/di/feature/ObjectRelationListDI.kt index 8e2351ea68..d106ffdff2 100644 --- a/app/src/main/java/com/anytypeio/anytype/di/feature/ObjectRelationListDI.kt +++ b/app/src/main/java/com/anytypeio/anytype/di/feature/ObjectRelationListDI.kt @@ -11,6 +11,8 @@ import com.anytypeio.anytype.domain.relations.AddRelationToObject import com.anytypeio.anytype.domain.relations.AddToFeaturedRelations import com.anytypeio.anytype.domain.relations.DeleteRelationFromObject import com.anytypeio.anytype.domain.relations.RemoveFromFeaturedRelations +import com.anytypeio.anytype.domain.workspace.SpaceManager +import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate import com.anytypeio.anytype.presentation.objects.LockedStateProvider import com.anytypeio.anytype.presentation.relations.ObjectRelationListViewModelFactory import com.anytypeio.anytype.presentation.relations.providers.RelationListProvider @@ -49,7 +51,9 @@ object ObjectRelationListModule { deleteRelationFromObject: DeleteRelationFromObject, analytics: Analytics, storeOfRelations: StoreOfRelations, - addRelationToObject: AddRelationToObject + addRelationToObject: AddRelationToObject, + analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + spaceManager: SpaceManager ): ObjectRelationListViewModelFactory { return ObjectRelationListViewModelFactory( lockedStateProvider = lockedStateProvider, @@ -62,7 +66,9 @@ object ObjectRelationListModule { deleteRelationFromObject = deleteRelationFromObject, analytics = analytics, storeOfRelations = storeOfRelations, - addRelationToObject = addRelationToObject + addRelationToObject = addRelationToObject, + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate, + spaceManager = spaceManager ) } diff --git a/app/src/main/java/com/anytypeio/anytype/di/feature/ObjectSetSettingsDi.kt b/app/src/main/java/com/anytypeio/anytype/di/feature/ObjectSetSettingsDi.kt index bafa0d248a..10f03202df 100644 --- a/app/src/main/java/com/anytypeio/anytype/di/feature/ObjectSetSettingsDi.kt +++ b/app/src/main/java/com/anytypeio/anytype/di/feature/ObjectSetSettingsDi.kt @@ -6,6 +6,8 @@ import com.anytypeio.anytype.core_utils.di.scope.PerModal import com.anytypeio.anytype.domain.dataview.interactor.UpdateDataViewViewer import com.anytypeio.anytype.domain.objects.StoreOfRelations import com.anytypeio.anytype.domain.relations.DeleteRelationFromDataView +import com.anytypeio.anytype.domain.workspace.SpaceManager +import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate import com.anytypeio.anytype.presentation.relations.ObjectSetSettingsViewModel import com.anytypeio.anytype.presentation.sets.state.ObjectState import com.anytypeio.anytype.presentation.util.Dispatcher @@ -40,12 +42,16 @@ object ObjectSetSettingsModule { store: StoreOfRelations, analytics: Analytics, deleteRelationFromDataView: DeleteRelationFromDataView, + analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + spaceManager: SpaceManager ): ObjectSetSettingsViewModel.Factory = ObjectSetSettingsViewModel.Factory( objectState = state, dispatcher = dispatcher, updateDataViewViewer = updateDataViewViewer, analytics = analytics, store = store, - deleteRelationFromDataView = deleteRelationFromDataView + deleteRelationFromDataView = deleteRelationFromDataView, + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate, + spaceManager = spaceManager ) } \ No newline at end of file diff --git a/app/src/main/java/com/anytypeio/anytype/di/feature/ObjectValueDI.kt b/app/src/main/java/com/anytypeio/anytype/di/feature/ObjectValueDI.kt index 3af85b8e7b..4609a85dd4 100644 --- a/app/src/main/java/com/anytypeio/anytype/di/feature/ObjectValueDI.kt +++ b/app/src/main/java/com/anytypeio/anytype/di/feature/ObjectValueDI.kt @@ -10,8 +10,10 @@ import com.anytypeio.anytype.domain.`object`.DuplicateObject import com.anytypeio.anytype.domain.`object`.UpdateDetail import com.anytypeio.anytype.domain.objects.SetObjectListIsArchived import com.anytypeio.anytype.domain.objects.StoreOfObjectTypes +import com.anytypeio.anytype.domain.objects.StoreOfRelations import com.anytypeio.anytype.domain.search.SearchObjects import com.anytypeio.anytype.domain.workspace.SpaceManager +import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate import com.anytypeio.anytype.presentation.relations.providers.ObjectRelationProvider import com.anytypeio.anytype.presentation.relations.providers.ObjectValueProvider import com.anytypeio.anytype.presentation.relations.value.`object`.ObjectValueViewModel @@ -67,7 +69,9 @@ object ObjectValueObjectModule { urlBuilder: UrlBuilder, storeOfObjectTypes: StoreOfObjectTypes, objectListIsArchived: SetObjectListIsArchived, - duplicateObject: DuplicateObject + duplicateObject: DuplicateObject, + analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + storeOfRelations: StoreOfRelations ): ObjectValueViewModelFactory = ObjectValueViewModelFactory( params = params, values = values, @@ -80,7 +84,9 @@ object ObjectValueObjectModule { urlBuilder = urlBuilder, storeOfObjectTypes = storeOfObjectTypes, objectListIsArchived = objectListIsArchived, - duplicateObject = duplicateObject + duplicateObject = duplicateObject, + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate, + storeOfRelations = storeOfRelations ) } //endregion @@ -120,7 +126,9 @@ object ObjectValueSetModule { urlBuilder: UrlBuilder, storeOfObjectTypes: StoreOfObjectTypes, objectListIsArchived: SetObjectListIsArchived, - duplicateObject: DuplicateObject + duplicateObject: DuplicateObject, + analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + storeOfRelations: StoreOfRelations ): ObjectValueViewModelFactory = ObjectValueViewModelFactory( params = params, values = values, @@ -133,7 +141,9 @@ object ObjectValueSetModule { urlBuilder = urlBuilder, storeOfObjectTypes = storeOfObjectTypes, objectListIsArchived = objectListIsArchived, - duplicateObject = duplicateObject + duplicateObject = duplicateObject, + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate, + storeOfRelations = storeOfRelations ) } //endregion @@ -173,7 +183,9 @@ object ObjectValueDataViewModule { urlBuilder: UrlBuilder, storeOfObjectTypes: StoreOfObjectTypes, objectListIsArchived: SetObjectListIsArchived, - duplicateObject: DuplicateObject + duplicateObject: DuplicateObject, + analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + storeOfRelations: StoreOfRelations ): ObjectValueViewModelFactory = ObjectValueViewModelFactory( params = params, values = values, @@ -186,7 +198,9 @@ object ObjectValueDataViewModule { urlBuilder = urlBuilder, storeOfObjectTypes = storeOfObjectTypes, objectListIsArchived = objectListIsArchived, - duplicateObject = duplicateObject + duplicateObject = duplicateObject, + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate, + storeOfRelations = storeOfRelations ) } //endregion \ No newline at end of file diff --git a/app/src/main/java/com/anytypeio/anytype/di/feature/OptionDi.kt b/app/src/main/java/com/anytypeio/anytype/di/feature/OptionDi.kt index b6333a55d4..3a286e15bc 100644 --- a/app/src/main/java/com/anytypeio/anytype/di/feature/OptionDi.kt +++ b/app/src/main/java/com/anytypeio/anytype/di/feature/OptionDi.kt @@ -8,6 +8,7 @@ import com.anytypeio.anytype.domain.`object`.SetObjectDetails import com.anytypeio.anytype.domain.objects.StoreOfRelations import com.anytypeio.anytype.domain.relations.CreateRelationOption import com.anytypeio.anytype.domain.workspace.SpaceManager +import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate import com.anytypeio.anytype.presentation.relations.option.CreateOrEditOptionViewModel import com.anytypeio.anytype.presentation.relations.option.CreateOrEditOptionViewModelFactory import com.anytypeio.anytype.presentation.relations.providers.ObjectRelationProvider @@ -58,7 +59,8 @@ object CreateOrEditOptionObjectModule { spaceManager: SpaceManager, analytics: Analytics, createOption: CreateRelationOption, - storeOfRelations: StoreOfRelations + storeOfRelations: StoreOfRelations, + analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate ): CreateOrEditOptionViewModelFactory = CreateOrEditOptionViewModelFactory( params = params, values = values, @@ -67,7 +69,8 @@ object CreateOrEditOptionObjectModule { dispatcher = dispatcher, spaceManager = spaceManager, analytics = analytics, - storeOfRelations = storeOfRelations + storeOfRelations = storeOfRelations, + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate ) } //endregion @@ -110,7 +113,8 @@ object CreateOrEditOptionSetModule { spaceManager: SpaceManager, analytics: Analytics, createOption: CreateRelationOption, - storeOfRelations: StoreOfRelations + storeOfRelations: StoreOfRelations, + analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate ): CreateOrEditOptionViewModelFactory = CreateOrEditOptionViewModelFactory( params = params, values = values, @@ -119,7 +123,8 @@ object CreateOrEditOptionSetModule { dispatcher = dispatcher, spaceManager = spaceManager, analytics = analytics, - storeOfRelations = storeOfRelations + storeOfRelations = storeOfRelations, + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate ) } //endregion @@ -162,7 +167,8 @@ object CreateOrEditOptionDataViewModule { spaceManager: SpaceManager, analytics: Analytics, createOption: CreateRelationOption, - storeOfRelations: StoreOfRelations + storeOfRelations: StoreOfRelations, + analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate ): CreateOrEditOptionViewModelFactory = CreateOrEditOptionViewModelFactory( params = params, values = values, @@ -171,7 +177,8 @@ object CreateOrEditOptionDataViewModule { dispatcher = dispatcher, spaceManager = spaceManager, analytics = analytics, - storeOfRelations = storeOfRelations + storeOfRelations = storeOfRelations, + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate ) } //endregion \ No newline at end of file diff --git a/app/src/main/java/com/anytypeio/anytype/di/feature/TagStatusDI.kt b/app/src/main/java/com/anytypeio/anytype/di/feature/TagStatusDI.kt index 78388d9134..3818766910 100644 --- a/app/src/main/java/com/anytypeio/anytype/di/feature/TagStatusDI.kt +++ b/app/src/main/java/com/anytypeio/anytype/di/feature/TagStatusDI.kt @@ -8,9 +8,11 @@ import com.anytypeio.anytype.domain.block.repo.BlockRepository import com.anytypeio.anytype.domain.debugging.Logger import com.anytypeio.anytype.domain.library.StorelessSubscriptionContainer import com.anytypeio.anytype.domain.`object`.UpdateDetail +import com.anytypeio.anytype.domain.objects.StoreOfRelations import com.anytypeio.anytype.domain.relations.DeleteRelationOptions import com.anytypeio.anytype.domain.search.SubscriptionEventChannel import com.anytypeio.anytype.domain.workspace.SpaceManager +import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate import com.anytypeio.anytype.presentation.relations.providers.ObjectRelationProvider import com.anytypeio.anytype.presentation.relations.providers.ObjectValueProvider import com.anytypeio.anytype.presentation.relations.value.tagstatus.SUB_MY_OPTIONS @@ -83,7 +85,9 @@ object TagOrStatusValueObjectModule { spaceManager: SpaceManager, params: TagOrStatusValueViewModel.ViewModelParams, @Named(SUB_MY_OPTIONS) subscription: StorelessSubscriptionContainer, - deleteRelationOptions: DeleteRelationOptions + deleteRelationOptions: DeleteRelationOptions, + analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + storeOfRelations: StoreOfRelations ): TagOrStatusValueViewModelFactory = TagOrStatusValueViewModelFactory( params = params, values = values, @@ -93,7 +97,9 @@ object TagOrStatusValueObjectModule { analytics = analytics, spaceManager = spaceManager, subscription = subscription, - deleteRelationOptions = deleteRelationOptions + deleteRelationOptions = deleteRelationOptions, + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate, + storeOfRelations = storeOfRelations ) } //endregion @@ -157,7 +163,9 @@ object TagOrStatusValueSetModule { spaceManager: SpaceManager, params: TagOrStatusValueViewModel.ViewModelParams, @Named(SUB_MY_OPTIONS) subscription: StorelessSubscriptionContainer, - deleteRelationOptions: DeleteRelationOptions + deleteRelationOptions: DeleteRelationOptions, + analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + storeOfRelations: StoreOfRelations ): TagOrStatusValueViewModelFactory = TagOrStatusValueViewModelFactory( params = params, values = values, @@ -167,7 +175,9 @@ object TagOrStatusValueSetModule { analytics = analytics, spaceManager = spaceManager, subscription = subscription, - deleteRelationOptions = deleteRelationOptions + deleteRelationOptions = deleteRelationOptions, + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate, + storeOfRelations = storeOfRelations ) } //endregion @@ -231,7 +241,9 @@ object TagOrStatusValueDataViewModule { spaceManager: SpaceManager, params: TagOrStatusValueViewModel.ViewModelParams, @Named(SUB_MY_OPTIONS) subscription: StorelessSubscriptionContainer, - deleteRelationOptions: DeleteRelationOptions + deleteRelationOptions: DeleteRelationOptions, + analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + storeOfRelations: StoreOfRelations ): TagOrStatusValueViewModelFactory = TagOrStatusValueViewModelFactory( params = params, values = values, @@ -241,7 +253,9 @@ object TagOrStatusValueDataViewModule { analytics = analytics, spaceManager = spaceManager, subscription = subscription, - deleteRelationOptions = deleteRelationOptions + deleteRelationOptions = deleteRelationOptions, + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate, + storeOfRelations = storeOfRelations ) } //endregion \ No newline at end of file diff --git a/app/src/main/java/com/anytypeio/anytype/di/feature/relations/RelationAddDI.kt b/app/src/main/java/com/anytypeio/anytype/di/feature/relations/RelationAddDI.kt index 9d09e871a0..8b4a525128 100644 --- a/app/src/main/java/com/anytypeio/anytype/di/feature/relations/RelationAddDI.kt +++ b/app/src/main/java/com/anytypeio/anytype/di/feature/relations/RelationAddDI.kt @@ -119,7 +119,8 @@ object RelationAddToDataViewModule { getRelations: GetRelations, addObjectToWorkspace: AddObjectToWorkspace, spaceManager: SpaceManager, - analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate + analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + storeOfRelations: StoreOfRelations ): RelationAddToDataViewViewModel.Factory = RelationAddToDataViewViewModel.Factory( addRelationToDataView = addRelationToDataView, dispatcher = dispatcher, @@ -131,7 +132,8 @@ object RelationAddToDataViewModule { getRelations = getRelations, addObjectToWorkspace = addObjectToWorkspace, spaceManager = spaceManager, - analyticSpaceHelperDelegate = analyticSpaceHelperDelegate + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate, + storeOfRelations = storeOfRelations ) @JvmStatic diff --git a/app/src/main/java/com/anytypeio/anytype/di/feature/relations/RelationCreateFromScratchDI.kt b/app/src/main/java/com/anytypeio/anytype/di/feature/relations/RelationCreateFromScratchDI.kt index 330b8f2cfb..f9a5952a4e 100644 --- a/app/src/main/java/com/anytypeio/anytype/di/feature/relations/RelationCreateFromScratchDI.kt +++ b/app/src/main/java/com/anytypeio/anytype/di/feature/relations/RelationCreateFromScratchDI.kt @@ -57,7 +57,8 @@ object RelationCreateFromScratchForObjectModule { createFromScratchState: StateHolder, createRelation: CreateRelation, spaceManager: SpaceManager, - analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate + analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + storeOfRelations: StoreOfRelations ) = RelationCreateFromScratchForObjectViewModel.Factory( addRelationToObject = addRelationToObject, createRelation = createRelation, @@ -65,7 +66,8 @@ object RelationCreateFromScratchForObjectModule { analytics = analytics, createFromScratchState = createFromScratchState, spaceManager = spaceManager, - analyticSpaceHelperDelegate = analyticSpaceHelperDelegate + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate, + storeOfRelations = storeOfRelations ) @JvmStatic @@ -120,7 +122,8 @@ object RelationCreateFromScratchForDataViewModule { createRelation: CreateRelation, addRelationToDataView: AddRelationToDataView, spaceManager: SpaceManager, - analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate + analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + storeOfRelations: StoreOfRelations ) = RelationCreateFromScratchForDataViewViewModel.Factory( addRelationToDataView = addRelationToDataView, dispatcher = dispatcher, @@ -130,7 +133,8 @@ object RelationCreateFromScratchForDataViewModule { createFromScratchState = createFromScratchState, createRelation = createRelation, spaceManager = spaceManager, - analyticSpaceHelperDelegate = analyticSpaceHelperDelegate + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate, + storeOfRelations = storeOfRelations ) @JvmStatic @@ -188,7 +192,8 @@ object RelationCreateFromScratchForObjectBlockModule { analytics: Analytics, createFromScratchState: StateHolder, spaceManager: SpaceManager, - analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate + analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + storeOfRelations: StoreOfRelations ) = RelationCreateFromScratchForObjectBlockViewModel.Factory( addRelationToObject = addRelationToObject, createRelation = createRelation, @@ -196,7 +201,8 @@ object RelationCreateFromScratchForObjectBlockModule { analytics = analytics, createFromScratchState = createFromScratchState, spaceManager = spaceManager, - analyticSpaceHelperDelegate = analyticSpaceHelperDelegate + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate, + storeOfRelations = storeOfRelations ) @JvmStatic diff --git a/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt index 0c2dd2da72..ff5b619ac8 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt @@ -2043,7 +2043,8 @@ open class EditorFragment : NavigationFragment(R.layout.f vm.onRelationTextValueChanged( ctx = ctx, value = text, - relationKey = relationKey + relationKey = relationKey, + isValueEmpty = text.isEmpty() ) } @@ -2051,7 +2052,8 @@ open class EditorFragment : NavigationFragment(R.layout.f vm.onRelationTextValueChanged( ctx = ctx, value = number, - relationKey = relationKey + relationKey = relationKey, + isValueEmpty = number == null ) } @@ -2064,7 +2066,8 @@ open class EditorFragment : NavigationFragment(R.layout.f vm.onRelationTextValueChanged( ctx = ctx, relationKey = relationKey, - value = timeInSeconds + value = timeInSeconds, + isValueEmpty = timeInSeconds == null ) } diff --git a/app/src/main/java/com/anytypeio/anytype/ui/relations/ObjectRelationListFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/relations/ObjectRelationListFragment.kt index 1f4004266a..befe9c5635 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/relations/ObjectRelationListFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/relations/ObjectRelationListFragment.kt @@ -239,7 +239,8 @@ open class ObjectRelationListFragment : BaseBottomSheetFragment { diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/extension/AnalyticsExt.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/extension/AnalyticsExt.kt index 299a30120a..5976da4a85 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/extension/AnalyticsExt.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/extension/AnalyticsExt.kt @@ -35,11 +35,13 @@ import com.anytypeio.anytype.analytics.base.sendEvent import com.anytypeio.anytype.analytics.event.EventAnalytics import com.anytypeio.anytype.analytics.features.WidgetAnalytics import com.anytypeio.anytype.analytics.props.Props +import com.anytypeio.anytype.analytics.props.Props.Companion.OBJ_RELATION_CUSTOM import com.anytypeio.anytype.analytics.props.Props.Companion.OBJ_TYPE_CUSTOM import com.anytypeio.anytype.analytics.props.UserProperty import com.anytypeio.anytype.core_models.Block import com.anytypeio.anytype.core_models.DVFilterCondition import com.anytypeio.anytype.core_models.Id +import com.anytypeio.anytype.core_models.Key import com.anytypeio.anytype.core_models.ObjectWrapper import com.anytypeio.anytype.core_models.Relation import com.anytypeio.anytype.core_models.TextStyle @@ -49,8 +51,10 @@ import com.anytypeio.anytype.core_models.ext.mapToObjectWrapperType import com.anytypeio.anytype.core_models.multiplayer.SpaceMemberPermissions import com.anytypeio.anytype.core_utils.ext.Mimetype import com.anytypeio.anytype.domain.config.ConfigStorage +import com.anytypeio.anytype.domain.objects.StoreOfRelations import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate import com.anytypeio.anytype.presentation.editor.editor.Markup +import com.anytypeio.anytype.presentation.relations.values import com.anytypeio.anytype.presentation.sets.isChangingDefaultTypeAvailable import com.anytypeio.anytype.presentation.sets.state.ObjectState import com.anytypeio.anytype.presentation.sets.viewerByIdOrFirst @@ -726,50 +730,33 @@ fun CoroutineScope.sendAnalyticsCreateRelationEvent( ) } -fun CoroutineScope.sendAnalyticsAddRelationEvent( - analytics: Analytics, - format: String, - type: String, +suspend fun Analytics.sendAnalyticsRelationEvent( + eventName: String, + relationKey: Key, + type: String? = null, + storeOfRelations: StoreOfRelations, spaceParams: AnalyticSpaceHelperDelegate.Params ) { + val relation = storeOfRelations.getByKey(relationKey) + val sourceObject = relation?.sourceObject ?: OBJ_RELATION_CUSTOM sendEvent( - analytics = analytics, - eventName = EventsDictionary.relationAdd, + eventName = eventName, props = Props( - mapOf( - EventsPropertiesKey.format to format, - EventsPropertiesKey.type to type, - EventsPropertiesKey.permissions to spaceParams.permission, - EventsPropertiesKey.spaceType to spaceParams.spaceType - ) + buildMap { + put(EventsPropertiesKey.relationKey, sourceObject) + if (relation != null) { + put(EventsPropertiesKey.format, relation.format.getPropName()) + } + if (type != null) { + put(EventsPropertiesKey.type, type) + } + put(EventsPropertiesKey.permissions, spaceParams.permission) + put(EventsPropertiesKey.spaceType, spaceParams.spaceType) + } ) ) } -fun CoroutineScope.sendAnalyticsRelationValueEvent( - analytics: Analytics, - type: String = "" -) { - sendEvent( - analytics = analytics, - eventName = EventsDictionary.relationChangeValue, - props = Props( - mapOf( - EventsPropertiesKey.type to type - ) - ) - ) -} - -fun CoroutineScope.sendAnalyticsRelationDeleteEvent( - analytics: Analytics -) { - sendEvent( - analytics = analytics, - eventName = EventsDictionary.relationDelete - ) -} - fun CoroutineScope.sendAnalyticsObjectCreateEvent( analytics: Analytics, route: String, diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/ObjectRelationListViewModelFactory.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/ObjectRelationListViewModelFactory.kt index 3ba7a8302e..fc19718362 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/ObjectRelationListViewModelFactory.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/ObjectRelationListViewModelFactory.kt @@ -11,6 +11,8 @@ import com.anytypeio.anytype.domain.relations.AddRelationToObject import com.anytypeio.anytype.domain.relations.AddToFeaturedRelations import com.anytypeio.anytype.domain.relations.DeleteRelationFromObject import com.anytypeio.anytype.domain.relations.RemoveFromFeaturedRelations +import com.anytypeio.anytype.domain.workspace.SpaceManager +import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate import com.anytypeio.anytype.presentation.objects.LockedStateProvider import com.anytypeio.anytype.presentation.relations.providers.RelationListProvider import com.anytypeio.anytype.presentation.util.Dispatcher @@ -26,7 +28,9 @@ class ObjectRelationListViewModelFactory( private val deleteRelationFromObject: DeleteRelationFromObject, private val analytics: Analytics, private val storeOfRelations: StoreOfRelations, - private val addRelationToObject: AddRelationToObject + private val addRelationToObject: AddRelationToObject, + private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + private val spaceManager: SpaceManager ) : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") @@ -42,7 +46,9 @@ class ObjectRelationListViewModelFactory( deleteRelationFromObject = deleteRelationFromObject, analytics = analytics, storeOfRelations = storeOfRelations, - addRelationToObject = addRelationToObject + addRelationToObject = addRelationToObject, + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate, + spaceManager = spaceManager ) as T } } \ No newline at end of file diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/ObjectSetSettingsViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/ObjectSetSettingsViewModel.kt index d1f6afd20e..95a288d827 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/ObjectSetSettingsViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/ObjectSetSettingsViewModel.kt @@ -4,15 +4,19 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope import com.anytypeio.anytype.analytics.base.Analytics +import com.anytypeio.anytype.analytics.base.EventsDictionary import com.anytypeio.anytype.core_models.DVViewerRelation import com.anytypeio.anytype.core_models.Id +import com.anytypeio.anytype.core_models.Key import com.anytypeio.anytype.core_models.Payload import com.anytypeio.anytype.domain.base.fold import com.anytypeio.anytype.domain.dataview.interactor.UpdateDataViewViewer import com.anytypeio.anytype.domain.objects.StoreOfRelations import com.anytypeio.anytype.domain.relations.DeleteRelationFromDataView +import com.anytypeio.anytype.domain.workspace.SpaceManager +import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate import com.anytypeio.anytype.presentation.common.BaseListViewModel -import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationDeleteEvent +import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationEvent import com.anytypeio.anytype.presentation.mapper.mapToSimpleRelationView import com.anytypeio.anytype.presentation.sets.dataViewState import com.anytypeio.anytype.presentation.sets.filterHiddenRelations @@ -33,8 +37,10 @@ class ObjectSetSettingsViewModel( private val updateDataViewViewer: UpdateDataViewViewer, private val storeOfRelations: StoreOfRelations, private val analytics: Analytics, - private val deleteRelationFromDataView: DeleteRelationFromDataView -) : BaseListViewModel() { + private val deleteRelationFromDataView: DeleteRelationFromDataView, + private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + private val spaceManager: SpaceManager +) : BaseListViewModel(), AnalyticSpaceHelperDelegate by analyticSpaceHelperDelegate { val screenState = MutableStateFlow(ScreenState.LIST) @@ -80,10 +86,10 @@ class ObjectSetSettingsViewModel( } fun onDeleteClicked(ctx: Id, viewerId: Id, item: SimpleRelationView) { - proceedWithDeletingRelationFromViewer(ctx = ctx, viewerId = viewerId, relation = item.key) + proceedWithDeletingRelationFromViewer(ctx = ctx, viewerId = viewerId, relationKey = item.key) } - private fun proceedWithDeletingRelationFromViewer(ctx: Id, viewerId: Id, relation: Id) { + private fun proceedWithDeletingRelationFromViewer(ctx: Id, viewerId: Id, relationKey: Key) { val state = objectState.value.dataViewState() ?: return val viewer = state.viewerById(viewerId) ?: return viewModelScope.launch { @@ -91,7 +97,7 @@ class ObjectSetSettingsViewModel( ctx = ctx, dv = state.dataViewBlock.id, view = viewer.id, - keys = listOf(relation) + keys = listOf(relationKey) ) updateDataViewViewer.async(params).fold( onFailure = { e -> Timber.e(e, "Error while deleting relation from dv") }, @@ -99,11 +105,16 @@ class ObjectSetSettingsViewModel( dispatcher.send(payload) proceedWithUpdatingCurrentViewAfterRelationDeletion( ctx = ctx, - relation = relation, + relation = relationKey, viewerId = viewerId ) - proceedWithDeletingRelationFromDataView(ctx = ctx, relation = relation) - sendAnalyticsRelationDeleteEvent(analytics) + proceedWithDeletingRelationFromDataView(ctx = ctx, relation = relationKey) + analytics.sendAnalyticsRelationEvent( + eventName = EventsDictionary.relationDelete, + storeOfRelations = storeOfRelations, + relationKey = relationKey, + spaceParams = provideParams(spaceManager.get()) + ) } ) } @@ -215,7 +226,9 @@ class ObjectSetSettingsViewModel( private val updateDataViewViewer: UpdateDataViewViewer, private val store: StoreOfRelations, private val analytics: Analytics, - private val deleteRelationFromDataView: DeleteRelationFromDataView + private val deleteRelationFromDataView: DeleteRelationFromDataView, + private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + private val spaceManager: SpaceManager ) : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") override fun create(modelClass: Class): T { @@ -225,7 +238,9 @@ class ObjectSetSettingsViewModel( updateDataViewViewer = updateDataViewViewer, storeOfRelations = store, analytics = analytics, - deleteRelationFromDataView = deleteRelationFromDataView + deleteRelationFromDataView = deleteRelationFromDataView, + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate, + spaceManager = spaceManager ) as T } } diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationAddToDataViewViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationAddToDataViewViewModel.kt index ac5930b062..25a0a6f226 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationAddToDataViewViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationAddToDataViewViewModel.kt @@ -4,22 +4,22 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope import com.anytypeio.anytype.analytics.base.Analytics +import com.anytypeio.anytype.analytics.base.EventsDictionary import com.anytypeio.anytype.core_models.DVViewerRelation import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.Key import com.anytypeio.anytype.core_models.Payload import com.anytypeio.anytype.core_models.RelationFormat -import com.anytypeio.anytype.core_models.primitives.SpaceId import com.anytypeio.anytype.domain.base.AppCoroutineDispatchers import com.anytypeio.anytype.domain.base.fold import com.anytypeio.anytype.domain.dataview.interactor.AddRelationToDataView import com.anytypeio.anytype.domain.dataview.interactor.UpdateDataViewViewer +import com.anytypeio.anytype.domain.objects.StoreOfRelations import com.anytypeio.anytype.domain.relations.GetRelations import com.anytypeio.anytype.domain.workspace.AddObjectToWorkspace import com.anytypeio.anytype.domain.workspace.SpaceManager import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate -import com.anytypeio.anytype.presentation.extension.getPropName -import com.anytypeio.anytype.presentation.extension.sendAnalyticsAddRelationEvent +import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationEvent import com.anytypeio.anytype.presentation.relations.providers.ObjectRelationProvider import com.anytypeio.anytype.presentation.sets.dataViewState import com.anytypeio.anytype.presentation.sets.state.ObjectState @@ -40,7 +40,8 @@ class RelationAddToDataViewViewModel( private val addObjectToWorkspace: AddObjectToWorkspace, private val appCoroutineDispatchers: AppCoroutineDispatchers, private val spaceManager: SpaceManager, - private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate + private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + private val storeOfRelations: StoreOfRelations ) : RelationAddViewModelBase( relationsProvider = relationsProvider, appCoroutineDispatchers = appCoroutineDispatchers, @@ -53,7 +54,6 @@ class RelationAddToDataViewViewModel( ctx: Id, viewerId: Id, relation: Key, - format: RelationFormat, dv: Id, screenType: String ) { @@ -73,10 +73,11 @@ class RelationAddToDataViewViewModel( relation = relation ) } - sendAnalyticsAddRelationEvent( - analytics = analytics, + analytics.sendAnalyticsRelationEvent( + eventName = EventsDictionary.relationAdd, + storeOfRelations = storeOfRelations, + relationKey = relation, type = screenType, - format = format.getPropName(), spaceParams = analyticSpaceHelperDelegate.provideParams(spaceManager.get()) ) }, @@ -119,7 +120,8 @@ class RelationAddToDataViewViewModel( private val getRelations: GetRelations, private val addObjectToWorkspace: AddObjectToWorkspace, private val spaceManager: SpaceManager, - private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate + private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + private val storeOfRelations: StoreOfRelations ) : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") override fun create(modelClass: Class): T { @@ -134,7 +136,8 @@ class RelationAddToDataViewViewModel( getRelations = getRelations, addObjectToWorkspace = addObjectToWorkspace, spaceManager = spaceManager, - analyticSpaceHelperDelegate = analyticSpaceHelperDelegate + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate, + storeOfRelations = storeOfRelations ) as T } } diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationAddToObjectViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationAddToObjectViewModel.kt index b812929df0..eafb7175e4 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationAddToObjectViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationAddToObjectViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope import com.anytypeio.anytype.analytics.base.Analytics +import com.anytypeio.anytype.analytics.base.EventsDictionary import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.Key import com.anytypeio.anytype.core_models.Payload @@ -16,8 +17,7 @@ import com.anytypeio.anytype.domain.relations.GetRelations import com.anytypeio.anytype.domain.workspace.AddObjectToWorkspace import com.anytypeio.anytype.domain.workspace.SpaceManager import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate -import com.anytypeio.anytype.presentation.extension.getPropName -import com.anytypeio.anytype.presentation.extension.sendAnalyticsAddRelationEvent +import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationEvent import com.anytypeio.anytype.presentation.relations.providers.ObjectRelationProvider import com.anytypeio.anytype.presentation.util.Dispatcher import kotlinx.coroutines.flow.MutableSharedFlow @@ -48,7 +48,6 @@ class RelationAddToObjectViewModel( fun onRelationSelected( ctx: Id, relation: Key, - format: RelationFormat, screenType: String ) { viewModelScope.launch { @@ -61,10 +60,11 @@ class RelationAddToObjectViewModel( success = { dispatcher.send(it).also { commands.emit(Command.OnRelationAdd(relation = relation)) - sendAnalyticsAddRelationEvent( - analytics = analytics, + analytics.sendAnalyticsRelationEvent( + eventName = EventsDictionary.relationAdd, + storeOfRelations = storeOfRelations, + relationKey = relation, type = screenType, - format = format.getPropName(), spaceParams = provideParams(spaceManager.get()) ) isDismissed.value = true diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationAddViewModelBase.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationAddViewModelBase.kt index bd074cb6c8..f5e047564f 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationAddViewModelBase.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationAddViewModelBase.kt @@ -9,6 +9,7 @@ import com.anytypeio.anytype.core_models.Marketplace.MARKETPLACE_SPACE_ID import com.anytypeio.anytype.core_models.ObjectWrapper import com.anytypeio.anytype.core_models.RelationFormat import com.anytypeio.anytype.core_models.Relations +import com.anytypeio.anytype.core_models.primitives.RelationKey import com.anytypeio.anytype.domain.base.AppCoroutineDispatchers import com.anytypeio.anytype.domain.relations.GetRelations import com.anytypeio.anytype.domain.workspace.AddObjectToWorkspace @@ -226,8 +227,7 @@ abstract class RelationAddViewModelBase( command.emit( Command.DispatchSelectedRelation( ctx = ctx, - relation = relation.key, - format = relation.format + relation = relation.key ) ) } @@ -235,8 +235,7 @@ abstract class RelationAddViewModelBase( sealed class Command { data class DispatchSelectedRelation( val ctx: Id, - val relation: Key, - val format: RelationFormat + val relation: Key ) : Command() } diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationCreateFromScratchBaseViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationCreateFromScratchBaseViewModel.kt index 1a829607a2..6e79d5a113 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationCreateFromScratchBaseViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationCreateFromScratchBaseViewModel.kt @@ -10,12 +10,14 @@ import com.anytypeio.anytype.core_models.primitives.SpaceId import com.anytypeio.anytype.domain.base.fold import com.anytypeio.anytype.domain.dataview.interactor.AddRelationToDataView import com.anytypeio.anytype.domain.dataview.interactor.UpdateDataViewViewer +import com.anytypeio.anytype.domain.objects.StoreOfRelations import com.anytypeio.anytype.domain.relations.AddRelationToObject import com.anytypeio.anytype.domain.relations.CreateRelation import com.anytypeio.anytype.domain.workspace.SpaceManager import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate import com.anytypeio.anytype.presentation.common.BaseViewModel import com.anytypeio.anytype.presentation.extension.sendAnalyticsCreateRelationEvent +import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationEvent import com.anytypeio.anytype.presentation.relations.model.CreateFromScratchState import com.anytypeio.anytype.presentation.relations.model.LimitObjectTypeValueView import com.anytypeio.anytype.presentation.relations.model.RelationView @@ -90,7 +92,8 @@ class RelationCreateFromScratchForObjectViewModel( private val dispatcher: Dispatcher, private val analytics: Analytics, private val spaceManager: SpaceManager, - private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate + private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + private val storeOfRelations: StoreOfRelations ) : RelationCreateFromScratchBaseViewModel(), AnalyticSpaceHelperDelegate by analyticSpaceHelperDelegate { @@ -143,6 +146,12 @@ class RelationCreateFromScratchForObjectViewModel( ).process( success = { payload -> dispatcher.send(payload).also { isDismissed.value = true } + analytics.sendAnalyticsRelationEvent( + eventName = EventsDictionary.relationAdd, + storeOfRelations = storeOfRelations, + relationKey = relation, + spaceParams = provideParams(spaceManager.get()) + ) }, failure = { Timber.e(it, ACTION_FAILED_ERROR).also { _toasts.emit(ACTION_FAILED_ERROR) } @@ -158,7 +167,8 @@ class RelationCreateFromScratchForObjectViewModel( private val dispatcher: Dispatcher, private val analytics: Analytics, private val spaceManager: SpaceManager, - private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate + private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + private val storeOfRelations: StoreOfRelations ) : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") override fun create(modelClass: Class): T { @@ -169,7 +179,8 @@ class RelationCreateFromScratchForObjectViewModel( createRelation = createRelation, addRelationToObject = addRelationToObject, spaceManager = spaceManager, - analyticSpaceHelperDelegate = analyticSpaceHelperDelegate + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate, + storeOfRelations = storeOfRelations ) as T } } @@ -182,7 +193,8 @@ class RelationCreateFromScratchForObjectBlockViewModel( private val createFromScratchState: StateHolder, private val createRelation: CreateRelation, private val spaceManager: SpaceManager, - private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate + private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + private val storeOfRelations: StoreOfRelations ) : RelationCreateFromScratchBaseViewModel(), AnalyticSpaceHelperDelegate by analyticSpaceHelperDelegate { @@ -240,6 +252,12 @@ class RelationCreateFromScratchForObjectBlockViewModel( ).process( success = { payload -> dispatcher.send(payload).also { commands.emit(Command.OnSuccess(relationKey)) } + analytics.sendAnalyticsRelationEvent( + eventName = EventsDictionary.relationAdd, + storeOfRelations = storeOfRelations, + relationKey = relationKey, + spaceParams = provideParams(spaceManager.get()) + ) }, failure = { Timber.e(it, ACTION_FAILED_ERROR).also { _toasts.emit(ACTION_FAILED_ERROR) } @@ -255,7 +273,8 @@ class RelationCreateFromScratchForObjectBlockViewModel( private val createFromScratchState: StateHolder, private val createRelation: CreateRelation, private val spaceManager: SpaceManager, - private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate + private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + private val storeOfRelations: StoreOfRelations ) : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") override fun create(modelClass: Class): T { @@ -266,7 +285,8 @@ class RelationCreateFromScratchForObjectBlockViewModel( createFromScratchState = createFromScratchState, createRelation = createRelation, spaceManager = spaceManager, - analyticSpaceHelperDelegate = analyticSpaceHelperDelegate + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate, + storeOfRelations = storeOfRelations ) as T } } @@ -285,7 +305,8 @@ class RelationCreateFromScratchForDataViewViewModel( private val createFromScratchState: StateHolder, private val createRelation: CreateRelation, private val spaceManager: SpaceManager, - private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate + private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + private val storeOfRelations: StoreOfRelations ) : RelationCreateFromScratchBaseViewModel(), AnalyticSpaceHelperDelegate by analyticSpaceHelperDelegate { @@ -347,6 +368,12 @@ class RelationCreateFromScratchForDataViewViewModel( relationKey = relationKey ) } + analytics.sendAnalyticsRelationEvent( + eventName = EventsDictionary.relationAdd, + storeOfRelations = storeOfRelations, + relationKey = relationKey, + spaceParams = provideParams(spaceManager.get()) + ) }, failure = { Timber.d(it, "Error while adding relation with key: $relationKey to data view: $dv") @@ -383,7 +410,8 @@ class RelationCreateFromScratchForDataViewViewModel( private val dispatcher: Dispatcher, private val analytics: Analytics, private val spaceManager: SpaceManager, - private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate + private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + private val storeOfRelations: StoreOfRelations ) : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") override fun create(modelClass: Class): T { @@ -396,7 +424,8 @@ class RelationCreateFromScratchForDataViewViewModel( createFromScratchState = createFromScratchState, createRelation = createRelation, addRelationToDataView = addRelationToDataView, - analyticSpaceHelperDelegate = analyticSpaceHelperDelegate + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate, + storeOfRelations = storeOfRelations ) as T } } diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationListViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationListViewModel.kt index 07ddefc4a2..c50157c2fe 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationListViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationListViewModel.kt @@ -2,6 +2,7 @@ package com.anytypeio.anytype.presentation.relations import androidx.lifecycle.viewModelScope import com.anytypeio.anytype.analytics.base.Analytics +import com.anytypeio.anytype.analytics.base.EventsDictionary import com.anytypeio.anytype.analytics.base.EventsDictionary.objectRelationFeature import com.anytypeio.anytype.analytics.base.EventsDictionary.objectRelationUnfeature import com.anytypeio.anytype.analytics.base.EventsDictionary.relationsScreenShow @@ -22,10 +23,11 @@ import com.anytypeio.anytype.domain.relations.AddRelationToObject import com.anytypeio.anytype.domain.relations.AddToFeaturedRelations import com.anytypeio.anytype.domain.relations.DeleteRelationFromObject import com.anytypeio.anytype.domain.relations.RemoveFromFeaturedRelations +import com.anytypeio.anytype.domain.workspace.SpaceManager import com.anytypeio.anytype.presentation.BuildConfig +import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate import com.anytypeio.anytype.presentation.common.BaseViewModel -import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationDeleteEvent -import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationValueEvent +import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationEvent import com.anytypeio.anytype.presentation.objects.LockedStateProvider import com.anytypeio.anytype.presentation.objects.getProperType import com.anytypeio.anytype.presentation.relations.model.RelationOperationError @@ -50,8 +52,10 @@ class RelationListViewModel( private val deleteRelationFromObject: DeleteRelationFromObject, private val analytics: Analytics, private val storeOfRelations: StoreOfRelations, - private val addRelationToObject: AddRelationToObject -) : BaseViewModel() { + private val addRelationToObject: AddRelationToObject, + private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + private val spaceManager: SpaceManager +) : BaseViewModel(), AnalyticSpaceHelperDelegate by analyticSpaceHelperDelegate { val isEditMode = MutableStateFlow(false) @@ -249,6 +253,12 @@ class RelationListViewModel( failure = { Timber.e(it, "Error while adding relation to object") }, success = { dispatcher.send(it) + analytics.sendAnalyticsRelationEvent( + eventName = EventsDictionary.relationAdd, + storeOfRelations = storeOfRelations, + relationKey = view.key, + spaceParams = provideParams(spaceManager.get()) + ) success.invoke() } ) @@ -271,9 +281,11 @@ class RelationListViewModel( failure = { Timber.e(it, "Error while removing from featured relations") }, success = { dispatcher.send(it) - sendEvent( - analytics = analytics, - eventName = objectRelationUnfeature + analytics.sendAnalyticsRelationEvent( + eventName = objectRelationUnfeature, + storeOfRelations = storeOfRelations, + relationKey = relationKey, + spaceParams = provideParams(spaceManager.get()) ) } ) @@ -289,9 +301,11 @@ class RelationListViewModel( failure = { Timber.e(it, "Error while adding to featured relations") }, success = { dispatcher.send(it) - sendEvent( - analytics = analytics, - eventName = objectRelationFeature + analytics.sendAnalyticsRelationEvent( + eventName = objectRelationFeature, + storeOfRelations = storeOfRelations, + relationKey = relationKey, + spaceParams = provideParams(spaceManager.get()) ) } ) @@ -311,7 +325,12 @@ class RelationListViewModel( failure = { Timber.e(it, "Error while deleting relation") }, success = { dispatcher.send(it) - sendAnalyticsRelationDeleteEvent(analytics) + analytics.sendAnalyticsRelationEvent( + eventName = EventsDictionary.relationDelete, + storeOfRelations = storeOfRelations, + relationKey = view.key, + spaceParams = provideParams(spaceManager.get()) + ) } ) } @@ -446,7 +465,12 @@ class RelationListViewModel( ).process( success = { dispatcher.send(it) - sendAnalyticsRelationValueEvent(analytics) + analytics.sendAnalyticsRelationEvent( + eventName = EventsDictionary.relationChangeValue, + storeOfRelations = storeOfRelations, + relationKey = view.key, + spaceParams = provideParams(spaceManager.get()) + ) }, failure = { Timber.e(it, "Error while updating checkbox relation") } ) @@ -470,7 +494,8 @@ class RelationListViewModel( fun onRelationTextValueChanged( ctx: Id, value: Any?, - relationKey: Key + relationKey: Key, + isValueEmpty: Boolean ) { viewModelScope.launch { updateDetail( @@ -482,7 +507,13 @@ class RelationListViewModel( ).process( success = { payload -> if (payload.events.isNotEmpty()) dispatcher.send(payload) - sendAnalyticsRelationValueEvent(analytics) + analytics.sendAnalyticsRelationEvent( + eventName = if (isValueEmpty) EventsDictionary.relationDeleteValue + else EventsDictionary.relationChangeValue, + storeOfRelations = storeOfRelations, + relationKey = relationKey, + spaceParams = provideParams(spaceManager.get()) + ) }, failure = { Timber.e(it, "Error while updating relation values") } ) diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/option/CreateOrEditOptionViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/option/CreateOrEditOptionViewModel.kt index fb8fae745e..307b981daf 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/option/CreateOrEditOptionViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/option/CreateOrEditOptionViewModel.kt @@ -2,6 +2,7 @@ package com.anytypeio.anytype.presentation.relations.option import androidx.lifecycle.viewModelScope import com.anytypeio.anytype.analytics.base.Analytics +import com.anytypeio.anytype.analytics.base.EventsDictionary import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.Key import com.anytypeio.anytype.core_models.ObjectWrapper @@ -17,8 +18,9 @@ import com.anytypeio.anytype.domain.`object`.SetObjectDetails import com.anytypeio.anytype.domain.objects.StoreOfRelations import com.anytypeio.anytype.domain.relations.CreateRelationOption import com.anytypeio.anytype.domain.workspace.SpaceManager +import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate import com.anytypeio.anytype.presentation.common.BaseViewModel -import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationValueEvent +import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationEvent import com.anytypeio.anytype.presentation.relations.providers.ObjectValueProvider import com.anytypeio.anytype.presentation.util.Dispatcher import kotlinx.coroutines.flow.MutableSharedFlow @@ -34,8 +36,9 @@ class CreateOrEditOptionViewModel( private val dispatcher: Dispatcher, private val spaceManager: SpaceManager, private val analytics: Analytics, - private val storeOfRelations: StoreOfRelations -) : BaseViewModel() { + private val storeOfRelations: StoreOfRelations, + private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate +) : BaseViewModel(), AnalyticSpaceHelperDelegate by analyticSpaceHelperDelegate { val command = MutableSharedFlow(replay = 0) val viewState: MutableStateFlow = @@ -120,7 +123,6 @@ class CreateOrEditOptionViewModel( onFailure = { Timber.e(it, "Error while updating option") }, onSuccess = { dispatcher.send(it) - viewModelScope.sendAnalyticsRelationValueEvent(analytics) command.emit(Command.Dismiss) } ) @@ -145,7 +147,13 @@ class CreateOrEditOptionViewModel( onFailure = { Timber.e(it, "Error while adding tag to object") }, onSuccess = { dispatcher.send(it) - viewModelScope.sendAnalyticsRelationValueEvent(analytics) + analytics.sendAnalyticsRelationEvent( + eventName = if (result.isEmpty()) EventsDictionary.relationDeleteValue + else EventsDictionary.relationChangeValue, + storeOfRelations = storeOfRelations, + relationKey = relationKey, + spaceParams = provideParams(spaceManager.get()) + ) command.emit(Command.Dismiss) } ) diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/option/CreateOrEditOptionViewModelFactory.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/option/CreateOrEditOptionViewModelFactory.kt index 19373a1ba0..ed5a08e1b9 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/option/CreateOrEditOptionViewModelFactory.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/option/CreateOrEditOptionViewModelFactory.kt @@ -8,6 +8,7 @@ import com.anytypeio.anytype.domain.`object`.SetObjectDetails import com.anytypeio.anytype.domain.objects.StoreOfRelations import com.anytypeio.anytype.domain.relations.CreateRelationOption import com.anytypeio.anytype.domain.workspace.SpaceManager +import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate import com.anytypeio.anytype.presentation.relations.providers.ObjectValueProvider import com.anytypeio.anytype.presentation.util.Dispatcher import javax.inject.Inject @@ -20,7 +21,8 @@ class CreateOrEditOptionViewModelFactory @Inject constructor( private val dispatcher: Dispatcher, private val spaceManager: SpaceManager, private val analytics: Analytics, - private val storeOfRelations: StoreOfRelations + private val storeOfRelations: StoreOfRelations, + private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate ) : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") override fun create( @@ -33,6 +35,7 @@ class CreateOrEditOptionViewModelFactory @Inject constructor( dispatcher = dispatcher, spaceManager = spaceManager, analytics = analytics, - storeOfRelations = storeOfRelations + storeOfRelations = storeOfRelations, + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate ) as T } \ No newline at end of file diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/value/object/ObjectValueViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/value/object/ObjectValueViewModel.kt index 199fda2f61..85053f6109 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/value/object/ObjectValueViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/value/object/ObjectValueViewModel.kt @@ -2,6 +2,7 @@ package com.anytypeio.anytype.presentation.relations.value.`object` import androidx.lifecycle.viewModelScope import com.anytypeio.anytype.analytics.base.Analytics +import com.anytypeio.anytype.analytics.base.EventsDictionary import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.Key import com.anytypeio.anytype.core_models.ObjectTypeIds @@ -18,11 +19,13 @@ import com.anytypeio.anytype.domain.`object`.DuplicateObject import com.anytypeio.anytype.domain.`object`.UpdateDetail import com.anytypeio.anytype.domain.objects.SetObjectListIsArchived import com.anytypeio.anytype.domain.objects.StoreOfObjectTypes +import com.anytypeio.anytype.domain.objects.StoreOfRelations import com.anytypeio.anytype.domain.search.SearchObjects import com.anytypeio.anytype.domain.workspace.SpaceManager import com.anytypeio.anytype.domain.workspace.getSpaceWithTechSpace +import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate import com.anytypeio.anytype.presentation.common.BaseViewModel -import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationValueEvent +import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationEvent import com.anytypeio.anytype.presentation.navigation.DefaultObjectView import com.anytypeio.anytype.presentation.objects.SupportedLayouts import com.anytypeio.anytype.presentation.objects.toView @@ -54,8 +57,10 @@ class ObjectValueViewModel( private val urlBuilder: UrlBuilder, private val storeOfObjectTypes: StoreOfObjectTypes, private val objectListIsArchived: SetObjectListIsArchived, - private val duplicateObject: DuplicateObject -) : BaseViewModel() { + private val duplicateObject: DuplicateObject, + private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + private val storeOfRelations: StoreOfRelations +) : BaseViewModel(), AnalyticSpaceHelperDelegate by analyticSpaceHelperDelegate { val viewState = MutableStateFlow(ObjectValueViewState.Loading()) private val query = MutableSharedFlow(replay = 1) @@ -333,7 +338,12 @@ class ObjectValueViewModel( failure = { Timber.e(it, "Error while clearing objects") }, success = { dispatcher.send(it) - sendAnalyticsRelationValueEvent(analytics) + analytics.sendAnalyticsRelationEvent( + eventName = EventsDictionary.relationDeleteValue, + storeOfRelations = storeOfRelations, + relationKey = viewModelParams.relationKey, + spaceParams = provideParams(spaceManager.get()) + ) }) } } @@ -390,7 +400,13 @@ class ObjectValueViewModel( failure = { Timber.e(it, "Error while adding object") }, success = { dispatcher.send(it) - sendAnalyticsRelationValueEvent(analytics) + analytics.sendAnalyticsRelationEvent( + eventName = if (result.isEmpty()) EventsDictionary.relationDeleteValue + else EventsDictionary.relationChangeValue, + storeOfRelations = storeOfRelations, + relationKey = viewModelParams.relationKey, + spaceParams = provideParams(spaceManager.get()) + ) } ) } @@ -409,7 +425,13 @@ class ObjectValueViewModel( failure = { Timber.e(it, "Error while removing object ${item.view.id}") }, success = { dispatcher.send(it) - viewModelScope.sendAnalyticsRelationValueEvent(analytics) + analytics.sendAnalyticsRelationEvent( + eventName = if (value.isEmpty()) EventsDictionary.relationDeleteValue + else EventsDictionary.relationChangeValue, + storeOfRelations = storeOfRelations, + relationKey = viewModelParams.relationKey, + spaceParams = provideParams(spaceManager.get()) + ) action() } ) diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/value/object/ObjectValueViewModelFactory.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/value/object/ObjectValueViewModelFactory.kt index 40f98181ad..e349caece2 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/value/object/ObjectValueViewModelFactory.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/value/object/ObjectValueViewModelFactory.kt @@ -9,8 +9,10 @@ import com.anytypeio.anytype.domain.`object`.DuplicateObject import com.anytypeio.anytype.domain.`object`.UpdateDetail import com.anytypeio.anytype.domain.objects.SetObjectListIsArchived import com.anytypeio.anytype.domain.objects.StoreOfObjectTypes +import com.anytypeio.anytype.domain.objects.StoreOfRelations import com.anytypeio.anytype.domain.search.SearchObjects import com.anytypeio.anytype.domain.workspace.SpaceManager +import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate import com.anytypeio.anytype.presentation.relations.providers.ObjectRelationProvider import com.anytypeio.anytype.presentation.relations.providers.ObjectValueProvider import com.anytypeio.anytype.presentation.util.Dispatcher @@ -29,6 +31,8 @@ class ObjectValueViewModelFactory @Inject constructor( private val storeOfObjectTypes: StoreOfObjectTypes, private val objectListIsArchived: SetObjectListIsArchived, private val duplicateObject: DuplicateObject, + private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + private val storeOfRelations: StoreOfRelations ) : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") override fun create( @@ -45,6 +49,8 @@ class ObjectValueViewModelFactory @Inject constructor( urlBuilder = urlBuilder, storeOfObjectTypes = storeOfObjectTypes, objectListIsArchived = objectListIsArchived, - duplicateObject = duplicateObject + duplicateObject = duplicateObject, + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate, + storeOfRelations = storeOfRelations ) as T } \ No newline at end of file diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/value/tagstatus/TagOrStatusValueViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/value/tagstatus/TagOrStatusValueViewModel.kt index a64daf1c66..0fe3899650 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/value/tagstatus/TagOrStatusValueViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/value/tagstatus/TagOrStatusValueViewModel.kt @@ -2,6 +2,7 @@ package com.anytypeio.anytype.presentation.relations.value.tagstatus import androidx.lifecycle.viewModelScope import com.anytypeio.anytype.analytics.base.Analytics +import com.anytypeio.anytype.analytics.base.EventsDictionary import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.Key import com.anytypeio.anytype.core_models.ObjectWrapper @@ -14,10 +15,12 @@ import com.anytypeio.anytype.domain.base.fold import com.anytypeio.anytype.domain.library.StoreSearchParams import com.anytypeio.anytype.domain.library.StorelessSubscriptionContainer import com.anytypeio.anytype.domain.`object`.UpdateDetail +import com.anytypeio.anytype.domain.objects.StoreOfRelations import com.anytypeio.anytype.domain.relations.DeleteRelationOptions import com.anytypeio.anytype.domain.workspace.SpaceManager +import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate import com.anytypeio.anytype.presentation.common.BaseViewModel -import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationValueEvent +import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationEvent import com.anytypeio.anytype.presentation.relations.providers.ObjectRelationProvider import com.anytypeio.anytype.presentation.relations.providers.ObjectValueProvider import com.anytypeio.anytype.presentation.search.ObjectSearchConstants @@ -41,8 +44,10 @@ class TagOrStatusValueViewModel( private val analytics: Analytics, private val spaceManager: SpaceManager, private val subscription: StorelessSubscriptionContainer, - private val deleteRelationOptions: DeleteRelationOptions -) : BaseViewModel() { + private val deleteRelationOptions: DeleteRelationOptions, + private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + private val storeOfRelations: StoreOfRelations +) : BaseViewModel(), AnalyticSpaceHelperDelegate by analyticSpaceHelperDelegate { val viewState = MutableStateFlow(TagStatusViewState.Loading) private val query = MutableSharedFlow(replay = 0) @@ -317,7 +322,13 @@ class TagOrStatusValueViewModel( failure = { Timber.e(it, "Error while adding tag") }, success = { dispatcher.send(it) - sendAnalyticsRelationValueEvent(analytics) + analytics.sendAnalyticsRelationEvent( + eventName = if (result.isEmpty()) EventsDictionary.relationDeleteValue + else EventsDictionary.relationChangeValue, + storeOfRelations = storeOfRelations, + relationKey = viewModelParams.relationKey, + spaceParams = provideParams(spaceManager.get()) + ) } ) } @@ -337,7 +348,13 @@ class TagOrStatusValueViewModel( failure = { Timber.e(it, "Error while adding tag") }, success = { dispatcher.send(it) - sendAnalyticsRelationValueEvent(analytics) + analytics.sendAnalyticsRelationEvent( + eventName = if (remaining.isEmpty()) EventsDictionary.relationDeleteValue + else EventsDictionary.relationChangeValue, + storeOfRelations = storeOfRelations, + relationKey = viewModelParams.relationKey, + spaceParams = provideParams(spaceManager.get()) + ) }) } } @@ -354,7 +371,12 @@ class TagOrStatusValueViewModel( failure = { Timber.e(it, "Error while adding tag") }, success = { dispatcher.send(it) - sendAnalyticsRelationValueEvent(analytics) + analytics.sendAnalyticsRelationEvent( + eventName = EventsDictionary.relationChangeValue, + storeOfRelations = storeOfRelations, + relationKey = viewModelParams.relationKey, + spaceParams = provideParams(spaceManager.get()) + ) emitCommand(command = Command.Dismiss, delay = DELAY_UNTIL_CLOSE) } ) @@ -373,7 +395,12 @@ class TagOrStatusValueViewModel( failure = { Timber.e(it, "Error while clearing tags or select") }, success = { dispatcher.send(it) - sendAnalyticsRelationValueEvent(analytics) + analytics.sendAnalyticsRelationEvent( + eventName = EventsDictionary.relationDeleteValue, + storeOfRelations = storeOfRelations, + relationKey = viewModelParams.relationKey, + spaceParams = provideParams(spaceManager.get()) + ) } ) } diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/value/tagstatus/TagOrStatusValueViewModelFactory.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/value/tagstatus/TagOrStatusValueViewModelFactory.kt index d29b178aba..6705bbbc93 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/value/tagstatus/TagOrStatusValueViewModelFactory.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/value/tagstatus/TagOrStatusValueViewModelFactory.kt @@ -6,8 +6,10 @@ import com.anytypeio.anytype.analytics.base.Analytics import com.anytypeio.anytype.core_models.Payload import com.anytypeio.anytype.domain.library.StorelessSubscriptionContainer import com.anytypeio.anytype.domain.`object`.UpdateDetail +import com.anytypeio.anytype.domain.objects.StoreOfRelations import com.anytypeio.anytype.domain.relations.DeleteRelationOptions import com.anytypeio.anytype.domain.workspace.SpaceManager +import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate import com.anytypeio.anytype.presentation.relations.providers.ObjectRelationProvider import com.anytypeio.anytype.presentation.relations.providers.ObjectValueProvider import com.anytypeio.anytype.presentation.util.Dispatcher @@ -22,7 +24,9 @@ class TagOrStatusValueViewModelFactory @Inject constructor( private val analytics: Analytics, private val spaceManager: SpaceManager, private val subscription: StorelessSubscriptionContainer, - private val deleteRelationOptions: DeleteRelationOptions + private val deleteRelationOptions: DeleteRelationOptions, + private val analyticSpaceHelperDelegate: AnalyticSpaceHelperDelegate, + private val storeOfRelations: StoreOfRelations ) : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") override fun create( @@ -36,6 +40,8 @@ class TagOrStatusValueViewModelFactory @Inject constructor( analytics = analytics, spaceManager = spaceManager, subscription = subscription, - deleteRelationOptions = deleteRelationOptions + deleteRelationOptions = deleteRelationOptions, + analyticSpaceHelperDelegate = analyticSpaceHelperDelegate, + storeOfRelations = storeOfRelations ) as T } \ No newline at end of file diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ObjectSetViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ObjectSetViewModel.kt index 6582bac521..8401ff2b4c 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ObjectSetViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ObjectSetViewModel.kt @@ -70,7 +70,7 @@ import com.anytypeio.anytype.presentation.editor.model.TextUpdate import com.anytypeio.anytype.presentation.extension.ObjectStateAnalyticsEvent import com.anytypeio.anytype.presentation.extension.logEvent import com.anytypeio.anytype.presentation.extension.sendAnalyticsObjectCreateEvent -import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationValueEvent +import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationEvent import com.anytypeio.anytype.presentation.home.HomeScreenViewModel.Companion.HOME_SCREEN_PROFILE_OBJECT_SUBSCRIPTION import com.anytypeio.anytype.presentation.mapper.toTemplateObjectTypeViewItems import com.anytypeio.anytype.presentation.navigation.AppNavigation @@ -1736,7 +1736,12 @@ class ObjectSetViewModel( ).process( success = { dispatcher.send(it) - sendAnalyticsRelationValueEvent(analytics) + analytics.sendAnalyticsRelationEvent( + eventName = EventsDictionary.relationChangeValue, + storeOfRelations = storeOfRelations, + relationKey = view.key, + spaceParams = provideParams(spaceManager.get()) + ) }, failure = { Timber.e(it, "Error while updating checkbox relation") } )