package Ġcom . pe tp oo ja . store . presentation . ui . cart Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . pe tp oo ja . store . domain . entities . Cart Products Ċ import Ġcom . pe tp oo ja . store . domain . entities . Product Ċ import Ġcom . pe tp oo ja . store . domain . use case . Product UseCase Ċ import Ġcom . pe tp oo ja . store . presentation . base . Base ViewModel Ċ import Ġcom . pe tp oo ja . store . presentation . base . Base ViewState Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjavax . inject . Inject ĊĊ Ċ class ĠCart Fragment ViewModel Ġ@ Inject Ġconstructor ( private Ġval Ġproduct UseCase : ĠProduct UseCase ) Ġ: ĊĠĠĠĠĠĠĠ ĠBase ViewModel < Base ViewState >() Ġ{ ĊĊĠĠĠ Ġprivate Ġvar ĠTAG Ġ= ĠCart Fragment ViewModel :: class . java . simple Name ĊĊĊĊĠĠĠ Ġfun Ġget From Database () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" get From Database () ") ĊĠĠĠĠĠĠĠ Ġm Ui State . value Ġ= ĠBase ViewState . loading ( true ) ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct UseCase . get From Cart (). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ Ġupdate UI ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġadd Item ( product : ĠProduct ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" addItem () ") ĊĠĠĠĠĠĠĠ Ġm Ui State . value Ġ= ĠBase ViewState . loading ( true ) ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct UseCase . add Product ( product ). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ Ġupdate UI ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Item ( product : ĠProduct ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" removeItem () ") ĊĠĠĠĠĠĠĠ Ġm Ui State . value Ġ= ĠBase ViewState . loading ( true ) ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct UseCase . remove Product ( product ). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ Ġupdate UI ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Item ( product : ĠProduct ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" delete Item () ") ĊĠĠĠĠĠĠĠ Ġm Ui State . value Ġ= ĠBase ViewState . loading ( true ) ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct UseCase . delete Product ( product ). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ Ġupdate UI ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġremove All () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Ui State . value Ġ= ĠBase ViewState . loading ( true ) ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct UseCase . delete All (). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ Ġupdate UI ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate UI ( it : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" update UI ($ it )") ĊĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Ui State . post Value ( Base ViewState . has Data ( it )) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Ui State . post Value ( Base ViewState . error Text (" not Ġfound ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate UI ( it : ĠCart Products ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" update UI ($ it )") ĊĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Ui State . post Value ( Base ViewState . has Data ( it )) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Ui State . post Value ( Base ViewState . error Text (" No Ġdata Ġin Ġdatabase ")) ĊĠĠĠ Ġ} Ċ }