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:
parent
ca0fa43d0d
commit
a1b30b1601
3 changed files with 36 additions and 102 deletions
|
@ -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
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue