package Ġcom . w br awner . budget . ui Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . w br awner . budget . common . budget . Budget Ċ import Ġcom . w br awner . budget . common . budget . Budget Repository Ċ import Ġcom . w br awner . budget . common . user . UserRepository Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . flow . Mutable Shared Flow Ċ import Ġkotlinx . coroutines . flow . Shared Flow Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ class ĠMain ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġval Ġbudget Repository : ĠBudget Repository , ĊĠĠĠ Ġval Ġuser Repository : ĠUser Repository Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbudget s Ġ= ĠMutable Shared Flow < Budget List >( replay Ġ= Ġ 1 ) ĊĊĠĠĠ Ġfun Ġload Budget s (): ĠShared Flow < Budget List > Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġbudget Repository . findAll (). sorted By Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbudget s . emit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBudget List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbudget Repository . current Budget . replay Cache . first OrNull ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . indexOf ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbudget s ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Budget ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġbudget s . replay Cache . first OrNull () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbudget Repository . findById ( list . budget s [ index ]. id !! , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbudget s . emit ( list . copy ( selectedIndex Ġ= Ġindex )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠBudget List ( ĊĠĠĠĠĠĠĠ Ġval Ġbudget s : ĠList < Budget > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġval Ġselected Index : ĠInt ? Ġ= Ġnull Ċ )