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

DROID-3538 Widgets | Enhancement | Add plus button to system and object-type widgets (#2260)

This commit is contained in:
Evgenii Kozlov 2025-04-08 20:15:59 +02:00 committed by GitHub
parent d635e34465
commit c51a302051
Signed by: github
GPG key ID: B5690EEEBB952194
10 changed files with 146 additions and 22 deletions

View file

@ -16,6 +16,7 @@ import com.anytypeio.anytype.core_models.DVFilterCondition
import com.anytypeio.anytype.core_models.Event
import com.anytypeio.anytype.core_models.Id
import com.anytypeio.anytype.core_models.ObjectType
import com.anytypeio.anytype.core_models.ObjectTypeIds
import com.anytypeio.anytype.core_models.ObjectTypeUniqueKeys
import com.anytypeio.anytype.core_models.ObjectView
import com.anytypeio.anytype.core_models.ObjectWrapper
@ -47,6 +48,7 @@ import com.anytypeio.anytype.domain.bin.EmptyBin
import com.anytypeio.anytype.domain.block.interactor.CreateBlock
import com.anytypeio.anytype.domain.block.interactor.Move
import com.anytypeio.anytype.domain.collections.AddObjectToCollection
import com.anytypeio.anytype.domain.dashboard.interactor.SetObjectListIsFavorite
import com.anytypeio.anytype.domain.dataview.interactor.CreateDataViewObject
import com.anytypeio.anytype.domain.event.interactor.InterceptEvents
import com.anytypeio.anytype.domain.launch.GetDefaultObjectType
@ -226,7 +228,8 @@ class HomeScreenViewModel(
private val spaceViewSubscriptionContainer: SpaceViewSubscriptionContainer,
private val getSpaceInviteLink: GetSpaceInviteLink,
private val deleteSpace: DeleteSpace,
private val spaceMembers: ActiveSpaceMemberSubscriptionContainer
private val spaceMembers: ActiveSpaceMemberSubscriptionContainer,
private val setAsFavourite: SetObjectListIsFavorite
) : NavigationViewModel<HomeScreenViewModel.Navigation>(),
Reducer<ObjectView, Payload>,
WidgetActiveViewStateHolder by widgetActiveViewStateHolder,
@ -2347,6 +2350,66 @@ class HomeScreenViewModel(
}
}
fun onCreateWidgetElementClicked(view: WidgetView) {
viewModelScope.launch {
}
when(view) {
is WidgetView.ListOfObjects -> {
if (view.type == WidgetView.ListOfObjects.Type.Favorites) {
viewModelScope.launch {
val space = SpaceId(spaceManager.get())
val type = getDefaultObjectType.async(space)
.getOrNull()
?.type ?: TypeKey(ObjectTypeIds.PAGE)
createObject.async(
params = CreateObject.Param(
space = SpaceId(spaceManager.get()),
type = type,
prefilled = mapOf(Relations.IS_FAVORITE to true)
)
).onSuccess { result ->
proceedWithNavigation(result.obj.navigation())
setAsFavourite.async(
params = SetObjectListIsFavorite.Params(
objectIds = listOf(result.obj.id),
isFavorite = true
)
)
}.onFailure {
Timber.e(it, "Error while creating object")
}
}
}
}
is WidgetView.SetOfObjects -> {
viewModelScope.launch {
val source = view.source
if (source is Widget.Source.Default) {
if (source.obj.layout == ObjectType.Layout.OBJECT_TYPE) {
val wrapper = ObjectWrapper.Type(source.obj.map)
createObject.async(
params = CreateObject.Param(
space = SpaceId(spaceManager.get()),
type = TypeKey(wrapper.uniqueKey),
prefilled = mapOf(Relations.IS_FAVORITE to true)
)
).onSuccess { result ->
proceedWithNavigation(result.obj.navigation())
}
} else {
Timber.w("Unexpected source layout: ${source.obj.layout}")
}
}
}
}
else -> {
Timber.w("Unexpected widget type: ${view::class.java.simpleName}")
}
}
}
sealed class Navigation {
data class OpenObject(val ctx: Id, val space: Id) : Navigation()
data class OpenChat(val ctx: Id, val space: Id) : Navigation()
@ -2426,7 +2489,8 @@ class HomeScreenViewModel(
private val spaceViewSubscriptionContainer: SpaceViewSubscriptionContainer,
private val getSpaceInviteLink: GetSpaceInviteLink,
private val deleteSpace: DeleteSpace,
private val activeSpaceMemberSubscriptionContainer: ActiveSpaceMemberSubscriptionContainer
private val activeSpaceMemberSubscriptionContainer: ActiveSpaceMemberSubscriptionContainer,
private val setObjectListIsFavorite: SetObjectListIsFavorite
) : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel> create(modelClass: Class<T>): T = HomeScreenViewModel(
@ -2483,7 +2547,8 @@ class HomeScreenViewModel(
spaceViewSubscriptionContainer = spaceViewSubscriptionContainer,
getSpaceInviteLink = getSpaceInviteLink,
deleteSpace = this@Factory.deleteSpace,
spaceMembers = activeSpaceMemberSubscriptionContainer
spaceMembers = activeSpaceMemberSubscriptionContainer,
setAsFavourite = setObjectListIsFavorite
) as T
}

View file

@ -40,6 +40,7 @@ import com.anytypeio.anytype.domain.block.interactor.Move
import com.anytypeio.anytype.domain.collections.AddObjectToCollection
import com.anytypeio.anytype.domain.config.ConfigStorage
import com.anytypeio.anytype.domain.config.Gateway
import com.anytypeio.anytype.domain.dashboard.interactor.SetObjectListIsFavorite
import com.anytypeio.anytype.domain.dataview.interactor.CreateDataViewObject
import com.anytypeio.anytype.domain.debugging.Logger
import com.anytypeio.anytype.domain.event.interactor.InterceptEvents
@ -280,6 +281,9 @@ class HomeScreenViewModelTest {
@Mock
lateinit var deleteSpace: DeleteSpace
@Mock
lateinit var setObjectListIsFavorite: SetObjectListIsFavorite
lateinit var userPermissionProvider: UserPermissionProvider
private val objectPayloadDispatcher = Dispatcher.Default<Payload>()
@ -2925,7 +2929,8 @@ class HomeScreenViewModelTest {
getSpaceInviteLink = getSpaceInviteLink,
spaceMembers = activeSpaceMemberSubscriptionContainer,
spaceViewSubscriptionContainer = spaceViewSubscriptionContainer,
deleteSpace = deleteSpace
deleteSpace = deleteSpace,
setAsFavourite = setObjectListIsFavorite
)
companion object {