package Ġcom . ddd 4 . drop it . presentation . ui . detail folder Ċ Ċ import Ġandroidx . h ilt . lifecycle . ViewModel Inject Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . ddd 4 . drop it . domain . use case . Get Detail Item UseCase Ċ import Ġcom . ddd 4 . drop it . presentation . base . ui . Base ViewModel Ċ import Ġcom . ddd 4 . drop it . presentation . entity . Presentation Entity Ċ import Ġcom . ddd 4 . drop it . domain . Result Ċ import Ġcom . ddd 4 . drop it . domain . getValue Ċ import Ġcom . ddd 4 . drop it . domain . use case . Delete Item UseCase Ċ import Ġcom . ddd 4 . drop it . domain . use case . Update Item UseCase Ċ import Ġcom . ddd 4 . drop it . presentation . mapper . map To Domain Ċ import Ġcom . ddd 4 . drop it . presentation . mapper . map To Presentation Ċ import Ġcom . ddd 4 . drop it . presentation . util . Single Live Event Ċ import Ġkotlinx . coroutines . launch Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠFolder Item Detail ViewModel Ġ@ ViewModel Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġget Detail Item UseCase : ĠGet Detail Item UseCase , ĊĠĠĠ Ġprivate Ġval Ġdelete Item UseCase : ĠDelete Item UseCase , ĊĠĠĠ Ġprivate Ġval Ġupdate Item UseCase : ĠUpdate Item UseCase Ċ ): ĠBase ViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ item Details Ġ= ĠMutable LiveData < Presentation Entity . Item >() ĊĠĠĠ Ġval Ġitem Details : ĠLive Data < Presentation Entity . Item > Ġ= Ġ_ item Details ĊĊĠĠĠ Ġval Ġitem Name Ġ= ĠMutable LiveData < String >() ĊĊĠĠĠ Ġprivate Ġval Ġ_ text IsEmpty Ġ= ĠSingle Live Event < Void >() ĊĠĠĠ Ġval Ġtest IsEmpty : ĠLive Data < Void > Ġ= Ġ_ text IsEmpty ĊĊĠĠĠ Ġprivate Ġval Ġ_ is Edit Mode Ġ= ĠMutable LiveData ( false ) ĊĠĠĠ Ġval Ġis Edit Mode : ĠLive Data < Boolean > Ġ= Ġ_ is Edit Mode ĊĊĠĠĠ Ġprivate Ġval Ġ_ edit Cancel Button Ġ= ĠSingle Live Event < Void >() ĊĠĠĠ Ġval Ġedit Cancel Button : ĠLive Data < Void > Ġ= Ġ_ edit Cancel Button ĊĊĠĠĠ Ġprivate Ġval Ġ_ edit Complete Button Ġ= ĠSingle Live Event < Void >() ĊĠĠĠ Ġval Ġedit Complete Button : ĠLive Data < Void > Ġ= Ġ_ edit Complete Button ĊĊĠĠĠ Ġprivate Ġval Ġ_ item Delete Button Ġ= ĠSingle Live Event < Void >() ĊĠĠĠ Ġval Ġitem Delete Button : ĠLive Data < Void > Ġ= Ġ_ item Delete Button ĊĊĠĠĠ Ġprivate Ġval Ġ_ back Button Ġ= ĠSingle Live Event < Void >() ĊĠĠĠ Ġval Ġback Button : ĠLive Data < Void > Ġ= Ġ_ back Button ĊĊĠĠĠ Ġfun Ġstart ( itemId : ĠLong ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Detail Item UseCase ( itemId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getValue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map To Presentation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ item Details . value Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Name . value Ġ= Ġitem . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġedit Button Click () Ġ= ĠviewModel Scope . launch Ġ Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( itemName . value !!. isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Edit Mode . value Ġ= Ġ!_ is Edit Mode . value !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen (_ is Edit Mode . value ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ item Details . value ?. name Ġ= Ġitem Name . value !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Item UseCase (_ item Details . value !!. map To Domain ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ edit Complete Button . call () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ_ text IsEmpty . call () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Button Click () Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġif (_ is Edit Mode . value Ġ== Ġtrue ){ Ġ// cancel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Name . value Ġ= Ġ_ item Details . value ?. name !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Edit Mode . value Ġ= Ġ!_ is Edit Mode . value !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ edit Cancel Button . call () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Item UseCase (_ item Details . value ?. id !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ item Delete Button . call () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġback Button Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ back Button . call () ĊĠĠĠ Ġ} Ċ }