package Ġcom . dx n . ag venture . features . consumer . ui . home Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . dx n . ag venture . features . consumer . domain . Repository Ċ import Ġcom . dx n . data . models . Catalog ue Product Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . flow . launch In Ċ import Ġkotlinx . coroutines . flow . on Each Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject ĊĊ Ċ @ H ilt ViewModel Ċ class ĠConsumer Home ViewModel Ċ @ Inject Ċ constructor ( ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠRepository Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĊĠĠĠ Ġprivate Ġval Ġ_ products Ġ= ĠMutable State Flow < Home Ui State >( Home Ui State . Loading ) ĊĠĠĠ Ġval Ġproducts : ĠState Flow < Home Ui State > Ġget () Ġ= Ġ_ products ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġload Products () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Products () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . get Products (). on Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ products . value Ġ= ĠHome Ui State . Success ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. launch In ( viewModel Scope ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ products . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHome Ui State . Error ( if Ġ( e . localized Message Ġ!= Ġnull ) Ġe . localized Message Ġelse Ġ" Something Ġwent Ġwrong ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsealed Ġclass ĠHome Ui State Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠLoading Ġ: ĠHome Ui State () ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠSuccess ( val Ġproducts : ĠList < Catalog ue Product >) Ġ: ĠHome Ui State () ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠError ( val Ġerror : ĠString ) Ġ: ĠHome Ui State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" HOME _ VIEW _ MODEL " ĊĠĠĠ Ġ} Ċ Ċ }