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:
parent
770c750eac
commit
bb4e5479e7
22 changed files with 318 additions and 46 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue