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:
parent
d11fd8838f
commit
55ca0102b1
17 changed files with 93 additions and 85 deletions
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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 -> {
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue