package Ġcom . test . employ eed irectory . ui . details Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . test . employ eed irectory . domain . use cases . Get Employee Details Ċ import Ġcom . test . employ eed irectory . ui . vo . Employee Details Ċ 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 . as State Flow Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ data Ġclass ĠUi State ( ĊĠĠĠ Ġval Ġloading : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval ĠerrorMessage : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġemployee : ĠEmployee Details ? Ġ= Ġnull Ċ ) Ċ Ċ @ H ilt ViewModel Ċ class ĠEmployee Details ViewModel Ġ@ Inject Ġconstructor Ġ( val Ġget Employee Details : ĠGet Employee Details ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġ_ ui State Ġ= ĠMutable State Flow ( Ui State ( loading Ġ= Ġtrue )) ĊĠĠĠ Ġval Ġui State : ĠState Flow < Ui State > Ġ= Ġ_ ui State . as State Flow () ĊĊĠĠĠ Ġfun Ġget Employees ( id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Employee Details . invoke ( id ). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ui State . value Ġ= Ġ_ ui State . value . copy ( employee Ġ= Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }