Skip to content

Commit

Permalink
DROID-3347 fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
konstantiniiv committed Feb 24, 2025
1 parent b0a304e commit 8317bc9
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,27 @@ interface ObjectMenuOptionsProvider {
data class Options(
val hasIcon: Boolean,
val hasCover: Boolean,
val hasLayout: Boolean,
val hasRelations: Boolean,
val hasDiagnosticsVisibility: Boolean,
val hasHistory: Boolean
val hasHistory: Boolean,
val hasDescriptionShow: Boolean
) {
companion object {
val ALL = Options(
hasIcon = true,
hasCover = true,
hasLayout = true,
hasRelations = true,
hasDiagnosticsVisibility = true,
hasHistory = true
hasHistory = true,
hasDescriptionShow = true
)
val NONE = Options(
hasIcon = false,
hasCover = false,
hasLayout = false,
hasRelations = false,
hasDiagnosticsVisibility = false,
hasHistory = false
hasHistory = false,
hasDescriptionShow = false
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.anytypeio.anytype.core_models.ObjectType
import com.anytypeio.anytype.core_models.SupportedLayouts
import com.anytypeio.anytype.core_models.restrictions.ObjectRestriction
import com.anytypeio.anytype.core_models.ObjectViewDetails
import com.anytypeio.anytype.core_models.Relations
import com.anytypeio.anytype.presentation.extension.getObject
import com.anytypeio.anytype.presentation.objects.menu.ObjectMenuOptionsProvider.Options
import kotlinx.coroutines.flow.Flow
Expand All @@ -28,82 +29,101 @@ class ObjectMenuOptionsProviderImpl(
details.getObject(ctx)?.layout
}

private fun observeFeatureFieldsContainsDescription(ctx: Id): Flow<Boolean> =
objectViewDetailsFlow
.filter { details ->
details.details.containsKey(ctx).also { isValuePresent ->
if (!isValuePresent) Timber.w("Details missing for object: $ctx")
}
}
.map { details ->
val featuredRelations = details.getObject(ctx)?.featuredRelations
return@map featuredRelations?.any { it == Relations.DESCRIPTION } == true
}

override fun provide(ctx: Id, isLocked: Boolean, isReadOnly: Boolean): Flow<Options> {
return combine(observeLayout(ctx), restrictions) { layout, restrictions ->
return combine(
observeLayout(ctx),
observeFeatureFieldsContainsDescription(ctx)
) { layout, featuredContainsDescription ->
createOptions(
layout = layout,
restrictions = restrictions,
isLocked = isLocked,
isReadOnly = isReadOnly
isReadOnly = isReadOnly,
featuredContainsDescription = featuredContainsDescription
)
}
}

private fun createOptions(
layout: ObjectType.Layout?,
restrictions: List<ObjectRestriction>,
isLocked: Boolean,
isReadOnly: Boolean
isReadOnly: Boolean,
featuredContainsDescription: Boolean
): Options {
val hasIcon = !isLocked && !isReadOnly
val hasCover = !isLocked && !isReadOnly
val hasLayout = !isLocked && !restrictions.contains(ObjectRestriction.LAYOUT_CHANGE) && !isReadOnly
val options = if (layout != null) {
when (layout) {
ObjectType.Layout.PARTICIPANT -> Options.ALL.copy(
hasIcon = false,
hasCover = false,
hasLayout = false,
hasDiagnosticsVisibility = true,
hasHistory = false,
hasRelations = false
hasRelations = false,
hasDescriptionShow = !featuredContainsDescription
)

in SupportedLayouts.systemLayouts -> Options.NONE
in SupportedLayouts.fileLayouts -> {
Options.ALL.copy(
hasIcon = false,
hasCover = false,
hasLayout = false,
hasDiagnosticsVisibility = true,
hasHistory = false
hasHistory = false,
hasDescriptionShow = !featuredContainsDescription
)
}

ObjectType.Layout.SET,
ObjectType.Layout.COLLECTION -> {
Options.ALL.copy(
hasIcon = hasIcon,
hasCover = hasCover,
hasLayout = false,
hasDiagnosticsVisibility = true,
hasHistory = !isLocked && !isReadOnly
hasHistory = !isLocked && !isReadOnly,
hasDescriptionShow = !featuredContainsDescription
)
}

ObjectType.Layout.BASIC,
ObjectType.Layout.PROFILE,
ObjectType.Layout.BOOKMARK -> Options.ALL.copy(
hasIcon = hasIcon,
hasCover = hasCover,
hasLayout = hasLayout,
hasDiagnosticsVisibility = true,
hasHistory = !isLocked && !isReadOnly
hasHistory = !isLocked && !isReadOnly,
hasDescriptionShow = !featuredContainsDescription
)

ObjectType.Layout.TODO -> Options(
hasIcon = false,
hasCover = hasCover,
hasLayout = hasLayout,
hasRelations = true,
hasDiagnosticsVisibility = true,
hasHistory = !isLocked && !isReadOnly
hasHistory = !isLocked && !isReadOnly,
hasDescriptionShow = !featuredContainsDescription
)

ObjectType.Layout.NOTE -> Options(
hasIcon = false,
hasCover = false,
hasLayout = hasLayout,
hasRelations = true,
hasDiagnosticsVisibility = true,
hasHistory = !isLocked && !isReadOnly
hasHistory = !isLocked && !isReadOnly,
hasDescriptionShow = !featuredContainsDescription
)

else -> Options.NONE.copy(
hasDiagnosticsVisibility = true
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@ import com.anytypeio.anytype.domain.`object`.DuplicateObject
import com.anytypeio.anytype.domain.objects.SetObjectListIsArchived
import com.anytypeio.anytype.domain.page.AddBackLinkToObject
import com.anytypeio.anytype.domain.primitives.FieldParser
import com.anytypeio.anytype.domain.relations.AddToFeaturedRelations
import com.anytypeio.anytype.domain.relations.RemoveFromFeaturedRelations
import com.anytypeio.anytype.domain.widgets.CreateWidget
import com.anytypeio.anytype.domain.workspace.SpaceManager
import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate
Expand All @@ -49,6 +47,7 @@ import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.launch
import timber.log.Timber

Expand Down Expand Up @@ -125,10 +124,10 @@ abstract class ObjectMenuViewModelBase(
isLocked = isLocked,
isReadOnly = isReadOnly
)
val isDescriptionVisible = !isLocked && !isReadOnly
jobs += viewModelScope.launch {
menuOptionsProvider
.provide(ctx = ctx, isLocked = isLocked, isReadOnly = isReadOnly)
.distinctUntilChanged()
.collect(_options)
}
}
Expand Down

0 comments on commit 8317bc9

Please sign in to comment.