/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠR Äĥ z van ĠRo È Ļ u Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġapp . sed ici . tasks . ui . tasks . internal Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġapp . sed ici . tasks . base . android . ui . Observable Loading Counter Ċ import Ġapp . sed ici . tasks . base . common . Invoke Error Ċ import Ġapp . sed ici . tasks . base . common . Invoke Started Ċ import Ġapp . sed ici . tasks . base . common . Invoke Status Ċ import Ġapp . sed ici . tasks . base . common . Invoke Success Ċ import Ġapp . sed ici . tasks . domain . Ob serve Tasks Ċ import Ġapp . sed ici . tasks . domain . Set Task Is Checked ById Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . Mutable Shared Flow Ċ import Ġkotlinx . coroutines . flow . as Shared Flow Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . combine Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ internal Ġclass ĠTasks ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġobserve Tasks : ĠOb serve Tasks , ĊĠĠĠ Ġset Task Is Checked ById : ĠSet Task Is Checked ById , Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġpending Actions Ġ= ĠMutable Shared Flow < Ui Action >() ĊĊĠĠĠ Ġprivate Ġval Ġloading State Ġ= ĠObservable Loading Counter () ĊĊĠĠĠ Ġprivate Ġval Ġ_ pending Ui Destination Ġ= ĠMutable Shared Flow < Ui Destination >() ĊĠĠĠ Ġval Ġpending Ui Destination Ġ= Ġ_ pending Ui Destination . as Shared Flow () ĊĊĠĠĠ Ġval Ġui State Ġ= Ġcombine ( ĊĠĠĠĠĠĠĠ Ġobserve Tasks . flow , ĊĠĠĠĠĠĠĠ Ġloading State . observable ĊĠĠĠ Ġ) Ġ{ Ġtasks , Ġloading Ġ-> ĊĠĠĠĠĠĠĠ ĠUi State ( tasks Ġ= Ġtasks , Ġloading Ġ= Ġloading ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpending Actions . collect Ġ{ Ġui Action Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( ui Action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUi Action . Edit Task Is Checked Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Task Is Checked ById ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġui Action . taskId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Checked Ġ= Ġui Action . checked ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). watch Status () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUi Action . Show Task Details Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ pending Ui Destination . emit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUi Destination . Task Details ( taskId Ġ= Ġui Action . taskId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġobserve Tasks () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFlow < Invoke Status >. watch Status () Ġ= ĠviewModel Scope . launch Ġ{ Ġcollect Status () Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun ĠFlow < Invoke Status >. collect Status () Ġ= Ġcollect Ġ{ Ġstatus Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInvoke Started Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading State . add Loader () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInvoke Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading State . remove Loader () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInvoke Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading State . remove Loader () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġshow Ġsn ackbar Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsubmit Ui Action ( ui Action : ĠUi Action ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpending Actions . emit ( ui Action ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ