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