Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DROID-2538 Relations | Fix | Use object restriction for relation list #1296

Draft
wants to merge 5 commits into
base: release/0-30-0
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ import com.anytypeio.anytype.presentation.editor.render.DefaultBlockViewRenderer
import com.anytypeio.anytype.presentation.editor.selection.SelectionStateHolder
import com.anytypeio.anytype.presentation.editor.toggle.ToggleStateHolder
import com.anytypeio.anytype.presentation.objects.LockedStateProvider
import com.anytypeio.anytype.presentation.objects.ObjectRestrictionProvider
import com.anytypeio.anytype.presentation.relations.providers.DefaultObjectRelationProvider
import com.anytypeio.anytype.presentation.relations.providers.DefaultObjectValueProvider
import com.anytypeio.anytype.presentation.relations.providers.ObjectDetailProvider
Expand Down Expand Up @@ -218,6 +219,11 @@ object EditorSessionModule {
@PerScreen
fun provideStorage(): Editor.Storage = Editor.Storage()

@JvmStatic
@Provides
@PerScreen
fun provideRestriction(storage: Editor.Storage): ObjectRestrictionProvider = storage

@JvmStatic
@Provides
@PerScreen
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import com.anytypeio.anytype.domain.relations.AddToFeaturedRelations
import com.anytypeio.anytype.domain.relations.DeleteRelationFromObject
import com.anytypeio.anytype.domain.relations.RemoveFromFeaturedRelations
import com.anytypeio.anytype.presentation.objects.LockedStateProvider
import com.anytypeio.anytype.presentation.objects.ObjectRestrictionProvider
import com.anytypeio.anytype.presentation.relations.ObjectRelationListViewModelFactory
import com.anytypeio.anytype.presentation.relations.providers.RelationListProvider
import com.anytypeio.anytype.presentation.util.Dispatcher
Expand Down Expand Up @@ -49,7 +50,8 @@ object ObjectRelationListModule {
deleteRelationFromObject: DeleteRelationFromObject,
analytics: Analytics,
storeOfRelations: StoreOfRelations,
addRelationToObject: AddRelationToObject
addRelationToObject: AddRelationToObject,
restrictions: ObjectRestrictionProvider
): ObjectRelationListViewModelFactory {
return ObjectRelationListViewModelFactory(
lockedStateProvider = lockedStateProvider,
Expand All @@ -62,7 +64,8 @@ object ObjectRelationListModule {
deleteRelationFromObject = deleteRelationFromObject,
analytics = analytics,
storeOfRelations = storeOfRelations,
addRelationToObject = addRelationToObject
addRelationToObject = addRelationToObject,
restrictions = restrictions
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,10 @@ import com.anytypeio.anytype.domain.workspace.SpaceManager
import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate
import com.anytypeio.anytype.presentation.common.Action
import com.anytypeio.anytype.presentation.common.Delegator
import com.anytypeio.anytype.presentation.editor.Editor
import com.anytypeio.anytype.presentation.editor.cover.CoverImageHashProvider
import com.anytypeio.anytype.presentation.objects.LockedStateProvider
import com.anytypeio.anytype.presentation.objects.ObjectRestrictionProvider
import com.anytypeio.anytype.presentation.relations.providers.DataViewObjectRelationProvider
import com.anytypeio.anytype.presentation.relations.providers.DataViewObjectValueProvider
import com.anytypeio.anytype.presentation.relations.providers.ObjectDetailProvider
Expand Down Expand Up @@ -406,6 +408,11 @@ object ObjectSetModule {
@PerScreen
fun provideObjectStateReducer(): ObjectStateReducer = DefaultObjectStateReducer()

@JvmStatic
@Provides
@PerScreen
fun provideRestriction(reducer: ObjectStateReducer): ObjectRestrictionProvider = reducer

@JvmStatic
@Provides
@PerScreen
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1023,20 +1023,6 @@ open class EditorFragment : NavigationFragment<FragmentEditorBinding>(R.layout.f
)
.showChildFragment()
}
is Command.OpenObjectRelationScreen.RelationList -> {
hideKeyboard()
findNavController().safeNavigate(
R.id.pageScreen,
R.id.objectRelationListScreen,
bundleOf(
ObjectRelationListFragment.ARG_CTX to command.ctx,
ObjectRelationListFragment.ARG_SPACE to space,
ObjectRelationListFragment.ARG_TARGET to command.target,
ObjectRelationListFragment.ARG_LOCKED to command.isLocked,
ObjectRelationListFragment.ARG_MODE to ObjectRelationListFragment.MODE_LIST,
)
)
}
is Command.OpenObjectRelationScreen.Value.Default -> {
hideKeyboard()
val fr = RelationValueFragment.new(
Expand Down Expand Up @@ -2024,10 +2010,6 @@ open class EditorFragment : NavigationFragment<FragmentEditorBinding>(R.layout.f
vm.onMovedToBin()
}

override fun onSearchOnPageClicked() {
vm.onEnterSearchModeClicked()
}

override fun onSetTextBlockValue() {
vm.onSetTextBlockValue()
}
Expand All @@ -2036,26 +2018,6 @@ open class EditorFragment : NavigationFragment<FragmentEditorBinding>(R.layout.f
vm.onMentionClicked(target = target)
}

override fun onUndoRedoClicked() {
vm.onUndoRedoActionClicked()
}

override fun onDocRelationsClicked() {
vm.onDocRelationsClicked()
}

override fun onAddCoverClicked() {
vm.onAddCoverClicked()
}

override fun onSetIconClicked() {
vm.onSetObjectIconClicked()
}

override fun onLayoutClicked() {
vm.onLayoutClicked()
}

override fun onTextValueChanged(ctx: Id, text: String, objectId: Id, relationKey: Key) {
vm.onRelationTextValueChanged(
ctx = ctx,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -342,12 +342,6 @@ abstract class ObjectMenuBaseFragment :

interface DocumentMenuActionReceiver {
fun onMoveToBinSuccess()
fun onSearchOnPageClicked()
fun onDocRelationsClicked()
fun onAddCoverClicked()
fun onSetIconClicked()
fun onLayoutClicked()
fun onUndoRedoClicked()
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ class ObjectMenuFragment : ObjectMenuBaseFragment() {
}

companion object {

fun new(
ctx: Id,
space: Id,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_models.Id
import com.anytypeio.anytype.core_models.Key
import com.anytypeio.anytype.core_models.primitives.SpaceId
import com.anytypeio.anytype.core_models.restrictions.ObjectRestriction
import com.anytypeio.anytype.core_ui.features.relations.DocumentRelationAdapter
import com.anytypeio.anytype.core_ui.reactive.textChanges
import com.anytypeio.anytype.core_utils.ext.arg
Expand Down Expand Up @@ -188,6 +189,13 @@ open class ObjectRelationListFragment : BaseBottomSheetFragment<FragmentRelation
override fun onStart() {
jobs += lifecycleScope.subscribe(vm.commands) { command -> execute(command) }
jobs += lifecycleScope.subscribe(vm.toasts) { toast(it) }
jobs += lifecycleScope.subscribe(vm.restrictions) { restrictions ->
if (restrictions.contains(ObjectRestriction.RELATIONS) || restrictions.contains(ObjectRestriction.DETAILS)) {
binding.topToolbar.gone()
} else {
binding.topToolbar.visible()
}
}
jobs += lifecycleScope.subscribe(vm.isEditMode) { isEditMode ->
if (isEditMode) {
binding.btnEditOrDone.setText(R.string.done)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@ package com.anytypeio.anytype.presentation.editor
import com.anytypeio.anytype.core_models.Block
import com.anytypeio.anytype.core_models.Document
import com.anytypeio.anytype.core_models.Id
import com.anytypeio.anytype.core_models.restrictions.ObjectRestriction
import com.anytypeio.anytype.domain.editor.Editor
import com.anytypeio.anytype.domain.editor.Editor.Focus
import com.anytypeio.anytype.presentation.editor.editor.Proxy
import com.anytypeio.anytype.presentation.editor.editor.Store
import com.anytypeio.anytype.presentation.editor.editor.actions.ActionItemType
import com.anytypeio.anytype.presentation.editor.editor.model.BlockView
import com.anytypeio.anytype.presentation.editor.selection.SelectionStateHolder
import com.anytypeio.anytype.presentation.objects.ObjectRestrictionProvider
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow

Expand Down Expand Up @@ -95,7 +97,7 @@ interface Editor {
) : Mode()
}

class Storage {
class Storage : ObjectRestrictionProvider {
val document: DocumentProvider = DocumentProvider.Default()
val views: Store<List<BlockView>> = Store.Screen()
val focus: Store<Focus> = Store.Focus()
Expand All @@ -106,6 +108,10 @@ interface Editor {
val textSelection: Store<Editor.TextSelection> = Store.TextSelection()
val objectRestrictions: Store.ObjectRestrictions = Store.ObjectRestrictions()
val relationLinks: Store.RelationLinks = Store.RelationLinks()

override fun provide(): List<ObjectRestriction> {
return objectRestrictions.current()
}
}

class Proxer(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2190,17 +2190,6 @@ class EditorViewModel(
viewModelScope.launch { refresh() }
}

fun onDocRelationsClicked() {
Timber.d("onDocRelationsClicked, ")
dispatch(
Command.OpenObjectRelationScreen.RelationList(
ctx = context,
target = null,
isLocked = mode == EditorMode.Locked
)
)
}

fun onSearchToolbarEvent(event: SearchInDocEvent) {
Timber.d("onSearchToolbarEvent, event:[$event]")
if (mode !is EditorMode.Search) return
Expand Down Expand Up @@ -3330,25 +3319,6 @@ class EditorViewModel(
}
}

fun onSetObjectIconClicked() {
viewModelScope.launch {
val obj = orchestrator.stores.details.getAsObject(context)
val space = obj?.spaceId
if (space != null) {
dispatch(Command.SetObjectIcon(ctx = context, space = space))
} else {
Timber.e("Space not found").also {
sendToast("Space not found")
}
}
}
}

fun onLayoutClicked() {
Timber.d("onLayoutClicked, ")
dispatch(Command.OpenObjectLayout(context))
}

fun onLayoutDialogDismissed() {
Timber.d("onLayoutDialogDismissed, ")
proceedWithOpeningObjectMenu()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.anytypeio.anytype.presentation.editor.editor
import com.anytypeio.anytype.core_models.Id
import com.anytypeio.anytype.core_models.Key
import com.anytypeio.anytype.core_models.Url
import com.anytypeio.anytype.core_models.restrictions.ObjectRestriction
import com.anytypeio.anytype.core_utils.ext.Mimetype
import com.anytypeio.anytype.presentation.objects.ObjectIcon

Expand Down Expand Up @@ -82,12 +83,6 @@ sealed class Command {
}

sealed class OpenObjectRelationScreen : Command() {
data class RelationList(
val ctx: String,
val target: String?,
val isLocked: Boolean
) : OpenObjectRelationScreen()

data class RelationAdd(val ctx: String, val target: String) : OpenObjectRelationScreen()
sealed class Value : OpenObjectRelationScreen() {
abstract val isReadOnlyValue: Boolean
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.anytypeio.anytype.presentation.objects

import com.anytypeio.anytype.core_models.restrictions.ObjectRestriction

interface ObjectRestrictionProvider {
fun provide() : List<ObjectRestriction>
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import com.anytypeio.anytype.domain.relations.AddToFeaturedRelations
import com.anytypeio.anytype.domain.relations.DeleteRelationFromObject
import com.anytypeio.anytype.domain.relations.RemoveFromFeaturedRelations
import com.anytypeio.anytype.presentation.objects.LockedStateProvider
import com.anytypeio.anytype.presentation.objects.ObjectRestrictionProvider
import com.anytypeio.anytype.presentation.relations.providers.RelationListProvider
import com.anytypeio.anytype.presentation.util.Dispatcher

Expand All @@ -26,7 +27,8 @@ class ObjectRelationListViewModelFactory(
private val deleteRelationFromObject: DeleteRelationFromObject,
private val analytics: Analytics,
private val storeOfRelations: StoreOfRelations,
private val addRelationToObject: AddRelationToObject
private val addRelationToObject: AddRelationToObject,
private val restrictions: ObjectRestrictionProvider
) : ViewModelProvider.Factory {

@Suppress("UNCHECKED_CAST")
Expand All @@ -42,7 +44,8 @@ class ObjectRelationListViewModelFactory(
deleteRelationFromObject = deleteRelationFromObject,
analytics = analytics,
storeOfRelations = storeOfRelations,
addRelationToObject = addRelationToObject
addRelationToObject = addRelationToObject,
objectRestrictionProvider = restrictions
) as T
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import com.anytypeio.anytype.core_models.Payload
import com.anytypeio.anytype.core_models.RelationFormat
import com.anytypeio.anytype.core_models.RelationLink
import com.anytypeio.anytype.core_models.ext.mapToObjectWrapperType
import com.anytypeio.anytype.core_models.restrictions.ObjectRestriction
import com.anytypeio.anytype.core_utils.diff.DefaultObjectDiffIdentifier
import com.anytypeio.anytype.domain.misc.UrlBuilder
import com.anytypeio.anytype.domain.`object`.UpdateDetail
Expand All @@ -27,6 +28,7 @@ import com.anytypeio.anytype.presentation.common.BaseViewModel
import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationDeleteEvent
import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationValueEvent
import com.anytypeio.anytype.presentation.objects.LockedStateProvider
import com.anytypeio.anytype.presentation.objects.ObjectRestrictionProvider
import com.anytypeio.anytype.presentation.objects.getProperType
import com.anytypeio.anytype.presentation.relations.model.RelationOperationError
import com.anytypeio.anytype.presentation.relations.providers.RelationListProvider
Expand All @@ -41,6 +43,7 @@ import timber.log.Timber

class RelationListViewModel(
private val relationListProvider: RelationListProvider,
private val objectRestrictionProvider: ObjectRestrictionProvider,
private val lockedStateProvider: LockedStateProvider,
private val urlBuilder: UrlBuilder,
private val dispatcher: Dispatcher<Payload>,
Expand All @@ -60,6 +63,7 @@ class RelationListViewModel(
private val isInAddMode = MutableStateFlow(false)
val commands = MutableSharedFlow<Command>(replay = 0)
val views = MutableStateFlow<List<Model>>(emptyList())
val restrictions = MutableStateFlow(objectRestrictionProvider.provide())

fun onStartListMode(ctx: Id) {
Timber.d("onStartListMode, ctx: $ctx")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.anytypeio.anytype.presentation.sets.state

import com.anytypeio.anytype.core_models.Event
import com.anytypeio.anytype.core_models.restrictions.ObjectRestriction
import com.anytypeio.anytype.presentation.objects.ObjectRestrictionProvider
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharedFlow

interface ObjectStateReducer {
interface ObjectStateReducer : ObjectRestrictionProvider {

val state: MutableStateFlow<ObjectState>
val effects: SharedFlow<List<StateSideEffect>>
Expand All @@ -13,4 +15,13 @@ interface ObjectStateReducer {
suspend fun dispatch(events: List<Event>)
fun reduce(state: ObjectState, events: List<Event>): DefaultObjectStateReducer.Transformation
fun clear()

override fun provide(): List<ObjectRestriction> {
return when(val value = state.value) {
is ObjectState.DataView.Collection -> value.objectRestrictions
is ObjectState.DataView.Set -> value.objectRestrictions
ObjectState.ErrorLayout -> emptyList()
ObjectState.Init -> emptyList()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ fun List<Block>.parseWidgets(
}

Block.Content.Widget.Layout.VIEW -> {

// Do nothing.
}
}
}
Expand Down
Loading