mirror of
https://github.com/anyproto/anytype-kotlin.git
synced 2025-06-08 05:47:05 +09:00
DROID-2606 Analytics | ChangeObjectType event, update route param (#1983)
This commit is contained in:
parent
c3d5273b54
commit
424c99562d
6 changed files with 66 additions and 26 deletions
|
@ -311,6 +311,7 @@ object EventsDictionary {
|
|||
const val sharingExtension = "SharingExtension"
|
||||
const val gallery = "Gallery"
|
||||
const val notification = "Notification"
|
||||
const val featuredRelations = "FeaturedRelations"
|
||||
}
|
||||
|
||||
object Type {
|
||||
|
|
|
@ -1132,7 +1132,8 @@ open class EditorFragment : NavigationFragment<FragmentEditorBinding>(R.layout.f
|
|||
hideKeyboard()
|
||||
val dialog = ObjectTypeUpdateFragment.new(
|
||||
excludedTypeKeys = command.excludedTypes,
|
||||
space = space
|
||||
space = space,
|
||||
fromFeatured = command.fromFeatured
|
||||
)
|
||||
dialog.show(childFragmentManager, null)
|
||||
}
|
||||
|
@ -2232,8 +2233,8 @@ open class EditorFragment : NavigationFragment<FragmentEditorBinding>(R.layout.f
|
|||
vm.proceedToCreateObjectAndAddToTextAsLink(name)
|
||||
}
|
||||
|
||||
override fun onUpdateObjectType(objType: ObjectWrapper.Type) {
|
||||
vm.onObjectTypeChanged(objType = objType)
|
||||
override fun onUpdateObjectType(objType: ObjectWrapper.Type, fromFeatured: Boolean) {
|
||||
vm.onObjectTypeChanged(objType = objType, fromFeatured = fromFeatured)
|
||||
}
|
||||
|
||||
override fun onSelectObjectType(objType: ObjectWrapper.Type) {
|
||||
|
|
|
@ -145,9 +145,14 @@ class ObjectTypeSelectionFragment : SelectObjectTypeBaseFragment() {
|
|||
*/
|
||||
class ObjectTypeUpdateFragment : SelectObjectTypeBaseFragment() {
|
||||
|
||||
private val fromFeatured get() = argOrNull<Boolean>(OPEN_FROM_FEATURED_ARG) == true
|
||||
|
||||
override fun proceedWithSelectedType(objType: ObjectWrapper.Type) {
|
||||
withParentSafe<ObjectTypeUpdateListener> {
|
||||
onUpdateObjectType(objType = objType)
|
||||
onUpdateObjectType(
|
||||
objType = objType,
|
||||
fromFeatured = fromFeatured
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -156,10 +161,13 @@ class ObjectTypeUpdateFragment : SelectObjectTypeBaseFragment() {
|
|||
}
|
||||
|
||||
companion object {
|
||||
fun new(space: Id, excludedTypeKeys: List<Key>) = ObjectTypeUpdateFragment().apply {
|
||||
const val OPEN_FROM_FEATURED_ARG = "arg.object_type_choose_open_from"
|
||||
|
||||
fun new(space: Id, excludedTypeKeys: List<Key>, fromFeatured: Boolean = false) = ObjectTypeUpdateFragment().apply {
|
||||
arguments = bundleOf(
|
||||
SPACE_ID_KEY to space,
|
||||
EXCLUDED_TYPE_KEYS_ARG_KEY to excludedTypeKeys
|
||||
EXCLUDED_TYPE_KEYS_ARG_KEY to excludedTypeKeys,
|
||||
OPEN_FROM_FEATURED_ARG to fromFeatured
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ interface ObjectTypeSelectionListener {
|
|||
}
|
||||
|
||||
interface ObjectTypeUpdateListener {
|
||||
fun onUpdateObjectType(objType: ObjectWrapper.Type)
|
||||
fun onUpdateObjectType(objType: ObjectWrapper.Type, fromFeatured: Boolean = false)
|
||||
}
|
||||
|
||||
interface WidgetObjectTypeListener {
|
||||
|
|
|
@ -4191,7 +4191,7 @@ class EditorViewModel(
|
|||
return
|
||||
}
|
||||
val exclude = listOf(ObjectTypeUniqueKeys.SET, ObjectTypeUniqueKeys.COLLECTION)
|
||||
proceedWithOpeningSelectingObjectTypeScreen(exclude = exclude)
|
||||
proceedWithOpeningSelectingObjectTypeScreen(exclude = exclude, fromFeatured = true)
|
||||
} else {
|
||||
sendToast("Your object is locked. To change its type, simply unlock it.")
|
||||
}
|
||||
|
@ -4631,7 +4631,7 @@ class EditorViewModel(
|
|||
is TypesWidgetItem.Type -> {
|
||||
val objType = _objectTypes.firstOrNull { item.item.id == it.id }
|
||||
if (objType != null) {
|
||||
onObjectTypeChanged(objType)
|
||||
onObjectTypeChanged(objType, false)
|
||||
} else {
|
||||
Timber.e("Error while getting object type from objectTypes list")
|
||||
}
|
||||
|
@ -4650,25 +4650,26 @@ class EditorViewModel(
|
|||
}
|
||||
|
||||
fun onObjectTypeChanged(
|
||||
objType: ObjectWrapper.Type
|
||||
objType: ObjectWrapper.Type,
|
||||
fromFeatured: Boolean
|
||||
) {
|
||||
Timber.d("onObjectTypeChanged, item:[$objType]")
|
||||
viewModelScope.launch {
|
||||
when (objType.uniqueKey) {
|
||||
ObjectTypeIds.SET -> {
|
||||
proceedWithConvertingToSet()
|
||||
proceedWithConvertingToSet(fromFeatured)
|
||||
}
|
||||
ObjectTypeIds.COLLECTION -> {
|
||||
proceedWithConvertingToCollection()
|
||||
proceedWithConvertingToCollection(fromFeatured)
|
||||
}
|
||||
else -> {
|
||||
proceedWithObjectTypeChangeAndApplyTemplate(objType)
|
||||
proceedWithObjectTypeChangeAndApplyTemplate(objType, fromFeatured)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun proceedWithConvertingToSet() {
|
||||
private suspend fun proceedWithConvertingToSet(fromFeature: Boolean) {
|
||||
val startTime = System.currentTimeMillis()
|
||||
objectToSet.async(
|
||||
ConvertObjectToSet.Params(
|
||||
|
@ -4683,19 +4684,24 @@ class EditorViewModel(
|
|||
space = vmParams.space,
|
||||
isPopUpToDashboard = true
|
||||
)
|
||||
val route = if (fromFeature) {
|
||||
EventsDictionary.Routes.featuredRelations
|
||||
} else {
|
||||
EventsDictionary.Routes.navigation
|
||||
}
|
||||
viewModelScope.sendAnalyticsObjectTypeSelectOrChangeEvent(
|
||||
analytics = analytics,
|
||||
startTime = startTime,
|
||||
sourceObject = SET_MARKETPLACE_ID,
|
||||
containsFlagType = true,
|
||||
route = EventsDictionary.Routes.navigation,
|
||||
route = route,
|
||||
spaceParams = provideParams(vmParams.space.id)
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
private suspend fun proceedWithConvertingToCollection() {
|
||||
private suspend fun proceedWithConvertingToCollection(fromFeature: Boolean) {
|
||||
val startTime = System.currentTimeMillis()
|
||||
objectToCollection.async(
|
||||
ConvertObjectToCollection.Params(ctx = context)
|
||||
|
@ -4707,12 +4713,17 @@ class EditorViewModel(
|
|||
space = vmParams.space,
|
||||
isPopUpToDashboard = true
|
||||
)
|
||||
val route = if (fromFeature) {
|
||||
EventsDictionary.Routes.featuredRelations
|
||||
} else {
|
||||
EventsDictionary.Routes.navigation
|
||||
}
|
||||
viewModelScope.sendAnalyticsObjectTypeSelectOrChangeEvent(
|
||||
analytics = analytics,
|
||||
startTime = startTime,
|
||||
sourceObject = COLLECTION_MARKETPLACE_ID,
|
||||
containsFlagType = true,
|
||||
route = EventsDictionary.Routes.navigation
|
||||
route = route
|
||||
)
|
||||
}
|
||||
)
|
||||
|
@ -6372,7 +6383,7 @@ class EditorViewModel(
|
|||
|
||||
private fun onTypesWidgetSearchClicked() {
|
||||
Timber.d("onObjectTypesWidgetSearchClicked, ")
|
||||
proceedWithOpeningSelectingObjectTypeScreen()
|
||||
proceedWithOpeningSelectingObjectTypeScreen(fromFeatured = false)
|
||||
}
|
||||
|
||||
private fun proceedWithGettingObjectTypesForTypesWidget() {
|
||||
|
@ -6413,7 +6424,10 @@ class EditorViewModel(
|
|||
}
|
||||
}
|
||||
|
||||
private fun proceedWithOpeningSelectingObjectTypeScreen(exclude: List<Id> = emptyList()) {
|
||||
private fun proceedWithOpeningSelectingObjectTypeScreen(
|
||||
exclude: List<Id> = emptyList(),
|
||||
fromFeatured: Boolean
|
||||
) {
|
||||
val list = buildList {
|
||||
val types = orchestrator.stores.details.current().details[context]?.type ?: emptyList()
|
||||
if (types.isNotEmpty()) {
|
||||
|
@ -6424,7 +6438,8 @@ class EditorViewModel(
|
|||
}
|
||||
}
|
||||
val command = Command.OpenObjectSelectTypeScreen(
|
||||
excludedTypes = list
|
||||
excludedTypes = list,
|
||||
fromFeatured = fromFeatured
|
||||
)
|
||||
dispatch(command)
|
||||
}
|
||||
|
@ -6433,7 +6448,11 @@ class EditorViewModel(
|
|||
setTypesWidgetVisibility(false)
|
||||
}
|
||||
|
||||
private fun proceedWithObjectTypeChange(objType: ObjectWrapper.Type, onSuccess: (() -> Unit)? = null) {
|
||||
private fun proceedWithObjectTypeChange(
|
||||
objType: ObjectWrapper.Type,
|
||||
fromFeature: Boolean,
|
||||
onSuccess: (() -> Unit)? = null
|
||||
) {
|
||||
val startTime = System.currentTimeMillis()
|
||||
val internalFlags = getInternalFlagsFromDetails()
|
||||
val containsTypeFlag = internalFlags.contains(InternalFlags.ShouldSelectType)
|
||||
|
@ -6444,16 +6463,26 @@ class EditorViewModel(
|
|||
objectTypeKey = objType.uniqueKey
|
||||
)
|
||||
).fold(
|
||||
onFailure = { Timber.e(it, "Error while updating object type: [${objType.uniqueKey}]") },
|
||||
onFailure = {
|
||||
Timber.e(
|
||||
it,
|
||||
"Error while updating object type: [${objType.uniqueKey}]"
|
||||
)
|
||||
},
|
||||
onSuccess = { response ->
|
||||
Timber.d("proceedWithObjectTypeChange success, key:[${objType.uniqueKey}]")
|
||||
val route = if (fromFeature) {
|
||||
EventsDictionary.Routes.featuredRelations
|
||||
} else {
|
||||
EventsDictionary.Routes.navigation
|
||||
}
|
||||
dispatcher.send(response)
|
||||
sendAnalyticsObjectTypeSelectOrChangeEvent(
|
||||
analytics = analytics,
|
||||
startTime = startTime,
|
||||
sourceObject = objType.sourceObject,
|
||||
containsFlagType = containsTypeFlag,
|
||||
route = EventsDictionary.Routes.navigation
|
||||
route = route
|
||||
)
|
||||
onSuccess?.invoke()
|
||||
}
|
||||
|
@ -6461,8 +6490,8 @@ class EditorViewModel(
|
|||
}
|
||||
}
|
||||
|
||||
private fun proceedWithObjectTypeChangeAndApplyTemplate(objType: ObjectWrapper.Type) {
|
||||
proceedWithObjectTypeChange(objType) {
|
||||
private fun proceedWithObjectTypeChangeAndApplyTemplate(objType: ObjectWrapper.Type, fromFeatured: Boolean) {
|
||||
proceedWithObjectTypeChange(objType, fromFeatured) {
|
||||
val internalFlags = getInternalFlagsFromDetails()
|
||||
if (internalFlags.contains(InternalFlags.ShouldSelectTemplate)) {
|
||||
onProceedWithApplyingTemplateByObjectId(
|
||||
|
|
|
@ -133,7 +133,8 @@ sealed class Command {
|
|||
object AddMentionWidgetTriggerToFocusedBlock : Command()
|
||||
|
||||
data class OpenObjectSelectTypeScreen(
|
||||
val excludedTypes: List<Key>
|
||||
val excludedTypes: List<Key>,
|
||||
val fromFeatured: Boolean
|
||||
) : Command()
|
||||
|
||||
data class OpenMoveToScreen(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue