package Ġio . horizontal systems . bank wallet . modules . coin . reports Ċ Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġio . horizontal systems . bank wallet . core . subscribe IO Ċ import Ġio . horizontal systems . bank wallet . entities . Data State Ċ import Ġio . horizontal systems . bank wallet . entities . ViewState Ċ import Ġio . horizontal systems . bank wallet . modules . coin . reports . Coin Reports Module . Report View Item Ċ import Ġio . horizontal systems . core . helpers . Date Helper Ċ import Ġio . horizontal systems . market kit . models . Coin Report Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠCoin Reports ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġservice : ĠCoin Reports Service Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdis pos ables Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġval Ġview State LiveData Ġ= ĠMutable LiveData < ViewState >() ĊĠĠĠ Ġval Ġloading LiveData Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġis Refresh ing LiveData Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġreport View Items LiveData Ġ= ĠMutable LiveData < List < Report View Item >>() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . state Observable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe IO ({ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading LiveData . post Value ( state Ġ== ĠData State . Loading ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠData State . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State LiveData . post Value ( ViewState . Success ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync ( state . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠData State . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State LiveData . post Value ( ViewState . Error ( state . error )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State LiveData . post Value ( ViewState . Error ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis pos ables . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġservice . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh With Min Loading Spinner Period () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonError Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh With Min Loading Spinner Period () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġdis pos ables . clear () ĊĠĠĠĠĠĠĠ Ġservice . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh With Min Loading Spinner Period () Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . refresh () ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Refresh ing LiveData . post Value ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Refresh ing LiveData . post Value ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsync ( reports : ĠList < Coin Report >) Ġ{ ĊĠĠĠĠĠĠĠ Ġreport View Items LiveData . post Value ( reports . map Ġ{ Ġview Item ( it ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġview Item ( report : ĠCoin Report ): ĠReport View Item Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠReport View Item ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġreport . author , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġreport . title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġreport . body , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= ĠDate Helper . format Date ( report . date , Ġ" MMM Ġdd , Ġy yyy "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġreport . url ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ