From 60ab3a087219c35db8bffc2daf06cadcd1d10a99 Mon Sep 17 00:00:00 2001 From: Konstantin Ivanov <54908981+konstantiniiv@users.noreply.github.com> Date: Tue, 17 Oct 2023 19:01:36 +0200 Subject: [PATCH] DROID-1821 Templates | Simplification of default type in collections (#445) --- .../core_ui/widgets/TypeTemplatesWidget.kt | 30 +--- .../core_ui/widgets/dv/ViewerEditWidget.kt | 31 ---- .../presentation/sets/ObjectSetViewModel.kt | 133 ++++-------------- .../presentation/sets/ViewerEditWidgetUi.kt | 21 --- .../widgets/TypeTemplatesWidgetUI.kt | 57 ++------ 5 files changed, 44 insertions(+), 228 deletions(-) diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/TypeTemplatesWidget.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/TypeTemplatesWidget.kt index fe75e355f0..5872853e50 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/TypeTemplatesWidget.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/TypeTemplatesWidget.kt @@ -230,18 +230,7 @@ fun TypeTemplatesWidget( ) } } - val title = when (val s = currentState) { - is TypeTemplatesWidgetUI.Data.CreateObject -> stringResource(R.string.type_templates_widget_title) - is TypeTemplatesWidgetUI.Data.DefaultObject -> { - if (s.isPossibleToChangeType) { - stringResource(R.string.default_object) - } else { - stringResource(R.string.default_template) - } - - } - is TypeTemplatesWidgetUI.Init -> "" - } + val title = stringResource(R.string.type_templates_widget_title) Box(modifier = Modifier.align(Alignment.Center)) { Text( text = title, @@ -325,12 +314,10 @@ fun TypeTemplatesWidget( menuClick = menuClick ) is TemplateView.Template -> { - val withDefaultForView = currentState is TypeTemplatesWidgetUI.Data.DefaultObject MoreMenu( itemId = templateView.id, currentCoordinates = currentClickedMoreButtonCoordinates, menuClick = menuClick, - withDefaultForView = withDefaultForView ) } is TemplateView.New -> Unit @@ -343,8 +330,7 @@ fun TypeTemplatesWidget( private fun MoreMenu( itemId: Id, currentCoordinates: IntOffset, - menuClick: (TemplateMenuClick) -> Unit, - withDefaultForView: Boolean + menuClick: (TemplateMenuClick) -> Unit ) { val moreButtonXCoordinatesDp = with(LocalDensity.current) { currentCoordinates.x.toDp() } val offsetX = if (moreButtonXCoordinatesDp > 244.dp) { @@ -365,13 +351,6 @@ private fun MoreMenu( elevation = 30.dp ) { Column { - if (withDefaultForView) { - MenuItem( - click = { menuClick(TemplateMenuClick.Default(itemId)) }, - text = stringResource(id = R.string.templates_menu_default_for_view) - ) - Divider(paddingStart = 0.dp, paddingEnd = 0.dp) - } MenuItem( click = { menuClick(TemplateMenuClick.Edit(itemId)) }, text = stringResource(id = R.string.templates_menu_edit) @@ -509,8 +488,7 @@ private fun TemplatesList( TemplateItemContent(item) } - val showMoreButton = - (item is TemplateView.Template && state.isEditing) || (state is TypeTemplatesWidgetUI.Data.DefaultObject && item is TemplateView.Blank && state.isEditing) + val showMoreButton = (item is TemplateView.Template && state.isEditing) AnimatedVisibility( visible = showMoreButton, enter = fadeIn(), @@ -1062,7 +1040,7 @@ fun ComposablePreview() { coverImage = null, ), ) - val state = TypeTemplatesWidgetUI.Data.CreateObject( + val state = TypeTemplatesWidgetUI.Data( templates = items, showWidget = true, isEditing = true, diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/dv/ViewerEditWidget.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/dv/ViewerEditWidget.kt index f9457b2bd1..453395f116 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/dv/ViewerEditWidget.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/dv/ViewerEditWidget.kt @@ -52,19 +52,16 @@ import androidx.compose.ui.unit.dp import androidx.constraintlayout.compose.ConstraintLayout import androidx.constraintlayout.compose.Dimension import com.anytypeio.anytype.core_models.DVViewerType -import com.anytypeio.anytype.core_models.ObjectWrapper import com.anytypeio.anytype.core_ui.R import com.anytypeio.anytype.core_ui.foundation.Divider import com.anytypeio.anytype.core_ui.foundation.Dragger import com.anytypeio.anytype.core_ui.foundation.noRippleThrottledClickable import com.anytypeio.anytype.core_ui.views.BodyCalloutRegular -import com.anytypeio.anytype.core_ui.views.BodyRegular import com.anytypeio.anytype.core_ui.views.Caption1Medium import com.anytypeio.anytype.core_ui.views.Title1 import com.anytypeio.anytype.core_ui.views.UXBody import com.anytypeio.anytype.presentation.sets.ViewEditAction import com.anytypeio.anytype.presentation.sets.ViewerEditWidgetUi -import com.anytypeio.anytype.presentation.templates.TemplateView.Companion.DEFAULT_TEMPLATE_ID_BLANK @OptIn(ExperimentalMaterialApi::class) @Composable @@ -191,30 +188,6 @@ fun ViewerEditWidgetContent( } NameTextField(state = currentState, action = action) Spacer(modifier = Modifier.height(12.dp)) - if (state.isDefaultObjectTypeEnabled) { - ColumnItem( - title = stringResource(id = R.string.default_object), - value = state.defaultObjectType?.name.orEmpty(), - isEnable = true - ) { - action(ViewEditAction.DefaultObjectType(id = state.id)) - } - Divider(paddingStart = 0.dp, paddingEnd = 0.dp) - } else { - val templateName = if (state.defaultTemplateId == DEFAULT_TEMPLATE_ID_BLANK) { - stringResource(id = R.string.blank) - } else { - state.defaultTemplateName.orEmpty() - } - ColumnItem( - title = stringResource(id = R.string.default_template), - value = templateName, - isEnable = true - ) { - action(ViewEditAction.DefaultTemplate(id = state.id)) - } - Divider(paddingStart = 0.dp, paddingEnd = 0.dp) - } val layoutValue = when (state.layout) { DVViewerType.LIST -> stringResource(id = R.string.view_list) @@ -393,15 +366,11 @@ fun PreviewViewerEditWidget() { showMore = false, isNewMode = true, name = "Artist", - defaultObjectType = ObjectWrapper.Type(buildMap { put("name", "Name") }), filters = listOf(), sorts = emptyList(), layout = DVViewerType.LIST, relations = listOf(), id = "1", - defaultTemplateId = "1", - isDefaultObjectTypeEnabled = false, - defaultTemplateName = null, isActive = false ) ViewerEditWidget(state = state, action = {}) 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 5dfbd407df..3dde3a6edc 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 @@ -300,9 +300,6 @@ class ObjectSetViewModel( if (dataView != null && pair != null) { viewerEditWidgetState.value = pair.first.toViewerEditWidgetState( storeOfRelations = storeOfRelations, - storeOfObjectTypes = storeOfObjectTypes, - isDefaultObjectTypeEnabled = dataView.isChangingDefaultTypeAvailable(), - details = dataView.details, index = pair.second, session = session ) @@ -1543,22 +1540,7 @@ class ObjectSetViewModel( showTypeTemplatesWidget( getViewer = { it?.viewerByIdOrFirst(session.currentViewerId.value) }, createState = { viewer -> - TypeTemplatesWidgetUI.Data.CreateObject( - showWidget = true, - isEditing = false, - viewerId = viewer.id, - isPossibleToChangeType = isPossibleToChangeType == true - ) - } - ) - } - - private fun showTypeTemplatesWidgetForViewerDefaultObject(viewerId: Id) { - val isPossibleToChangeType = stateReducer.state.value.dataViewState()?.isChangingDefaultTypeAvailable() - showTypeTemplatesWidget( - getViewer = { it?.viewerById(viewerId) }, - createState = { viewer -> - TypeTemplatesWidgetUI.Data.DefaultObject( + TypeTemplatesWidgetUI.Data( showWidget = true, isEditing = false, viewerId = viewer.id, @@ -1591,10 +1573,7 @@ class ObjectSetViewModel( when (action) { is TypeTemplatesWidgetUIAction.TypeClick.Item -> { when (uiState) { - is TypeTemplatesWidgetUI.Data.CreateObject -> { - selectedTypeFlow.value = action.type - } - is TypeTemplatesWidgetUI.Data.DefaultObject -> { + is TypeTemplatesWidgetUI.Data -> { selectedTypeFlow.value = action.type proceedWithUpdateViewer( viewerId = uiState.getWidgetViewerId() @@ -1617,10 +1596,7 @@ class ObjectSetViewModel( } is TypeTemplatesWidgetUIAction.TemplateClick -> { when (uiState) { - is TypeTemplatesWidgetUI.Data.CreateObject -> - uiState.onTemplateClick(action.template) - is TypeTemplatesWidgetUI.Data.DefaultObject -> - uiState.onTemplateClick(action.template) + is TypeTemplatesWidgetUI.Data -> uiState.onTemplateClick(action.template) is TypeTemplatesWidgetUI.Init -> Unit } } @@ -1628,7 +1604,7 @@ class ObjectSetViewModel( } } - private suspend fun TypeTemplatesWidgetUI.Data.CreateObject.onTemplateClick( + private suspend fun TypeTemplatesWidgetUI.Data.onTemplateClick( templateView: TemplateView ) { if (moreMenuItem != null) { @@ -1640,6 +1616,14 @@ class ObjectSetViewModel( when (templateView) { is TemplateView.Blank -> { logEvent(ObjectStateAnalyticsEvent.SELECT_TEMPLATE) + proceedWithUpdateViewer( + viewerId = getWidgetViewerId() + ) { + it.copy( + defaultTemplate = templateView.id, + defaultObjectType = templateView.typeId + ) + } proceedWithDataViewObjectCreate( typeChosenBy = templateView.typeId, templateId = templateView.id @@ -1647,6 +1631,14 @@ class ObjectSetViewModel( } is TemplateView.Template -> { logEvent(ObjectStateAnalyticsEvent.SELECT_TEMPLATE) + proceedWithUpdateViewer( + viewerId = getWidgetViewerId() + ) { + it.copy( + defaultTemplate = templateView.id, + defaultObjectType = templateView.typeId + ) + } proceedWithDataViewObjectCreate( typeChosenBy = templateView.typeId, templateId = templateView.id @@ -1660,42 +1652,6 @@ class ObjectSetViewModel( } } - private suspend fun TypeTemplatesWidgetUI.Data.DefaultObject.onTemplateClick( - templateView: TemplateView - ) { - if (moreMenuItem != null) { - typeTemplatesWidgetState.value = hideMoreMenu() - return - } - when (templateView) { - is TemplateView.Blank -> { - proceedWithUpdateViewer( - viewerId = getWidgetViewerId() - ) { - it.copy( - defaultTemplate = templateView.id, - defaultObjectType = templateView.typeId - ) - } - } - is TemplateView.Template -> { - proceedWithUpdateViewer( - viewerId = getWidgetViewerId() - ) { - it.copy( - defaultTemplate = templateView.id, - defaultObjectType = templateView.typeId - ) - } - } - is TemplateView.New -> { - proceedWithCreatingTemplate( - targetObjectType = templateView.targetObjectType - ) - } - } - } - private fun logEvent(event: ObjectStateAnalyticsEvent) { viewModelScope.launch { logEvent( @@ -1727,8 +1683,7 @@ class ObjectSetViewModel( }.collectLatest { types -> typeTemplatesWidgetState.value = when (val uiState = typeTemplatesWidgetState.value) { - is TypeTemplatesWidgetUI.Data.CreateObject -> uiState.copy(objectTypes = types) - is TypeTemplatesWidgetUI.Data.DefaultObject -> uiState.copy(objectTypes = types) + is TypeTemplatesWidgetUI.Data -> uiState.copy(objectTypes = types) is TypeTemplatesWidgetUI.Init -> uiState } } @@ -1753,22 +1708,7 @@ class ObjectSetViewModel( val viewer = dataView.viewerById(viewerId) ?: return@map emptyList() val (type, template) = dataView.getActiveViewTypeAndTemplate(context, viewer, storeOfObjectTypes) when (typeTemplatesWidgetState.value) { - is TypeTemplatesWidgetUI.Data.DefaultObject-> { - if (type?.id == selectedTypeFlow.value?.id) { - processTemplates( - results = templates, - viewerDefObjType = type ?: selectedTypeFlow.value, - viewerDefTemplateId = template ?: selectedTypeFlow.value?.defaultTemplateId - ) - } else { - processTemplates( - results = templates, - viewerDefObjType = selectedTypeFlow.value, - viewerDefTemplateId = selectedTypeFlow.value?.defaultTemplateId - ) - } - } - is TypeTemplatesWidgetUI.Data.CreateObject -> { + is TypeTemplatesWidgetUI.Data -> { if (type?.id == selectedTypeFlow.value?.id) { processTemplates( results = templates, @@ -1787,8 +1727,7 @@ class ObjectSetViewModel( } }.collectLatest { templates -> typeTemplatesWidgetState.value = when(val uistate = typeTemplatesWidgetState.value) { - is TypeTemplatesWidgetUI.Data.CreateObject -> uistate.copy(templates = templates) - is TypeTemplatesWidgetUI.Data.DefaultObject -> uistate.copy(templates = templates) + is TypeTemplatesWidgetUI.Data -> uistate.copy(templates = templates) is TypeTemplatesWidgetUI.Init -> uistate } } @@ -1917,23 +1856,16 @@ class ObjectSetViewModel( private fun proceedWithUpdatingViewDefaultTemplate() { when (val uiState = typeTemplatesWidgetState.value) { - is TypeTemplatesWidgetUI.Data.CreateObject, - is TypeTemplatesWidgetUI.Data.DefaultObject -> { - val templateToSetAsDefault = when (uiState) { - is TypeTemplatesWidgetUI.Data.CreateObject -> uiState.moreMenuItem - is TypeTemplatesWidgetUI.Data.DefaultObject -> uiState.moreMenuItem - else -> null - } - - when (templateToSetAsDefault) { + is TypeTemplatesWidgetUI.Data -> { + when (val templateToSetAsDefault = uiState.moreMenuItem) { is TemplateView.Blank -> { - typeTemplatesWidgetState.value = (uiState as TypeTemplatesWidgetUI.Data).exitEditing() + typeTemplatesWidgetState.value = uiState.exitEditing() proceedWithUpdateViewer(viewerId = uiState.viewerId) { it.copy(defaultTemplate = templateToSetAsDefault.id) } } is TemplateView.Template -> { - typeTemplatesWidgetState.value = (uiState as TypeTemplatesWidgetUI.Data).exitEditing() + typeTemplatesWidgetState.value = uiState.exitEditing() proceedWithUpdateViewer(viewerId = uiState.viewerId) { it.copy(defaultTemplate = templateToSetAsDefault.id) } @@ -2185,11 +2117,6 @@ class ObjectSetViewModel( Timber.d("onViewerEditWidgetAction, action:[$action]") when (action) { ViewEditAction.Dismiss -> { hideViewerEditWidget() } - is ViewEditAction.DefaultObjectType -> { - showTypeTemplatesWidgetForViewerDefaultObject( - viewerId = action.id - ) - } is ViewEditAction.Filters -> { viewersWidgetState.value = viewersWidgetState.value.copy(showWidget = false) hideViewerEditWidget() @@ -2283,12 +2210,6 @@ class ObjectSetViewModel( ) } } - - is ViewEditAction.DefaultTemplate -> { - showTypeTemplatesWidgetForViewerDefaultObject( - viewerId = action.id - ) - } } } diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ViewerEditWidgetUi.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ViewerEditWidgetUi.kt index 2181ebd425..e38467261c 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ViewerEditWidgetUi.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ViewerEditWidgetUi.kt @@ -1,12 +1,8 @@ package com.anytypeio.anytype.presentation.sets -import com.anytypeio.anytype.core_models.Block import com.anytypeio.anytype.core_models.DVViewer import com.anytypeio.anytype.core_models.DVViewerType import com.anytypeio.anytype.core_models.Id -import com.anytypeio.anytype.core_models.ObjectTypeIds -import com.anytypeio.anytype.core_models.ObjectWrapper -import com.anytypeio.anytype.domain.objects.StoreOfObjectTypes import com.anytypeio.anytype.domain.objects.StoreOfRelations @@ -18,14 +14,10 @@ sealed class ViewerEditWidgetUi { val isNewMode: Boolean = false, val id: Id, val name: String, - val defaultObjectType: ObjectWrapper.Type?, - val isDefaultObjectTypeEnabled: Boolean, val layout: DVViewerType?, val relations: List = emptyList(), val filters: List = emptyList(), val sorts: List = emptyList(), - val defaultTemplateId: Id?, - val defaultTemplateName: String?, val isActive: Boolean ) : ViewerEditWidgetUi() } @@ -33,8 +25,6 @@ sealed class ViewerEditWidgetUi { sealed class ViewEditAction { object Dismiss : ViewEditAction() data class UpdateName(val id: Id, val name: String) : ViewEditAction() - data class DefaultObjectType(val id: Id) : ViewEditAction() - data class DefaultTemplate(val id: Id) : ViewEditAction() data class Layout(val id: Id) : ViewEditAction() data class Relations(val id: Id) : ViewEditAction() data class Filters(val id: Id) : ViewEditAction() @@ -55,18 +45,11 @@ suspend fun List.toView( suspend fun DVViewer.toViewerEditWidgetState( storeOfRelations: StoreOfRelations, - storeOfObjectTypes: StoreOfObjectTypes, - isDefaultObjectTypeEnabled: Boolean, - details: Map, index: Int, session: ObjectSetSession ): ViewerEditWidgetUi { val dvViewer = this val isActive = dvViewer.isActiveViewer(index, session) - val viewerDefaultObjectTypeId = dvViewer.defaultObjectType ?: ObjectTypeIds.PAGE - val viewerDefaultTemplateId = dvViewer.defaultTemplate - val defaultObjectType = storeOfObjectTypes.get(viewerDefaultObjectTypeId) - val defaultTemplateName = details[viewerDefaultTemplateId]?.name return ViewerEditWidgetUi.Data( showWidget = true, id = dvViewer.id, @@ -75,10 +58,6 @@ suspend fun DVViewer.toViewerEditWidgetState( filters = dvViewer.filters.toView(storeOfRelations) { it.relation }, relations = dvViewer.viewerRelations.toView(storeOfRelations) { it.key }, layout = dvViewer.type, - defaultObjectType = defaultObjectType, - isDefaultObjectTypeEnabled = isDefaultObjectTypeEnabled, - defaultTemplateId = viewerDefaultTemplateId, - defaultTemplateName = defaultTemplateName, isActive = isActive ) } diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/TypeTemplatesWidgetUI.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/TypeTemplatesWidgetUI.kt index 75e3e5865d..dda34981ce 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/TypeTemplatesWidgetUI.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/TypeTemplatesWidgetUI.kt @@ -14,34 +14,15 @@ sealed class TypeTemplatesWidgetUI { override val isEditing: Boolean = false ) : TypeTemplatesWidgetUI() - sealed class Data : TypeTemplatesWidgetUI() { - - abstract val moreMenuItem: TemplateView? - abstract val templates: List - abstract val objectTypes: List - abstract val isPossibleToChangeType: Boolean - abstract val viewerId: Id - - data class DefaultObject( - override val showWidget: Boolean, - override val isEditing: Boolean, - override val moreMenuItem: TemplateView? = null, - override val templates: List = emptyList(), - override val objectTypes: List = emptyList(), - override val viewerId: Id, - override val isPossibleToChangeType: Boolean - ) : Data() - - data class CreateObject( - override val showWidget: Boolean, - override val isEditing: Boolean, - override val moreMenuItem: TemplateView? = null, - override val templates: List = emptyList(), - override val objectTypes: List = emptyList(), - override val viewerId: Id, - override val isPossibleToChangeType: Boolean - ) : Data() - } + data class Data( + override val showWidget: Boolean, + override val isEditing: Boolean, + val moreMenuItem: TemplateView? = null, + val templates: List = emptyList(), + val objectTypes: List = emptyList(), + val viewerId: Id, + val isPossibleToChangeType: Boolean + ) : TypeTemplatesWidgetUI() fun getWidgetViewerId(): Id? = if (this is Data) viewerId else null } @@ -57,29 +38,17 @@ sealed class TypeTemplatesWidgetUIAction { } fun TypeTemplatesWidgetUI.Data.enterEditing(): TypeTemplatesWidgetUI.Data { - return when (this) { - is TypeTemplatesWidgetUI.Data.DefaultObject -> copy(isEditing = true) - is TypeTemplatesWidgetUI.Data.CreateObject -> copy(isEditing = true) - } + return this.copy(isEditing = true) } fun TypeTemplatesWidgetUI.Data.exitEditing(): TypeTemplatesWidgetUI.Data { - return when (this) { - is TypeTemplatesWidgetUI.Data.DefaultObject -> copy(isEditing = false, moreMenuItem = null) - is TypeTemplatesWidgetUI.Data.CreateObject -> copy(isEditing = false, moreMenuItem = null) - } + return this.copy(isEditing = false, moreMenuItem = null) } fun TypeTemplatesWidgetUI.Data.showMoreMenu(item: TemplateView): TypeTemplatesWidgetUI.Data { - return when (this) { - is TypeTemplatesWidgetUI.Data.DefaultObject -> copy(moreMenuItem = item) - is TypeTemplatesWidgetUI.Data.CreateObject -> copy(moreMenuItem = item) - } + return this.copy(moreMenuItem = item) } fun TypeTemplatesWidgetUI.Data.hideMoreMenu(): TypeTemplatesWidgetUI.Data { - return when (this) { - is TypeTemplatesWidgetUI.Data.DefaultObject -> copy(moreMenuItem = null) - is TypeTemplatesWidgetUI.Data.CreateObject -> copy(moreMenuItem = null) - } + return this.copy(moreMenuItem = null) }