1
0
Fork 0
mirror of https://github.com/anyproto/anytype-kotlin.git synced 2025-06-08 05:47:05 +09:00

DROID-3399 Primitives | Provide type relations into Type DataView properties menu (#2262)

This commit is contained in:
Konstantin Ivanov 2025-04-09 13:10:13 +02:00 committed by GitHub
parent 770c750eac
commit bb4e5479e7
Signed by: github
GPG key ID: B5690EEEBB952194
22 changed files with 318 additions and 46 deletions

View file

@ -3,12 +3,15 @@ package com.anytypeio.anytype.feature_properties
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.anytypeio.anytype.core_models.Id
import com.anytypeio.anytype.core_models.Key
import com.anytypeio.anytype.core_models.ObjectType
import com.anytypeio.anytype.core_models.ObjectWrapper
import com.anytypeio.anytype.core_models.Payload
import com.anytypeio.anytype.core_models.RelationFormat
import com.anytypeio.anytype.core_models.Relations
import com.anytypeio.anytype.core_ui.extensions.simpleIcon
import com.anytypeio.anytype.domain.base.fold
import com.anytypeio.anytype.domain.dataview.SetDataViewProperties
import com.anytypeio.anytype.domain.misc.UrlBuilder
import com.anytypeio.anytype.domain.`object`.SetObjectDetails
import com.anytypeio.anytype.domain.objects.StoreOfObjectTypes
@ -29,6 +32,8 @@ import com.anytypeio.anytype.feature_properties.edit.UiPropertyFormatsListState
import com.anytypeio.anytype.feature_properties.edit.UiPropertyFormatsListState.*
import com.anytypeio.anytype.feature_properties.edit.UiPropertyLimitTypeItem
import com.anytypeio.anytype.presentation.mapper.objectIcon
import com.anytypeio.anytype.presentation.util.Dispatcher
import kotlin.collections.plus
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
@ -53,7 +58,8 @@ class EditTypePropertiesViewModel(
private val createRelation: CreateRelation,
private val setObjectDetails: SetObjectDetails,
private val setObjectTypeRecommendedFields: SetObjectTypeRecommendedFields,
private val urlBuilder: UrlBuilder
private val setDataViewProperties: SetDataViewProperties,
private val dispatcher: Dispatcher<Payload>
) : ViewModel() {
private val _uiState = MutableStateFlow(UiEditTypePropertiesState.Companion.EMPTY)
@ -216,8 +222,16 @@ class EditTypePropertiesViewModel(
val objType = storeOfObjectTypes.get(vmParams.objectTypeId)
if (objType != null) {
proceedWithSetRecommendedProperties(
properties = objType.recommendedRelations + event.item.id
properties = listOf(event.item.id) + objType.recommendedRelations
)
val propertiesIds = buildList {
addAll(objType.recommendedFeaturedRelations)
add(event.item.id)
addAll(objType.recommendedRelations)
addAll(objType.recommendedFileRelations)
addAll(objType.recommendedHiddenRelations)
}
proceedWithUpdateDataViewProperties(propertiesIds = propertiesIds)
}
}
}
@ -371,8 +385,16 @@ class EditTypePropertiesViewModel(
val objType = storeOfObjectTypes.get(vmParams.objectTypeId)
if (objType != null) {
proceedWithSetRecommendedProperties(
properties = objType.recommendedRelations + listOf(property.id)
properties = listOf(property.id) + objType.recommendedRelations
)
val propertiesIds = buildList {
addAll(objType.recommendedFeaturedRelations)
add(property.id)
addAll(objType.recommendedRelations)
addAll(objType.recommendedFileRelations)
addAll(objType.recommendedHiddenRelations)
}
proceedWithUpdateDataViewProperties(propertiesIds = propertiesIds)
}
uiPropertyEditState.value = UiEditPropertyState.Hidden
},
@ -406,6 +428,34 @@ class EditTypePropertiesViewModel(
)
}
}
// Updating both relations in type and dataview to preserve integrity between them
private suspend fun proceedWithUpdateDataViewProperties(
propertiesIds: List<Id>
) {
// Show description in DataView properties list
val descriptionKey = Relations.DESCRIPTION
val allProperties = storeOfRelations.getById(ids = propertiesIds)
val allPropertiesKeys = allProperties.map { it.key } + listOf(descriptionKey)
viewModelScope.launch {
val params = SetDataViewProperties.Params(
objectId = vmParams.objectTypeId,
properties = allPropertiesKeys
)
setDataViewProperties.async(params).fold(
onSuccess = { payload ->
dispatcher.send(payload)
Timber.d("Data view properties updated, payload:$payload")
},
onFailure = {
Timber.e(it, "Error while updating data view properties")
}
)
}
}
//endregion
//region Commands

View file

@ -2,6 +2,8 @@ package com.anytypeio.anytype.feature_properties
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.anytypeio.anytype.core_models.Payload
import com.anytypeio.anytype.domain.dataview.SetDataViewProperties
import com.anytypeio.anytype.domain.misc.UrlBuilder
import com.anytypeio.anytype.domain.`object`.SetObjectDetails
import com.anytypeio.anytype.domain.objects.StoreOfObjectTypes
@ -10,6 +12,7 @@ import com.anytypeio.anytype.domain.primitives.SetObjectTypeRecommendedFields
import com.anytypeio.anytype.domain.relations.CreateRelation
import com.anytypeio.anytype.domain.resources.StringResourceProvider
import com.anytypeio.anytype.feature_properties.add.EditTypePropertiesVmParams
import com.anytypeio.anytype.presentation.util.Dispatcher
import javax.inject.Inject
class EditTypePropertiesViewModelFactory @Inject constructor(
@ -20,7 +23,8 @@ class EditTypePropertiesViewModelFactory @Inject constructor(
private val setObjectDetails: SetObjectDetails,
private val storeOfObjectTypes: StoreOfObjectTypes,
private val setObjectTypeRecommendedFields: SetObjectTypeRecommendedFields,
private val urlBuilder: UrlBuilder
private val setDataViewProperties: SetDataViewProperties,
private val dispatcher: Dispatcher<Payload>
) : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
@ -33,6 +37,7 @@ class EditTypePropertiesViewModelFactory @Inject constructor(
setObjectDetails = setObjectDetails,
storeOfObjectTypes = storeOfObjectTypes,
setObjectTypeRecommendedFields = setObjectTypeRecommendedFields,
urlBuilder = urlBuilder
setDataViewProperties = setDataViewProperties,
dispatcher = dispatcher
) as T
}