1
0
Fork 0
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:
Evgenii Kozlov 2022-11-08 20:30:52 +03:00 committed by GitHub
parent 7b3947f59e
commit 11274dfbd3
Signed by: github
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 47 additions and 18 deletions

View file

@ -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,

View file

@ -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
)
}

View file

@ -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

View file

@ -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()

View file

@ -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")

View file

@ -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 -> {}
}
}