From 8ba930bccf7a17c4fc9a7fa17ce5345f6c83cb7d Mon Sep 17 00:00:00 2001 From: Konstantin Ivanov <54908981+konstantiniiv@users.noreply.github.com> Date: Mon, 16 Oct 2023 12:52:01 +0200 Subject: [PATCH] DROID-1617 Templates | Fix | Edit-view-menu fixes (#436) --- .../core_ui/widgets/dv/ViewerEditMoreMenu.kt | 28 ++++++------- .../core_ui/widgets/dv/ViewerEditWidget.kt | 3 +- .../presentation/sets/ObjectSetExtension.kt | 39 +++++++------------ .../presentation/sets/ObjectSetViewModel.kt | 12 +++--- .../presentation/sets/ViewerEditWidgetUi.kt | 11 ++++-- 5 files changed, 45 insertions(+), 48 deletions(-) diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/dv/ViewerEditMoreMenu.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/dv/ViewerEditMoreMenu.kt index 0949850970..3974db0a0a 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/dv/ViewerEditMoreMenu.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/dv/ViewerEditMoreMenu.kt @@ -63,19 +63,21 @@ fun ViewerEditMoreMenu( action(ViewEditAction.Duplicate(currentState.id)) } ) - Divider(paddingEnd = 0.dp, paddingStart = 0.dp) - Text( - text = stringResource(R.string.delete_view), - style = BodyCallout, - color = colorResource(id = R.color.palette_system_red), - modifier = Modifier - .height(44.dp) - .fillMaxWidth() - .padding(start = 16.dp, top = 11.dp) - .noRippleThrottledClickable { - action(ViewEditAction.Delete(currentState.id)) - } - ) + if (!currentState.isActive) { + Divider(paddingEnd = 0.dp, paddingStart = 0.dp) + Text( + text = stringResource(R.string.delete_view), + style = BodyCallout, + color = colorResource(id = R.color.palette_system_red), + modifier = Modifier + .height(44.dp) + .fillMaxWidth() + .padding(start = 16.dp, top = 11.dp) + .noRippleThrottledClickable { + action(ViewEditAction.Delete(currentState.id)) + } + ) + } } } } \ No newline at end of file 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 eb782965ac..159989efae 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 @@ -393,7 +393,8 @@ fun PreviewViewerEditWidget() { id = "1", defaultTemplateId = "1", isDefaultObjectTypeEnabled = false, - defaultTemplateName = null + defaultTemplateName = null, + isActive = false ) ViewerEditWidget(state = state, action = {}) } \ No newline at end of file diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ObjectSetExtension.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ObjectSetExtension.kt index 24f3214eaa..2b6098a079 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ObjectSetExtension.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ObjectSetExtension.kt @@ -30,7 +30,6 @@ import com.anytypeio.anytype.presentation.editor.cover.CoverImageHashProvider import com.anytypeio.anytype.presentation.editor.editor.model.BlockView import com.anytypeio.anytype.presentation.objects.ObjectIcon import com.anytypeio.anytype.presentation.objects.getProperName -import com.anytypeio.anytype.presentation.objects.isTemplatesAllowed import com.anytypeio.anytype.presentation.relations.BasicObjectCoverWrapper import com.anytypeio.anytype.presentation.relations.ObjectRelationView import com.anytypeio.anytype.presentation.relations.ObjectSetConfig.ID_KEY @@ -249,6 +248,16 @@ fun ObjectState.DataView.viewerById(currentViewerId: String?): DVViewer? { return dataViewContent.viewers.find { it.id == currentViewerId } } +fun ObjectState.DataView.viewerAndIndexById(currentViewerId: String?): Pair? { + if (!isInitialized) return null + val index = dataViewContent.viewers.indexOfFirst { it.id == currentViewerId } + return if (index != -1) { + Pair(dataViewContent.viewers[index], index) + } else { + null + } +} + fun ObjectState.DataView.Collection.getObjectOrderIds(currentViewerId: String): List { return dataViewContent.objectOrders.find { it.view == currentViewerId }?.ids ?: emptyList() } @@ -510,7 +519,7 @@ private suspend fun mapViewers( name = viewer.name, type = viewer.type, isUnsupported = viewer.type == VIEW_TYPE_UNSUPPORTED, - isActive = isActiveViewer(index, viewer, session), + isActive = viewer.isActiveViewer(index, session), defaultObjectType = defaultObjectType.invoke(viewer), relations = viewer.viewerRelations.toView(storeOfRelations) { it.key }, sorts = viewer.sorts.toView(storeOfRelations) { it.relationKey }, @@ -520,36 +529,14 @@ private suspend fun mapViewers( } } -private fun isActiveViewer(index: Int, viewer: DVViewer, session: ObjectSetSession): Boolean { +fun DVViewer.isActiveViewer(index: Int, session: ObjectSetSession): Boolean { return if (session.currentViewerId.value != null) { - viewer.id == session.currentViewerId.value + id == session.currentViewerId.value } else { index == 0 } } -suspend fun List.isActiveWithTemplates(storeOfObjectTypes: StoreOfObjectTypes): Boolean { - val activeViewer = firstOrNull { it.isActive } - val viewerDefaultObjectTypeId = activeViewer?.defaultObjectType ?: return false - val viewerDefaultObjectType = storeOfObjectTypes.get(viewerDefaultObjectTypeId) ?: return false - return viewerDefaultObjectType.isTemplatesAllowed() -} - -suspend fun DVViewer.getProperTemplateId( - storeOfObjectTypes: StoreOfObjectTypes -): Id? { - val defaultObjectTypeId = defaultObjectType - return if (defaultObjectTypeId != null) { - if (defaultTemplate != null) { - defaultTemplate - } else { - storeOfObjectTypes.get(defaultObjectTypeId)?.defaultTemplateId - } - } else { - null - } -} - suspend fun ObjectState.DataView.getActiveViewTypeAndTemplate( ctx: Id, activeView: DVViewer?, 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 3b1ac23565..e1533cd053 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 @@ -296,16 +296,18 @@ class ObjectSetViewModel( ) { viewId, state -> if (viewId != null) { val dataView = state.dataViewState() - val viewer = dataView?.viewerById(viewId) - if (dataView != null && viewer != null) { - viewerEditWidgetState.value = viewer.toViewerEditWidgetState( + val pair = dataView?.viewerAndIndexById(viewId) + if (dataView != null && pair != null) { + viewerEditWidgetState.value = pair.first.toViewerEditWidgetState( storeOfRelations = storeOfRelations, storeOfObjectTypes = storeOfObjectTypes, isDefaultObjectTypeEnabled = dataView.isChangingDefaultTypeAvailable(), - details = dataView.details + details = dataView.details, + index = pair.second, + session = session ) viewerLayoutWidgetState.value = viewerLayoutWidgetState.value.updateState( - viewer = viewer, + viewer = pair.first, storeOfRelations = storeOfRelations ) } else { 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 7c770acf38..2181ebd425 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 @@ -25,7 +25,8 @@ sealed class ViewerEditWidgetUi { val filters: List = emptyList(), val sorts: List = emptyList(), val defaultTemplateId: Id?, - val defaultTemplateName: String? + val defaultTemplateName: String?, + val isActive: Boolean ) : ViewerEditWidgetUi() } @@ -56,9 +57,12 @@ suspend fun DVViewer.toViewerEditWidgetState( storeOfRelations: StoreOfRelations, storeOfObjectTypes: StoreOfObjectTypes, isDefaultObjectTypeEnabled: Boolean, - details: Map + 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) @@ -74,7 +78,8 @@ suspend fun DVViewer.toViewerEditWidgetState( defaultObjectType = defaultObjectType, isDefaultObjectTypeEnabled = isDefaultObjectTypeEnabled, defaultTemplateId = viewerDefaultTemplateId, - defaultTemplateName = defaultTemplateName + defaultTemplateName = defaultTemplateName, + isActive = isActive ) }