mirror of
https://github.com/anyproto/anytype-kotlin.git
synced 2025-06-08 05:47:05 +09:00
DROID-530 Sets | Enhancement | Allow duplicating currently open set (#2697)
This commit is contained in:
parent
7b3947f59e
commit
11274dfbd3
6 changed files with 47 additions and 18 deletions
|
@ -135,6 +135,7 @@ object ObjectSetMenuModule {
|
|||
addToFavorite: AddToFavorite,
|
||||
removeFromFavorite: RemoveFromFavorite,
|
||||
addBackLinkToObject: AddBackLinkToObject,
|
||||
duplicateObject: DuplicateObject,
|
||||
delegator: Delegator<Action>,
|
||||
urlBuilder: UrlBuilder,
|
||||
analytics: Analytics,
|
||||
|
@ -145,6 +146,7 @@ object ObjectSetMenuModule {
|
|||
addToFavorite = addToFavorite,
|
||||
removeFromFavorite = removeFromFavorite,
|
||||
addBackLinkToObject = addBackLinkToObject,
|
||||
duplicateObject = duplicateObject,
|
||||
urlBuilder = urlBuilder,
|
||||
delegator = delegator,
|
||||
analytics = analytics,
|
||||
|
|
|
@ -14,6 +14,7 @@ import com.anytypeio.anytype.di.feature.sets.ModifyFilterSubComponent
|
|||
import com.anytypeio.anytype.di.feature.sets.SelectFilterRelationSubComponent
|
||||
import com.anytypeio.anytype.di.feature.sets.viewer.ViewerCardSizeSelectSubcomponent
|
||||
import com.anytypeio.anytype.di.feature.sets.viewer.ViewerImagePreviewSelectSubcomponent
|
||||
import com.anytypeio.anytype.domain.`object`.DuplicateObject
|
||||
import com.anytypeio.anytype.domain.`object`.UpdateDetail
|
||||
import com.anytypeio.anytype.domain.auth.repo.AuthRepository
|
||||
import com.anytypeio.anytype.domain.base.AppCoroutineDispatchers
|
||||
|
@ -455,4 +456,13 @@ object ObjectSetModule {
|
|||
fun provideAddFileToObjectUseCase(
|
||||
repo: BlockRepository
|
||||
): AddFileToObject = AddFileToObject(repo = repo)
|
||||
|
||||
@JvmStatic
|
||||
@Provides
|
||||
@PerScreen
|
||||
fun duplicateObject(
|
||||
repo: BlockRepository
|
||||
): DuplicateObject = DuplicateObject(
|
||||
repo = repo
|
||||
)
|
||||
}
|
|
@ -34,7 +34,7 @@ class ObjectMenuViewModel(
|
|||
urlBuilder: UrlBuilder,
|
||||
dispatcher: Dispatcher<Payload>,
|
||||
menuOptionsProvider: ObjectMenuOptionsProvider,
|
||||
private val duplicateObject: DuplicateObject,
|
||||
duplicateObject: DuplicateObject,
|
||||
private val storage: Editor.Storage,
|
||||
private val analytics: Analytics,
|
||||
private val updateFields: UpdateFields
|
||||
|
@ -43,6 +43,7 @@ class ObjectMenuViewModel(
|
|||
addToFavorite = addToFavorite,
|
||||
removeFromFavorite = removeFromFavorite,
|
||||
addBackLinkToObject = addBackLinkToObject,
|
||||
duplicateObject = duplicateObject,
|
||||
delegator = delegator,
|
||||
urlBuilder = urlBuilder,
|
||||
dispatcher = dispatcher,
|
||||
|
@ -71,7 +72,7 @@ class ObjectMenuViewModel(
|
|||
}
|
||||
}
|
||||
add(ObjectAction.UNDO_REDO)
|
||||
if (!isProfile) {
|
||||
if (!isProfile && !objectRestrictions.contains(ObjectRestriction.DUPLICATE)) {
|
||||
add(ObjectAction.DUPLICATE)
|
||||
}
|
||||
add(ObjectAction.LINK_TO)
|
||||
|
@ -196,21 +197,6 @@ class ObjectMenuViewModel(
|
|||
}
|
||||
}
|
||||
|
||||
private fun proceedWithDuplication(ctx: Id) {
|
||||
viewModelScope.launch {
|
||||
duplicateObject(ctx).process(
|
||||
failure = {
|
||||
Timber.e(it, "Duplication error")
|
||||
_toasts.emit(SOMETHING_WENT_WRONG_MSG)
|
||||
},
|
||||
success = {
|
||||
_toasts.emit("Your object is duplicated")
|
||||
delegator.delegate(Action.Duplicate(it))
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun proceedWithUpdatingLockStatus(
|
||||
ctx: Id,
|
||||
isLocked: Boolean
|
||||
|
|
|
@ -4,6 +4,7 @@ import androidx.lifecycle.viewModelScope
|
|||
import com.anytypeio.anytype.analytics.base.Analytics
|
||||
import com.anytypeio.anytype.core_models.Id
|
||||
import com.anytypeio.anytype.core_models.Payload
|
||||
import com.anytypeio.anytype.domain.`object`.DuplicateObject
|
||||
import com.anytypeio.anytype.domain.dashboard.interactor.AddToFavorite
|
||||
import com.anytypeio.anytype.domain.dashboard.interactor.RemoveFromFavorite
|
||||
import com.anytypeio.anytype.domain.misc.UrlBuilder
|
||||
|
@ -37,6 +38,7 @@ abstract class ObjectMenuViewModelBase(
|
|||
protected val dispatcher: Dispatcher<Payload>,
|
||||
private val analytics: Analytics,
|
||||
private val menuOptionsProvider: ObjectMenuOptionsProvider,
|
||||
private val duplicateObject: DuplicateObject
|
||||
) : BaseViewModel() {
|
||||
|
||||
private val jobs = mutableListOf<Job>()
|
||||
|
@ -189,6 +191,21 @@ abstract class ObjectMenuViewModelBase(
|
|||
}
|
||||
}
|
||||
|
||||
fun proceedWithDuplication(ctx: Id) {
|
||||
viewModelScope.launch {
|
||||
duplicateObject(ctx).process(
|
||||
failure = {
|
||||
Timber.e(it, "Duplication error")
|
||||
_toasts.emit(SOMETHING_WENT_WRONG_MSG)
|
||||
},
|
||||
success = {
|
||||
_toasts.emit("Your object is duplicated")
|
||||
delegator.delegate(Action.Duplicate(it))
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
sealed class Command {
|
||||
object OpenObjectIcons : Command()
|
||||
object OpenSetIcons : Command()
|
||||
|
|
|
@ -7,6 +7,7 @@ import com.anytypeio.anytype.analytics.base.Analytics
|
|||
import com.anytypeio.anytype.core_models.Id
|
||||
import com.anytypeio.anytype.core_models.Payload
|
||||
import com.anytypeio.anytype.core_models.restrictions.ObjectRestriction
|
||||
import com.anytypeio.anytype.domain.`object`.DuplicateObject
|
||||
import com.anytypeio.anytype.domain.dashboard.interactor.AddToFavorite
|
||||
import com.anytypeio.anytype.domain.dashboard.interactor.RemoveFromFavorite
|
||||
import com.anytypeio.anytype.domain.misc.UrlBuilder
|
||||
|
@ -25,6 +26,7 @@ class ObjectSetMenuViewModel(
|
|||
addToFavorite: AddToFavorite,
|
||||
removeFromFavorite: RemoveFromFavorite,
|
||||
addBackLinkToObject: AddBackLinkToObject,
|
||||
duplicateObject: DuplicateObject,
|
||||
delegator: Delegator<Action>,
|
||||
urlBuilder: UrlBuilder,
|
||||
dispatcher: Dispatcher<Payload>,
|
||||
|
@ -36,6 +38,7 @@ class ObjectSetMenuViewModel(
|
|||
addToFavorite = addToFavorite,
|
||||
removeFromFavorite = removeFromFavorite,
|
||||
addBackLinkToObject = addBackLinkToObject,
|
||||
duplicateObject = duplicateObject,
|
||||
delegator = delegator,
|
||||
urlBuilder = urlBuilder,
|
||||
dispatcher = dispatcher,
|
||||
|
@ -51,6 +54,7 @@ class ObjectSetMenuViewModel(
|
|||
private val addToFavorite: AddToFavorite,
|
||||
private val removeFromFavorite: RemoveFromFavorite,
|
||||
private val addBackLinkToObject: AddBackLinkToObject,
|
||||
private val duplicateObject: DuplicateObject,
|
||||
private val delegator: Delegator<Action>,
|
||||
private val urlBuilder: UrlBuilder,
|
||||
private val dispatcher: Dispatcher<Payload>,
|
||||
|
@ -64,6 +68,7 @@ class ObjectSetMenuViewModel(
|
|||
addToFavorite = addToFavorite,
|
||||
removeFromFavorite = removeFromFavorite,
|
||||
addBackLinkToObject = addBackLinkToObject,
|
||||
duplicateObject = duplicateObject,
|
||||
delegator = delegator,
|
||||
urlBuilder = urlBuilder,
|
||||
analytics = analytics,
|
||||
|
@ -130,6 +135,9 @@ class ObjectSetMenuViewModel(
|
|||
} else {
|
||||
add(ObjectAction.ADD_TO_FAVOURITE)
|
||||
}
|
||||
if (!objectRestrictions.contains(ObjectRestriction.DUPLICATE)) {
|
||||
add(ObjectAction.DUPLICATE)
|
||||
}
|
||||
add(ObjectAction.LINK_TO)
|
||||
}
|
||||
|
||||
|
@ -150,10 +158,12 @@ class ObjectSetMenuViewModel(
|
|||
ObjectAction.LINK_TO -> {
|
||||
proceedWithLinkTo()
|
||||
}
|
||||
ObjectAction.DUPLICATE -> {
|
||||
proceedWithDuplication(ctx = ctx)
|
||||
}
|
||||
ObjectAction.MOVE_TO,
|
||||
ObjectAction.SEARCH_ON_PAGE,
|
||||
ObjectAction.UNDO_REDO,
|
||||
ObjectAction.DUPLICATE,
|
||||
ObjectAction.LOCK,
|
||||
ObjectAction.UNLOCK,
|
||||
ObjectAction.USE_AS_TEMPLATE -> throw IllegalStateException("$action is unsupported")
|
||||
|
|
|
@ -286,6 +286,10 @@ class ObjectSetViewModel(
|
|||
proceedWithSettingUnsplashImage(action)
|
||||
}
|
||||
is Action.OpenObject -> proceedWithOpeningObject(action.id)
|
||||
is Action.Duplicate -> proceedWithNavigation(
|
||||
target = action.id,
|
||||
layout = ObjectType.Layout.SET
|
||||
)
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue