package Ġcom . to g gl . k omp osable . sample . todo . edit Ċ Ċ import Ġcom . to g gl . k omp osable . architecture . Effect Ċ import Ġcom . to g gl . k omp osable . architecture . Mutable Ċ import Ġcom . to g gl . k omp osable . architecture . Reducer Ċ import Ġcom . to g gl . k omp osable . extensions . effect Of Ċ import Ġcom . to g gl . k omp osable . extensions . mutate Without Effects Ċ import Ġcom . to g gl . k omp osable . sample . todo . data . Editable Todo Item Ċ import Ġcom . to g gl . k omp osable . sample . todo . data . Todo Dao Ċ import Ġcom . to g gl . k omp osable . sample . todo . data . Todo Item Ċ import Ġcom . to g gl . k omp osable . scope . Dispatcher Provider Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ @ Singleton Ċ class ĠEdit Reducer Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġsave Todo Effect Factory : ĠSave Todo Effect . Factory Ċ ) Ġ: ĠRed ucer < Edit State , ĠEdit Action > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġreduce ( state : ĠMutable < Edit State >, Ġaction : ĠEdit Action ): ĠList < Effect < Edit Action >> Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEdit Action . Description Changed Ġ-> Ġstate . mutate Without Effects Ġ{ Ġcopy ( editable Todo Ġ= Ġeditable Todo . copy ( description Ġ= Ġaction . description )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEdit Action . Title Changed Ġ-> Ġstate . mutate Without Effects Ġ{ Ġcopy ( editable Todo Ġ= Ġeditable Todo . copy ( title Ġ= Ġaction . title )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEdit Action . Save T apped Ġ-> Ġeffect Of ( save Todo Effect Factory . create ( state (). editable Todo )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEdit Action . Saved , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEdit Action . Close T apped Ġ-> Ġstate . mutate Without Effects Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( editable Todo Ġ= ĠEdit able Todo Item ()). pop Back Stack () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ class ĠSave Todo Effect ( ĊĠĠĠ Ġprivate Ġval Ġdispatcher Provider : ĠDispatcher Provider , ĊĠĠĠ Ġprivate Ġval Ġtodo Dao : ĠTodo Dao , ĊĠĠĠ Ġprivate Ġval Ġeditable Todo Item : ĠEdit able Todo Item , Ċ ) Ġ: ĠEffect < Edit Action . Saved > Ġ{ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġexecute (): ĠEdit Action . Saved Ġ= Ġwith Context ( dispatcher Provider . io ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( editable Todo Item . id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtodo Dao . insert ( Todo Item ( title Ġ= Ġeditable Todo Item . title , Ġdescription Ġ= Ġeditable Todo Item . description )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtodo Dao . update ( Todo Item ( id Ġ= Ġeditable Todo Item . id , Ġtitle Ġ= Ġeditable Todo Item . title , Ġdescription Ġ= Ġeditable Todo Item . description )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠEdit Action . Saved ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġclass ĠFactory Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdispatcher Provider : ĠDispatcher Provider , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtodo Dao : ĠTodo Dao ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( editable Todo Item : ĠEdit able Todo Item ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSave Todo Effect ( dispatcher Provider , Ġtodo Dao , Ġeditable Todo Item ) ĊĠĠĠ Ġ} Ċ } Ċ