1
0
Fork 0
mirror of https://github.com/anyproto/anytype-kotlin.git synced 2025-06-08 05:47:05 +09:00

DROID-1714 Sets or Collections | Tech | Propagate view id when working with given data view's relations and cards settings (#360)

This commit is contained in:
Konstantin Ivanov 2023-09-11 11:53:37 +02:00 committed by GitHub
parent d11fd8838f
commit 55ca0102b1
Signed by: github
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 93 additions and 85 deletions

View file

@ -7,7 +7,6 @@ import com.anytypeio.anytype.domain.dataview.interactor.UpdateDataViewViewer
import com.anytypeio.anytype.domain.objects.StoreOfRelations
import com.anytypeio.anytype.domain.relations.DeleteRelationFromDataView
import com.anytypeio.anytype.presentation.relations.ObjectSetSettingsViewModel
import com.anytypeio.anytype.presentation.sets.ObjectSetSession
import com.anytypeio.anytype.presentation.sets.state.ObjectState
import com.anytypeio.anytype.presentation.util.Dispatcher
import com.anytypeio.anytype.ui.sets.modals.ObjectSetSettingsFragment
@ -36,7 +35,6 @@ object ObjectSetSettingsModule {
@PerModal
fun provideViewModelFactory(
state: MutableStateFlow<ObjectState>,
session: ObjectSetSession,
dispatcher: Dispatcher<Payload>,
updateDataViewViewer: UpdateDataViewViewer,
store: StoreOfRelations,
@ -44,7 +42,6 @@ object ObjectSetSettingsModule {
deleteRelationFromDataView: DeleteRelationFromDataView,
): ObjectSetSettingsViewModel.Factory = ObjectSetSettingsViewModel.Factory(
objectState = state,
session = session,
dispatcher = dispatcher,
updateDataViewViewer = updateDataViewViewer,
analytics = analytics,

View file

@ -16,7 +16,6 @@ import com.anytypeio.anytype.presentation.relations.RelationAddToDataViewViewMod
import com.anytypeio.anytype.presentation.relations.RelationAddToObjectViewModel
import com.anytypeio.anytype.presentation.relations.providers.ObjectRelationProvider
import com.anytypeio.anytype.presentation.relations.providers.ObjectRelationProvider.Companion.INTRINSIC_PROVIDER_TYPE
import com.anytypeio.anytype.presentation.sets.ObjectSetSession
import com.anytypeio.anytype.presentation.sets.state.ObjectState
import com.anytypeio.anytype.presentation.util.Dispatcher
import com.anytypeio.anytype.ui.relations.RelationAddToDataViewFragment
@ -109,7 +108,6 @@ object RelationAddToDataViewModule {
addRelationToDataView: AddRelationToDataView,
dispatcher: Dispatcher<Payload>,
state: MutableStateFlow<ObjectState>,
session: ObjectSetSession,
updateDataViewViewer: UpdateDataViewViewer,
analytics: Analytics,
@Named(INTRINSIC_PROVIDER_TYPE) relationsProvider: ObjectRelationProvider,
@ -121,7 +119,6 @@ object RelationAddToDataViewModule {
addRelationToDataView = addRelationToDataView,
dispatcher = dispatcher,
state = state,
session = session,
updateDataViewViewer = updateDataViewViewer,
analytics = analytics,
relationsProvider = relationsProvider,

View file

@ -16,7 +16,6 @@ import com.anytypeio.anytype.presentation.relations.RelationCreateFromScratchFor
import com.anytypeio.anytype.presentation.relations.RelationCreateFromScratchForObjectViewModel
import com.anytypeio.anytype.presentation.relations.model.CreateFromScratchState
import com.anytypeio.anytype.presentation.relations.model.StateHolder
import com.anytypeio.anytype.presentation.sets.ObjectSetSession
import com.anytypeio.anytype.presentation.sets.state.ObjectState
import com.anytypeio.anytype.presentation.util.Dispatcher
import com.anytypeio.anytype.ui.relations.RelationCreateFromScratchForDataViewFragment
@ -108,7 +107,6 @@ object RelationCreateFromScratchForDataViewModule {
@CreateFromScratch
fun provideViewModelFactory(
state: MutableStateFlow<ObjectState>,
session: ObjectSetSession,
updateDataViewViewer: UpdateDataViewViewer,
dispatcher: Dispatcher<Payload>,
analytics: Analytics,
@ -119,7 +117,6 @@ object RelationCreateFromScratchForDataViewModule {
addRelationToDataView = addRelationToDataView,
dispatcher = dispatcher,
objectState = state,
session = session,
updateDataViewViewer = updateDataViewViewer,
analytics = analytics,
createFromScratchState = createFromScratchState,

View file

@ -3,7 +3,6 @@ package com.anytypeio.anytype.di.feature.sets.viewer
import com.anytypeio.anytype.core_models.Payload
import com.anytypeio.anytype.core_utils.di.scope.PerModal
import com.anytypeio.anytype.domain.dataview.interactor.UpdateDataViewViewer
import com.anytypeio.anytype.presentation.sets.ObjectSetSession
import com.anytypeio.anytype.presentation.sets.state.ObjectState
import com.anytypeio.anytype.presentation.sets.viewer.ViewerCardSizeSelectViewModel
import com.anytypeio.anytype.presentation.util.Dispatcher
@ -33,12 +32,10 @@ object ViewerCardSizeSelectModule {
@PerModal
fun provideViewModelFactory(
state: MutableStateFlow<ObjectState>,
session: ObjectSetSession,
dispatcher: Dispatcher<Payload>,
updateDataViewViewer: UpdateDataViewViewer
): ViewerCardSizeSelectViewModel.Factory = ViewerCardSizeSelectViewModel.Factory(
objectState = state,
session = session,
dispatcher = dispatcher,
updateDataViewViewer = updateDataViewViewer
)

View file

@ -4,7 +4,6 @@ import com.anytypeio.anytype.core_models.Payload
import com.anytypeio.anytype.core_utils.di.scope.PerModal
import com.anytypeio.anytype.domain.dataview.interactor.UpdateDataViewViewer
import com.anytypeio.anytype.domain.objects.StoreOfRelations
import com.anytypeio.anytype.presentation.sets.ObjectSetSession
import com.anytypeio.anytype.presentation.sets.state.ObjectState
import com.anytypeio.anytype.presentation.sets.viewer.ViewerImagePreviewSelectViewModel
import com.anytypeio.anytype.presentation.util.Dispatcher
@ -13,7 +12,6 @@ import dagger.Module
import dagger.Provides
import dagger.Subcomponent
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
@Subcomponent(modules = [ViewerImagePreviewSelectModule::class])
@PerModal
@ -35,13 +33,11 @@ object ViewerImagePreviewSelectModule {
@PerModal
fun provideViewModelFactory(
state: MutableStateFlow<ObjectState>,
session: ObjectSetSession,
dispatcher: Dispatcher<Payload>,
updateDataViewViewer: UpdateDataViewViewer,
storeOfRelations: StoreOfRelations
): ViewerImagePreviewSelectViewModel.Factory = ViewerImagePreviewSelectViewModel.Factory(
objectState = state,
session = session,
dispatcher = dispatcher,
updateDataViewViewer = updateDataViewViewer,
storeOfRelations = storeOfRelations

View file

@ -203,6 +203,7 @@ class RelationAddToDataViewFragment : RelationAddBaseFragment() {
private val dv get() = arg<Id>(DV_KEY)
override val ctx get() = arg<Id>(CTX_KEY)
private val viewer get() = arg<Id>(VIEWER_KEY)
@Inject
lateinit var factory: RelationAddToDataViewViewModel.Factory
@ -211,6 +212,7 @@ class RelationAddToDataViewFragment : RelationAddBaseFragment() {
override fun onRelationSelected(ctx: Id, relation: Key, format: RelationFormat) {
vm.onRelationSelected(
ctx = ctx,
viewerId = viewer,
relation = relation,
format = format,
dv = dv,
@ -221,6 +223,7 @@ class RelationAddToDataViewFragment : RelationAddBaseFragment() {
override fun onCreateFromScratchClicked() {
val fr = RelationCreateFromScratchForDataViewFragment.new(
ctx = ctx,
viewer = viewer,
dv = dv,
query = createFromScratchAdapter.query
)

View file

@ -224,13 +224,14 @@ class RelationCreateFromScratchForObjectFragment : RelationCreateFromScratchBase
class RelationCreateFromScratchForDataViewFragment : RelationCreateFromScratchBaseFragment() {
private val dv get() = arg<Id>(DV_KEY)
private val viewer get() = arg<Id>(VIEWER_KEY)
@Inject
lateinit var factory: RelationCreateFromScratchForDataViewViewModel.Factory
override val vm: RelationCreateFromScratchForDataViewViewModel by viewModels { factory }
override fun onCreateRelationClicked() {
vm.onCreateRelationClicked(ctx = ctx, dv = dv)
vm.onCreateRelationClicked(ctx = ctx, viewerId = viewer, dv = dv)
}
override fun onLimitObjectTypeClicked() {
@ -262,12 +263,14 @@ class RelationCreateFromScratchForDataViewFragment : RelationCreateFromScratchBa
}
companion object {
fun new(ctx: Id, dv: Id, query: String) =
fun new(ctx: Id, viewer: Id, dv: Id, query: String) =
RelationCreateFromScratchForDataViewFragment().apply {
arguments = bundleOf(CTX_KEY to ctx, DV_KEY to dv, QUERY_KEY to query)
arguments =
bundleOf(CTX_KEY to ctx, DV_KEY to dv, QUERY_KEY to query, VIEWER_KEY to viewer)
}
const val DV_KEY = "arg.relation-create-from-scratch-for-data-view.ctx"
const val VIEWER_KEY = "arg.relation-create-from-scratch-for-data-view.viewer"
}
}

View file

@ -47,10 +47,11 @@ class ObjectSetSettingsFragment : BaseBottomSheetFragment<FragmentViewerRelation
private val listAdapter by lazy {
ViewerRelationsAdapter(
onSwitchClick = { vm.onSwitchClicked(ctx, it) },
onSwitchClick = { vm.onSwitchClicked(ctx = ctx, viewerId = viewer, it) },
onSettingToggleChanged = { setting, isChecked ->
vm.onSettingToggleChanged(
ctx = ctx,
viewerId = viewer,
toggle = setting,
isChecked = isChecked
)
@ -59,14 +60,20 @@ class ObjectSetSettingsFragment : BaseBottomSheetFragment<FragmentViewerRelation
findNavController()
.navigate(
R.id.viewerCardSizeSelectFragment,
bundleOf(ViewerCardSizeSelectFragment.CTX_KEY to ctx)
bundleOf(
ViewerCardSizeSelectFragment.CTX_KEY to ctx,
ViewerCardSizeSelectFragment.VIEWER_KEY to viewer
)
)
},
onViewerImagePreviewSettingClicked = {
findNavController()
.navigate(
R.id.viewerImagePreviewSelectFragment,
bundleOf(ViewerImagePreviewSelectFragment.CTX_KEY to ctx)
bundleOf(
ViewerImagePreviewSelectFragment.CTX_KEY to ctx,
ViewerImagePreviewSelectFragment.VIEWER_KEY to viewer
)
)
}
)
@ -80,12 +87,14 @@ class ObjectSetSettingsFragment : BaseBottomSheetFragment<FragmentViewerRelation
onDeleteClick = { view ->
vm.onDeleteClicked(
ctx = ctx,
viewerId = viewer,
item = view
)
},
onSettingToggleChanged = { setting, isChecked ->
vm.onSettingToggleChanged(
ctx = ctx,
viewerId = viewer,
toggle = setting,
isChecked = isChecked
)
@ -97,7 +106,7 @@ class ObjectSetSettingsFragment : BaseBottomSheetFragment<FragmentViewerRelation
object : DefaultDragAndDropBehavior(
onItemMoved = { from, to -> editAdapter.onItemMove(from, to) },
onItemDropped = {
vm.onOrderChanged(ctx, editAdapter.items)
vm.onOrderChanged(ctx = ctx, viewerId = viewer, editAdapter.items)
}
) {
override fun getMovementFlags(
@ -154,6 +163,11 @@ class ObjectSetSettingsFragment : BaseBottomSheetFragment<FragmentViewerRelation
}
}
override fun onStart() {
super.onStart()
vm.onStart(viewer)
}
private fun render(state: ObjectSetSettingsViewModel.ScreenState) {
when (state) {
ObjectSetSettingsViewModel.ScreenState.LIST -> {

View file

@ -20,14 +20,21 @@ class ViewerCardSizeSelectFragment : BaseBottomSheetFragment<FragmentViewerCardS
private val vm: ViewerCardSizeSelectViewModel by viewModels { factory }
private val ctx get() = arg<String>(CTX_KEY)
private val viewer get() = arg<String>(VIEWER_KEY)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.btnCardSmall.setOnClickListener {
vm.onSmallCardClicked(ctx)
vm.onSmallCardClicked(
ctx = ctx,
viewerId = viewer
)
}
binding.btnCardLarge.setOnClickListener {
vm.onLargeCardClicked(ctx)
vm.onLargeCardClicked(
ctx = ctx,
viewerId = viewer
)
}
with(lifecycleScope) {
subscribe(vm.viewState) { state ->
@ -74,5 +81,6 @@ class ViewerCardSizeSelectFragment : BaseBottomSheetFragment<FragmentViewerCardS
companion object {
const val CTX_KEY = "arg.viewer-card-size-select.ctx"
const val VIEWER_KEY = "arg.viewer-card-size-select.viewer"
}
}

View file

@ -23,10 +23,13 @@ class ViewerImagePreviewSelectFragment : BaseBottomSheetFragment<FragmentViewerI
private val vm: ViewerImagePreviewSelectViewModel by viewModels { factory }
private val ctx get() = arg<String>(CTX_KEY)
private val viewer get() = arg<String>(VIEWER_KEY)
private val viewerCoverAdapter by lazy {
ViewerCoverAdapter { item ->
vm.onViewerCoverItemClicked(ctx, item)
vm.onViewerCoverItemClicked(
ctx = ctx, viewerId = viewer, item = item
)
}
}
@ -45,6 +48,11 @@ class ViewerImagePreviewSelectFragment : BaseBottomSheetFragment<FragmentViewerI
}
}
override fun onStart() {
super.onStart()
vm.onStart(viewerId = viewer)
}
override fun injectDependencies() {
componentManager().viewerImagePreviewSelectComponent.get(ctx).inject(this)
}
@ -62,5 +70,6 @@ class ViewerImagePreviewSelectFragment : BaseBottomSheetFragment<FragmentViewerI
companion object {
const val CTX_KEY = "arg.viewer-cover-select.ctx"
const val VIEWER_KEY = "arg.viewer-cover-select.viewer"
}
}

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--typography, buttons 05.04-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root"

View file

@ -14,7 +14,6 @@ import com.anytypeio.anytype.domain.relations.DeleteRelationFromDataView
import com.anytypeio.anytype.presentation.common.BaseListViewModel
import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationDeleteEvent
import com.anytypeio.anytype.presentation.mapper.toSimpleRelationView
import com.anytypeio.anytype.presentation.sets.ObjectSetSession
import com.anytypeio.anytype.presentation.sets.dataViewState
import com.anytypeio.anytype.presentation.sets.filterHiddenRelations
import com.anytypeio.anytype.presentation.sets.model.SimpleRelationView
@ -30,7 +29,6 @@ import timber.log.Timber
class ObjectSetSettingsViewModel(
private val objectState: StateFlow<ObjectState>,
private val session: ObjectSetSession,
private val dispatcher: Dispatcher<Payload>,
private val updateDataViewViewer: UpdateDataViewViewer,
private val storeOfRelations: StoreOfRelations,
@ -40,12 +38,12 @@ class ObjectSetSettingsViewModel(
val screenState = MutableStateFlow(ScreenState.LIST)
init {
fun onStart(viewerId: Id) {
viewModelScope.launch {
objectState.filterIsInstance<ObjectState.DataView>().collect { state ->
Timber.d("New update")
Timber.d("New update, viewerId: $viewerId, state: $state")
val result = mutableListOf<ViewerRelationListView>()
val viewer = state.viewerById(session.currentViewerId.value) ?: return@collect
val viewer = state.viewerById(viewerId) ?: return@collect
when (viewer.type) {
Block.Content.DataView.Viewer.Type.GALLERY -> {
result.add(ViewerRelationListView.Section.Settings)
@ -122,17 +120,18 @@ class ObjectSetSettingsViewModel(
screenState.value = ScreenState.LIST
}
fun onSwitchClicked(ctx: Id, item: SimpleRelationView) {
proceedWithVisibilityUpdate(ctx, item)
fun onSwitchClicked(ctx: Id, viewerId: Id, item: SimpleRelationView) {
proceedWithVisibilityUpdate(ctx = ctx, viewerId = viewerId, item)
}
fun onSettingToggleChanged(
ctx: Id,
viewerId: Id,
toggle: ViewerRelationListView.Setting.Toggle,
isChecked: Boolean
) {
val state = objectState.value.dataViewState() ?: return
val viewer = state.viewerById(session.currentViewerId.value) ?: return
val viewer = state.viewerById(viewerId) ?: return
viewModelScope.launch {
val updated = when (toggle) {
is ViewerRelationListView.Setting.Toggle.FitImage -> {
@ -155,13 +154,13 @@ class ObjectSetSettingsViewModel(
}
}
fun onDeleteClicked(ctx: Id, item: SimpleRelationView) {
proceedWithDeletingRelationFromViewer(ctx = ctx, relation = item.key)
fun onDeleteClicked(ctx: Id, viewerId: Id, item: SimpleRelationView) {
proceedWithDeletingRelationFromViewer(ctx = ctx, viewerId = viewerId, relation = item.key)
}
private fun proceedWithDeletingRelationFromViewer(ctx: Id, relation: Id) {
private fun proceedWithDeletingRelationFromViewer(ctx: Id, viewerId: Id, relation: Id) {
val state = objectState.value.dataViewState() ?: return
val viewer = state.viewerById(session.currentViewerId.value) ?: return
val viewer = state.viewerById(viewerId) ?: return
viewModelScope.launch {
val params = UpdateDataViewViewer.Params.ViewerRelation.Remove(
ctx = ctx,
@ -175,7 +174,8 @@ class ObjectSetSettingsViewModel(
dispatcher.send(payload)
proceedWithUpdatingCurrentViewAfterRelationDeletion(
ctx = ctx,
relation = relation
relation = relation,
viewerId = viewerId
)
proceedWithDeletingRelationFromDataView(ctx = ctx, relation = relation)
sendAnalyticsRelationDeleteEvent(analytics)
@ -199,9 +199,9 @@ class ObjectSetSettingsViewModel(
}
}
private fun proceedWithUpdatingCurrentViewAfterRelationDeletion(ctx: Id, relation: Id) {
private fun proceedWithUpdatingCurrentViewAfterRelationDeletion(ctx: Id, viewerId: Id, relation: Id) {
val state = objectState.value.dataViewState() ?: return
val viewer = state.viewerById(session.currentViewerId.value) ?: return
val viewer = state.viewerById(viewerId) ?: return
viewModelScope.launch {
val updated = viewer.copy(
viewerRelations = viewer.viewerRelations.filter { it.key != relation },
@ -223,16 +223,17 @@ class ObjectSetSettingsViewModel(
/**
* @param [order] order of relation keys
*/
fun onOrderChanged(ctx: Id, order: List<ViewerRelationListView>) {
fun onOrderChanged(ctx: Id, viewerId: Id, order: List<ViewerRelationListView>) {
proceedWithChangeOrderUpdate(
ctx = ctx,
viewerId = viewerId,
order = order.filterIsInstance<ViewerRelationListView.Relation>().map { it.view.key }
)
}
private fun proceedWithChangeOrderUpdate(ctx: Id, order: List<String>) {
private fun proceedWithChangeOrderUpdate(ctx: Id, viewerId: Id, order: List<String>) {
val state = objectState.value.dataViewState() ?: return
val viewer = state.viewerById(session.currentViewerId.value) ?: return
val viewer = state.viewerById(viewerId) ?: return
viewModelScope.launch {
val params = UpdateDataViewViewer.Params.ViewerRelation.Sort(
ctx = ctx,
@ -250,9 +251,9 @@ class ObjectSetSettingsViewModel(
}
}
private fun proceedWithVisibilityUpdate(ctx: Id, item: SimpleRelationView) {
private fun proceedWithVisibilityUpdate(ctx: Id, viewerId: Id, item: SimpleRelationView) {
val state = objectState.value.dataViewState() ?: return
val viewer = state.viewerById(session.currentViewerId.value) ?: return
val viewer = state.viewerById(viewerId) ?: return
val viewerRelation = viewer.viewerRelations
.find { it.key == item.key }
?.copy(isVisible = item.isVisible)
@ -274,7 +275,6 @@ class ObjectSetSettingsViewModel(
class Factory(
private val objectState: StateFlow<ObjectState>,
private val session: ObjectSetSession,
private val dispatcher: Dispatcher<Payload>,
private val updateDataViewViewer: UpdateDataViewViewer,
private val store: StoreOfRelations,
@ -285,7 +285,6 @@ class ObjectSetSettingsViewModel(
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return ObjectSetSettingsViewModel(
objectState = objectState,
session = session,
dispatcher = dispatcher,
updateDataViewViewer = updateDataViewViewer,
storeOfRelations = store,

View file

@ -18,7 +18,6 @@ import com.anytypeio.anytype.domain.workspace.WorkspaceManager
import com.anytypeio.anytype.presentation.extension.getPropName
import com.anytypeio.anytype.presentation.extension.sendAnalyticsAddRelationEvent
import com.anytypeio.anytype.presentation.relations.providers.ObjectRelationProvider
import com.anytypeio.anytype.presentation.sets.ObjectSetSession
import com.anytypeio.anytype.presentation.sets.dataViewState
import com.anytypeio.anytype.presentation.sets.state.ObjectState
import com.anytypeio.anytype.presentation.sets.viewerById
@ -30,7 +29,6 @@ import timber.log.Timber
class RelationAddToDataViewViewModel(
relationsProvider: ObjectRelationProvider,
private val objectState: StateFlow<ObjectState>,
private val session: ObjectSetSession,
private val updateDataViewViewer: UpdateDataViewViewer,
private val addRelationToDataView: AddRelationToDataView,
private val getRelations: GetRelations,
@ -49,6 +47,7 @@ class RelationAddToDataViewViewModel(
fun onRelationSelected(
ctx: Id,
viewerId: Id,
relation: Key,
format: RelationFormat,
dv: Id,
@ -66,6 +65,7 @@ class RelationAddToDataViewViewModel(
dispatcher.send(it).also {
proceedWithAddingNewRelationToCurrentViewer(
ctx = ctx,
viewerId = viewerId,
relation = relation
)
}
@ -83,9 +83,9 @@ class RelationAddToDataViewViewModel(
}
}
private suspend fun proceedWithAddingNewRelationToCurrentViewer(ctx: Id, relation: Id) {
private suspend fun proceedWithAddingNewRelationToCurrentViewer(ctx: Id, viewerId: Id, relation: Id) {
val state = objectState.value.dataViewState() ?: return
val viewer = state.viewerById(session.currentViewerId.value) ?: return
val viewer = state.viewerById(viewerId) ?: return
updateDataViewViewer(
UpdateDataViewViewer.Params.ViewerRelation.Add(
@ -105,7 +105,6 @@ class RelationAddToDataViewViewModel(
class Factory(
private val state: StateFlow<ObjectState>,
private val session: ObjectSetSession,
private val updateDataViewViewer: UpdateDataViewViewer,
private val addRelationToDataView: AddRelationToDataView,
private val dispatcher: Dispatcher<Payload>,
@ -121,7 +120,6 @@ class RelationAddToDataViewViewModel(
return RelationAddToDataViewViewModel(
addRelationToDataView = addRelationToDataView,
dispatcher = dispatcher,
session = session,
updateDataViewViewer = updateDataViewViewer,
objectState = state,
analytics = analytics,

View file

@ -16,7 +16,6 @@ import com.anytypeio.anytype.presentation.relations.model.CreateFromScratchState
import com.anytypeio.anytype.presentation.relations.model.LimitObjectTypeValueView
import com.anytypeio.anytype.presentation.relations.model.RelationView
import com.anytypeio.anytype.presentation.relations.model.StateHolder
import com.anytypeio.anytype.presentation.sets.ObjectSetSession
import com.anytypeio.anytype.presentation.sets.dataViewState
import com.anytypeio.anytype.presentation.sets.state.ObjectState
import com.anytypeio.anytype.presentation.sets.viewerById
@ -255,7 +254,6 @@ class RelationCreateFromScratchForObjectBlockViewModel(
class RelationCreateFromScratchForDataViewViewModel(
private val objectState: StateFlow<ObjectState>,
private val session: ObjectSetSession,
private val updateDataViewViewer: UpdateDataViewViewer,
private val addRelationToDataView: AddRelationToDataView,
private val dispatcher: Dispatcher<Payload>,
@ -266,11 +264,11 @@ class RelationCreateFromScratchForDataViewViewModel(
override val createFromScratchSession: Flow<CreateFromScratchState> get() = createFromScratchState.state
fun onCreateRelationClicked(ctx: Id, dv: Id) {
proceedWithCreatingRelation(ctx = ctx, dv = dv)
fun onCreateRelationClicked(ctx: Id, viewerId: Id, dv: Id) {
proceedWithCreatingRelation(ctx = ctx, viewerId = viewerId, dv = dv)
}
private fun proceedWithCreatingRelation(ctx: Id, dv: Id) {
private fun proceedWithCreatingRelation(ctx: Id, viewerId: Id, dv: Id) {
viewModelScope.launch {
val state = createFromScratchState.state.value
val format = state.format
@ -285,6 +283,7 @@ class RelationCreateFromScratchForDataViewViewModel(
success = { relation ->
proceedWithAddingRelationToDataView(
ctx = ctx,
viewerId = viewerId,
relationKey = relation.key,
dv = dv
).also {
@ -302,7 +301,7 @@ class RelationCreateFromScratchForDataViewViewModel(
}
}
private fun proceedWithAddingRelationToDataView(ctx: Id, dv: Id, relationKey: Key) {
private fun proceedWithAddingRelationToDataView(ctx: Id, viewerId: Id, dv: Id, relationKey: Key) {
viewModelScope.launch {
addRelationToDataView(
AddRelationToDataView.Params(
@ -315,6 +314,7 @@ class RelationCreateFromScratchForDataViewViewModel(
dispatcher.send(payload).also {
proceedWithAddingNewRelationToCurrentViewer(
ctx = ctx,
viewerId = viewerId,
relationKey = relationKey
)
}
@ -326,9 +326,9 @@ class RelationCreateFromScratchForDataViewViewModel(
}
}
private suspend fun proceedWithAddingNewRelationToCurrentViewer(ctx: Id, relationKey: Key) {
private suspend fun proceedWithAddingNewRelationToCurrentViewer(ctx: Id, viewerId: Id, relationKey: Key) {
val state = objectState.value.dataViewState() ?: return
val viewer = state.viewerById(session.currentViewerId.value) ?: return
val viewer = state.viewerById(viewerId) ?: return
updateDataViewViewer(
UpdateDataViewViewer.Params.ViewerRelation.Add(
ctx = ctx,
@ -347,7 +347,6 @@ class RelationCreateFromScratchForDataViewViewModel(
class Factory(
private val objectState: StateFlow<ObjectState>,
private val session: ObjectSetSession,
private val updateDataViewViewer: UpdateDataViewViewer,
private val addRelationToDataView: AddRelationToDataView,
private val createFromScratchState: StateHolder<CreateFromScratchState>,
@ -359,7 +358,6 @@ class RelationCreateFromScratchForDataViewViewModel(
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return RelationCreateFromScratchForDataViewViewModel(
dispatcher = dispatcher,
session = session,
updateDataViewViewer = updateDataViewViewer,
objectState = objectState,
analytics = analytics,

View file

@ -6,7 +6,6 @@ import com.anytypeio.anytype.domain.search.DataViewSubscriptionContainer
import com.anytypeio.anytype.domain.search.DataViewState
import com.anytypeio.anytype.presentation.relations.ObjectSetConfig
import com.anytypeio.anytype.presentation.search.ObjectSearchConstants
import com.anytypeio.anytype.presentation.sets.ObjectSetSession
import com.anytypeio.anytype.presentation.sets.filterOutDeletedAndMissingObjects
import com.anytypeio.anytype.presentation.sets.getSetOfValue
import com.anytypeio.anytype.presentation.sets.state.ObjectState

View file

@ -9,7 +9,6 @@ import com.anytypeio.anytype.core_models.Id
import com.anytypeio.anytype.core_models.Payload
import com.anytypeio.anytype.domain.dataview.interactor.UpdateDataViewViewer
import com.anytypeio.anytype.presentation.common.BaseViewModel
import com.anytypeio.anytype.presentation.sets.ObjectSetSession
import com.anytypeio.anytype.presentation.sets.dataViewState
import com.anytypeio.anytype.presentation.sets.state.ObjectState
import com.anytypeio.anytype.presentation.sets.viewerById
@ -22,17 +21,16 @@ import timber.log.Timber
class ViewerCardSizeSelectViewModel(
private val objectState: StateFlow<ObjectState>,
private val session: ObjectSetSession,
private val dispatcher: Dispatcher<Payload>,
private val updateDataViewViewer: UpdateDataViewViewer
) : BaseViewModel() {
val viewState = MutableStateFlow(STATE_IDLE)
init {
fun onStart(viewerId: Id) {
viewModelScope.launch {
objectState.filterIsInstance<ObjectState.DataView>().collect {
val viewer = it.viewerById(session.currentViewerId.value) ?: return@collect
val viewer = it.viewerById(viewerId) ?: return@collect
viewState.value = when (viewer.cardSize) {
Block.Content.DataView.Viewer.Size.SMALL -> STATE_SMALL_CARD_SELECTED
Block.Content.DataView.Viewer.Size.MEDIUM -> STATE_SMALL_CARD_SELECTED
@ -42,31 +40,33 @@ class ViewerCardSizeSelectViewModel(
}
}
fun onSmallCardClicked(ctx: Id) {
fun onSmallCardClicked(ctx: Id, viewerId: Id) {
if (viewState.value == STATE_SMALL_CARD_SELECTED) {
viewState.value = STATE_DISMISSED
} else {
proceedWithUpdatingCardSize(
ctx = ctx,
size = DVViewerCardSize.SMALL
size = DVViewerCardSize.SMALL,
viewerId = viewerId
)
}
}
fun onLargeCardClicked(ctx: Id) {
fun onLargeCardClicked(ctx: Id, viewerId: Id) {
if (viewState.value == STATE_LARGE_CARD_SELECTED) {
viewState.value = STATE_DISMISSED
} else {
proceedWithUpdatingCardSize(
ctx = ctx,
viewerId = viewerId,
size = DVViewerCardSize.LARGE
)
}
}
private fun proceedWithUpdatingCardSize(ctx: Id, size: DVViewerCardSize) {
private fun proceedWithUpdatingCardSize(ctx: Id, viewerId: Id, size: DVViewerCardSize) {
val state = objectState.value.dataViewState() ?: return
val viewer = state.viewerById(session.currentViewerId.value) ?: return
val viewer = state.viewerById(viewerId) ?: return
viewModelScope.launch {
updateDataViewViewer(
UpdateDataViewViewer.Params.Fields(
@ -88,7 +88,6 @@ class ViewerCardSizeSelectViewModel(
class Factory(
private val objectState: StateFlow<ObjectState>,
private val session: ObjectSetSession,
private val dispatcher: Dispatcher<Payload>,
private val updateDataViewViewer: UpdateDataViewViewer
) : ViewModelProvider.Factory {
@ -96,7 +95,6 @@ class ViewerCardSizeSelectViewModel(
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return ViewerCardSizeSelectViewModel(
objectState = objectState,
session = session,
dispatcher = dispatcher,
updateDataViewViewer = updateDataViewViewer
) as T

View file

@ -7,7 +7,6 @@ import com.anytypeio.anytype.core_models.*
import com.anytypeio.anytype.domain.dataview.interactor.UpdateDataViewViewer
import com.anytypeio.anytype.domain.objects.StoreOfRelations
import com.anytypeio.anytype.presentation.common.BaseViewModel
import com.anytypeio.anytype.presentation.sets.ObjectSetSession
import com.anytypeio.anytype.presentation.sets.dataViewState
import com.anytypeio.anytype.presentation.sets.state.ObjectState
import com.anytypeio.anytype.presentation.sets.viewerById
@ -20,7 +19,6 @@ import timber.log.Timber
class ViewerImagePreviewSelectViewModel(
private val objectState: StateFlow<ObjectState>,
private val session: ObjectSetSession,
private val dispatcher: Dispatcher<Payload>,
private val updateDataViewViewer: UpdateDataViewViewer,
private val storeOfRelations: StoreOfRelations
@ -29,10 +27,10 @@ class ViewerImagePreviewSelectViewModel(
val views = MutableStateFlow<List<ViewerImagePreviewSelectView>>(emptyList())
val isDismissed = MutableStateFlow(false)
init {
fun onStart(viewerId: Id) {
viewModelScope.launch {
objectState.filterIsInstance<ObjectState.DataView>().collect { state ->
val viewer = state.viewerById(session.currentViewerId.value) ?: return@collect
val viewer = state.viewerById(viewerId) ?: return@collect
val dv = state.dataViewContent
val result = mutableListOf<ViewerImagePreviewSelectView>().apply {
add(ViewerImagePreviewSelectView.Item.None(isSelected = viewer.coverRelationKey == null))
@ -59,10 +57,10 @@ class ViewerImagePreviewSelectViewModel(
}
}
fun onViewerCoverItemClicked(ctx: Id, item: ViewerImagePreviewSelectView.Item) {
fun onViewerCoverItemClicked(ctx: Id, viewerId: Id, item: ViewerImagePreviewSelectView.Item) {
if (item.isSelected) return
val state = objectState.value.dataViewState() ?: return
val viewer = state.viewerById(session.currentViewerId.value) ?: return
val viewer = state.viewerById(viewerId) ?: return
viewModelScope.launch {
updateDataViewViewer(
UpdateDataViewViewer.Params.Fields(
@ -96,7 +94,6 @@ class ViewerImagePreviewSelectViewModel(
class Factory(
private val objectState: StateFlow<ObjectState>,
private val session: ObjectSetSession,
private val dispatcher: Dispatcher<Payload>,
private val updateDataViewViewer: UpdateDataViewViewer,
private val storeOfRelations: StoreOfRelations
@ -105,7 +102,6 @@ class ViewerImagePreviewSelectViewModel(
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return ViewerImagePreviewSelectViewModel(
objectState = objectState,
session = session,
dispatcher = dispatcher,
updateDataViewViewer = updateDataViewViewer,
storeOfRelations = storeOfRelations