You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

42 lines
1.4 KiB

package example.todo.common.edit.integration
import com.arkivanov.decompose.ComponentContext
import com.arkivanov.decompose.value.Value
import com.arkivanov.decompose.value.operator.map
import example.todo.common.edit.TodoEdit
import example.todo.common.edit.TodoEdit.Dependencies
import example.todo.common.edit.TodoEdit.Model
import example.todo.common.edit.TodoEdit.Output
import example.todo.common.edit.store.TodoEditStore.Intent
import example.todo.common.edit.store.TodoEditStoreProvider
import example.todo.common.utils.asValue
import example.todo.common.utils.getStore
internal class TodoEditImpl(
componentContext: ComponentContext,
dependencies: Dependencies
) : TodoEdit, ComponentContext by componentContext, Dependencies by dependencies {
private val store =
instanceKeeper.getStore {
TodoEditStoreProvider(
storeFactory = storeFactory,
database = TodoEditStoreDatabase(queries = database.todoDatabaseQueries),
id = itemId
).provide()
}
override val models: Value<Model> = store.asValue().map(stateToModel)
override fun onTextChanged(text: String) {
store.accept(Intent.SetText(text = text))
}
override fun onDoneChanged(isDone: Boolean) {
store.accept(Intent.SetDone(isDone = isDone))
}
override fun onCloseClicked() {
editOutput.onNext(Output.Finished)
}
}