/* Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) ĠMicrosoft ĠCorporation . ĠAll Ġrights Ġreserved . Ċ Ġ* ĠLicensed Ġunder Ġthe ĠMIT ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . microsoft . device . samples . dual screen experience . presentation . order Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . microsoft . device . samples . dual screen experience . domain . order . model . Order Ċ import Ġcom . microsoft . device . samples . dual screen experience . domain . order . model . Order Item Ċ import Ġcom . microsoft . device . samples . dual screen experience . domain . order . use cases . GetCurrent Order UseCase Ċ import Ġcom . microsoft . device . samples . dual screen experience . domain . order . use cases . Get Order ById UseCase Ċ import Ġcom . microsoft . device . samples . dual screen experience . domain . order . use cases . Submit Order UseCase Ċ import Ġcom . microsoft . device . samples . dual screen experience . domain . order . use cases . Update Item Quantity UseCase Ċ import Ġcom . microsoft . device . samples . dual screen experience . presentation . util . ItemClickListener Ċ import Ġcom . microsoft . device . samples . dual screen experience . presentation . util . Quantity DataList Handler Ċ import Ġcom . microsoft . device . samples . dual screen experience . presentation . util . Single Live Event Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ class ĠOrder ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġget Order UseCase : ĠGetCurrent Order UseCase , ĊĠĠĠ Ġprivate Ġval Ġupdate Item Quantity UseCase : ĠUpdate Item Quantity UseCase , ĊĠĠĠ Ġprivate Ġval Ġsubmit Order UseCase : ĠSubmit Order UseCase , ĊĠĠĠ Ġprivate Ġval Ġget Order ById UseCase : ĠGet Order ById UseCase , ĊĠĠĠ Ġprivate Ġval Ġorder Navigator : ĠOrder Navigator Ċ ) Ġ: ĠViewModel (), ĠItem ClickListener < Boolean > Ġ{ ĊĊĠĠĠ Ġvar Ġitem List : ĠLive Data < List < Order Item >> Ġ= Ġget Order UseCase . get () ĊĠĠĠ Ġvar Ġsubmitted Order Ġ= ĠSingle Live Event < Order ? >( null ) ĊĠĠĠ Ġvar Ġshow Success Message Ġ= Ġfalse ĊĠĠĠ Ġvar Ġshow Sign Dialog Ġ= ĠMutable LiveData ( false ) ĊĊĠĠĠ Ġval Ġquantity DataList Handler Ġ= Ġobject Ġ: ĠQuantity DataList Handler < Order Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetData List (): ĠList < Order Item >? Ġ= Ġget Order Item DataList () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġupdate Quantity ( model : ĠOrder Item ?, ĠnewValue : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Item Quantity ( model ?. itemId , ĠnewValue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsubmitted DataList Handler Ġ= Ġobject Ġ: ĠQuantity DataList Handler < Order Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetData List (): ĠList < Order Item >? Ġ= Ġsubmitted Order . value ?. items ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġupdate Quantity ( model : ĠOrder Item ?, ĠnewValue : ĠInt ) Ġ{} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Item Quantity ( itemId : ĠLong ?, ĠnewValue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠitemId ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Item Quantity UseCase . update ( it , ĠnewValue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( model : ĠBoolean ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( model Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Sign Dialog . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsubmit Order () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubmit Order UseCase . submit ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubmitted Order . value Ġ= Ġget Order ById UseCase . get ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Success Message Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnavigate To Receipt () Ġ{ ĊĠĠĠĠĠĠĠ Ġorder Navigator . navigate To Order Receipt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnavigate To Order () Ġ{ ĊĠĠĠĠĠĠĠ Ġorder Navigator . navigate Up () ĊĠĠĠĠĠĠĠ Ġsubmitted Order . value Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġsubmitted Order . value Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Order Item DataList (): ĠList < Order Item >? Ġ= Ġitem List . value Ċ } Ċ