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

DROID-853 Sets | Fix | 'Expand' button might not work (#2852)

This commit is contained in:
Evgenii Kozlov 2023-01-23 14:32:30 +01:00
parent ca0fa43d0d
commit a1b30b1601
3 changed files with 36 additions and 102 deletions

View file

@ -1,13 +1,11 @@
package com.anytypeio.anytype.di.feature;
import com.anytypeio.anytype.domain.`object`.UpdateDetail
import com.anytypeio.anytype.domain.objects.ObjectStore
import com.anytypeio.anytype.presentation.sets.ObjectSetRecordViewModel
import com.anytypeio.anytype.ui.sets.modals.SetObjectSetRecordNameFragment
import dagger.Module
import dagger.Provides
import dagger.Subcomponent
import javax.inject.Named
import javax.inject.Scope
@Subcomponent(modules = [ObjectSetRecordModule::class])
@ -28,11 +26,9 @@ object ObjectSetRecordModule {
@Provides
@ObjectSetRecordScope
fun provideObjectSetRecordViewModelFactory(
setObjectDetails: UpdateDetail,
@Named("object-set-store") objectStore: ObjectStore
setObjectDetails: UpdateDetail
): ObjectSetRecordViewModel.Factory = ObjectSetRecordViewModel.Factory(
setObjectDetails = setObjectDetails,
objectStore = objectStore
)
}

View file

@ -6,63 +6,51 @@ import androidx.lifecycle.viewModelScope
import com.anytypeio.anytype.core_models.Id
import com.anytypeio.anytype.core_models.Relations
import com.anytypeio.anytype.domain.`object`.UpdateDetail
import com.anytypeio.anytype.domain.objects.ObjectStore
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.launch
import timber.log.Timber
class ObjectSetRecordViewModel(
private val setObjectDetails: UpdateDetail,
private val objectStore: ObjectStore
private val setObjectDetails: UpdateDetail
) : SetDataViewObjectNameViewModelBase() {
val commands = MutableSharedFlow<Command>(replay = 0)
override fun onActionDone(target: Id, input: String) {
viewModelScope.launch {
val obj = objectStore.get(target)
if (obj?.id != null) {
setObjectDetails(
UpdateDetail.Params(
ctx = obj.id,
key = Relations.NAME,
value = input
)
).process(
failure = { Timber.e(it, "Error while updating data view record") },
success = { isCompleted.value = true }
setObjectDetails(
UpdateDetail.Params(
ctx = target,
key = Relations.NAME,
value = input
)
} else {
Timber.e("Couldn't find record or retrieve record id")
}
).process(
failure = { Timber.e(it, "Error while updating data view record") },
success = { isCompleted.value = true }
)
}
}
override fun onButtonClicked(target: Id, input: String) {
viewModelScope.launch {
val obj = objectStore.get(target)
if (obj?.id != null) {
if (input.isEmpty()) {
commands.emit(Command.OpenObject(obj.id))
} else {
setObjectDetails(
UpdateDetail.Params(
ctx = obj.id,
key = Relations.NAME,
value = input
)
).process(
failure = {
Timber.e(it, "Error while updating data view record")
commands.emit(Command.OpenObject(obj.id))
},
success = {
commands.emit(Command.OpenObject(obj.id))
}
)
}
if (input.isEmpty()) {
commands.emit(Command.OpenObject(target))
} else {
Timber.e("Couldn't find record or retrieve record id")
setObjectDetails(
UpdateDetail.Params(
ctx = target,
key = Relations.NAME,
value = input
)
).process(
failure = {
Timber.e(it, "Error while updating data view record")
commands.emit(Command.OpenObject(target))
},
success = {
commands.emit(Command.OpenObject(target))
}
)
}
}
}
@ -76,14 +64,12 @@ class ObjectSetRecordViewModel(
}
class Factory(
private val setObjectDetails: UpdateDetail,
private val objectStore: ObjectStore
private val setObjectDetails: UpdateDetail
) : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return ObjectSetRecordViewModel(
setObjectDetails = setObjectDetails,
objectStore = objectStore
setObjectDetails = setObjectDetails
) as T
}
}

View file

@ -5,10 +5,8 @@ import com.anytypeio.anytype.core_models.Id
import com.anytypeio.anytype.core_models.ObjectWrapper
import com.anytypeio.anytype.core_models.Payload
import com.anytypeio.anytype.core_models.Relations
import com.anytypeio.anytype.domain.`object`.UpdateDetail
import com.anytypeio.anytype.domain.base.Either
import com.anytypeio.anytype.domain.objects.DefaultObjectStore
import com.anytypeio.anytype.domain.objects.ObjectStore
import com.anytypeio.anytype.domain.`object`.UpdateDetail
import com.anytypeio.anytype.presentation.util.CoroutinesTestRule
import com.anytypeio.anytype.test_utils.MockDataFactory
import kotlinx.coroutines.test.runTest
@ -42,39 +40,12 @@ class ObjectSetRecordViewModelTest {
MockitoAnnotations.openMocks(this)
}
@Test
fun `should not crash if store does not contain relevant data`() {
// SETUP
val store = DefaultObjectStore()
val vm = buildViewModel(store = store)
// TESTING
vm.onActionDone(
target = obj.id,
input = MockDataFactory.randomString()
)
verifyNoInteractions(setObjectDetails)
}
@Test
fun `should proceed with updating record name based on user input on action done`() = runTest {
// SETUP
val store = DefaultObjectStore().apply {
merge(
objects = listOf(obj),
dependencies = emptyList(),
subscriptions = listOf(ctx)
)
}
val vm = buildViewModel(store = store)
val vm = buildViewModel()
val input = MockDataFactory.randomString()
@ -103,14 +74,6 @@ class ObjectSetRecordViewModelTest {
// SETUP
val store = DefaultObjectStore().apply {
merge(
objects = listOf(obj),
dependencies = emptyList(),
subscriptions = listOf(ctx)
)
}
val input = MockDataFactory.randomString()
val params = UpdateDetail.Params(
@ -121,7 +84,7 @@ class ObjectSetRecordViewModelTest {
stubSetObjectDetails(params)
val vm = buildViewModel(store = store)
val vm = buildViewModel()
// TESTING
@ -148,14 +111,6 @@ class ObjectSetRecordViewModelTest {
// SETUP
val store = DefaultObjectStore().apply {
merge(
objects = listOf(obj),
dependencies = emptyList(),
subscriptions = listOf(ctx)
)
}
val emptyInput = ""
val params = UpdateDetail.Params(
@ -166,7 +121,7 @@ class ObjectSetRecordViewModelTest {
stubSetObjectDetails(params)
val vm = buildViewModel(store = store)
val vm = buildViewModel()
// TESTING
@ -186,11 +141,8 @@ class ObjectSetRecordViewModelTest {
verifyNoInteractions(setObjectDetails)
}
fun buildViewModel(
store: ObjectStore
) : ObjectSetRecordViewModel = ObjectSetRecordViewModel(
setObjectDetails = setObjectDetails,
objectStore = store
fun buildViewModel() : ObjectSetRecordViewModel = ObjectSetRecordViewModel(
setObjectDetails = setObjectDetails
)
private fun stubSetObjectDetails(