package Ġexample . todo app . lite . common Ċ Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . setValue Ċ Ċ internal Ġclass ĠRoot Store Ġ{ ĊĊĠĠĠ Ġvar Ġstate : ĠRoot State Ġby Ġmutable State Of ( initialState ()) ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġfun Ġon Item Clicked ( id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetState Ġ{ Ġcopy ( editing ItemId Ġ= Ġid ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Item Done Changed ( id : ĠLong , Ġis Done : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Item ( id Ġ= Ġid ) Ġ{ Ġit . copy ( is Done Ġ= Ġis Done ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Item Delete Clicked ( id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetState Ġ{ Ġcopy ( items Ġ= Ġitems . filter Not Ġ{ Ġit . id Ġ== Ġid Ġ}) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon AddItem Clicked () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Item Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTodo Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġitems . max Of OrNull ( Todo Item :: id )?. plus ( 1 L ) Ġ?: Ġ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġinput Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( items Ġ= Ġitems Ġ+ Ġnew Item , Ġinput Text Ġ= Ġ"") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Input TextChanged ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetState Ġ{ Ġcopy ( input Text Ġ= Ġtext ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Editor Close Clicked () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetState Ġ{ Ġcopy ( editing ItemId Ġ= Ġnull ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Editor TextChanged ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Item ( id Ġ= Ġrequire NotNull ( editing ItemId )) Ġ{ Ġit . copy ( text Ġ= Ġtext ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Editor Done Changed ( is Done : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Item ( id Ġ= Ġrequire NotNull ( editing ItemId )) Ġ{ Ġit . copy ( is Done Ġ= Ġis Done ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠRoot State . update Item ( id : ĠLong , Ġtransformer : Ġ( Todo Item ) Ġ-> ĠTodo Item ): ĠRoot State Ġ= ĊĠĠĠĠĠĠĠ Ġcopy ( items Ġ= Ġitems . update Item ( id Ġ= Ġid , Ġtransformer Ġ= Ġtransformer )) ĊĊĠĠĠ Ġprivate Ġfun ĠList < Todo Item >. update Item ( id : ĠLong , Ġtransformer : Ġ( Todo Item ) Ġ-> ĠTodo Item ): ĠList < Todo Item > Ġ= ĊĠĠĠĠĠĠĠ Ġmap Ġ{ Ġitem Ġ-> Ġif Ġ( item . id Ġ== Ġid ) Ġtransformer ( item ) Ġelse Ġitem Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠinitialState (): ĠRoot State Ġ= ĊĠĠĠĠĠĠĠ ĠRoot State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġ( 1 L .. 5 L ). map Ġ{ Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTodo Item ( id Ġ= Ġid , Ġtext Ġ= Ġ" Some Ġtext Ġ$ id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġinline Ġfun ĠsetState ( update : ĠRoot State . () Ġ-> ĠRoot State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstate Ġ= Ġstate . update () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠRoot State ( ĊĠĠĠĠĠĠĠ Ġval Ġitems : ĠList < Todo Item > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġval Ġinput Text : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġval Ġediting ItemId : ĠLong ? Ġ= Ġnull , ĊĠĠĠ Ġ) Ċ } Ċ