package Ġcom . mobile health sport s . v accine pass . ui . main . v accine čĊč Ċ import Ġandroidx . lifecycle . LiveData č Ċ import Ġandroidx . lifecycle . Mutable LiveData č Ċ import Ġandroidx . lifecycle . viewModel Scope č Ċ import Ġcom . mobile health sport s . v accine pass . business . models . User č Ċ import Ġcom . mobile health sport s . v accine pass . business . models . V acc ination č Ċ import Ġcom . mobile health sport s . v accine pass . business . models . V accine č Ċ import Ġcom . mobile health sport s . v accine pass . business . repository . V acc ination Repository č Ċ import Ġcom . mobile health sport s . v accine pass . business . repository . V accine Repository č Ċ import Ġcom . mobile health sport s . v accine pass . presentation . services . Service Request č Ċ import Ġcom . mobile health sport s . v accine pass . presentation . services . navigation . Navigation Request č Ċ import Ġcom . mobile health sport s . v accine pass . presentation . view models . Base ViewModel č Ċ import Ġcom . mobile health sport s . v accine pass . ui . main . adapter . Item View Adapter č Ċ import Ġcom . mobile health sport s . v accine pass . ui . main . user .* č Ċ import Ġcom . mobile health sport s . v accine pass . util . li ved ata . NonNull Mutable LiveData č Ċ import Ġkotlinx . coroutines . Dispatch ers č Ċ import Ġkotlinx . coroutines . launch č Ċ import Ġjava . util .* č Ċ import Ġkotlin . collections . ArrayList čĊč Ċ class ĠV accine ViewModel ( čĊĠĠĠ Ġprivate Ġval Ġv acc ination Repository : ĠV acc ination Repository , čĊĠĠĠ Ġprivate Ġval Ġv accine Repository : ĠV accine Repository č Ċ ) Ġ: ĠBase ViewModel () Ġ{ čĊĠĠĠ Ġval Ġnavigation Request Ġ= ĠService Request < Navigation Request >() čĊčĊĠĠĠ Ġprivate Ġval Ġ_ user : ĠMutable LiveData < User ?> Ġ= ĠMutable LiveData ( null ) čĊĠĠĠ Ġvar Ġuser : ĠLive Data < User ?> Ġ= Ġ_ user čĊčĊĠĠĠ Ġprivate Ġvar Ġactive List Items : ĠMutable List < ListItem > Ġ= ĠArrayList () čĊĠĠĠ Ġprivate Ġvar Ġscheduled List Items : ĠMutable List < ListItem > Ġ= ĠArrayList () čĊĠĠĠ Ġprivate Ġvar Ġnot Scheduled List Items : ĠMutable List < ListItem > Ġ= ĠArrayList () čĊĠĠĠ Ġprivate Ġvar Ġnot V acc inated List Items : ĠMutable List < ListItem > Ġ= ĠArrayList () čĊĠĠĠ Ġvar Ġlist Items : ĠMutable List < ListItem > Ġ= ĠArrayList () čĊĠĠĠ Ġval Ġselected Id Ġ= ĠMutable LiveData (- 1 L ) čĊĠĠĠ Ġval Ġno V acc inations String Ġ= ĠNon Null Mutable LiveData ("") čĊĠĠĠ Ġval Ġitem Adapter Ġ= ĠItem View Adapter Ġ{} čĊčĊĠĠĠ Ġfun ĠsetUser ( user : ĠUser ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġuser ?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ user . value Ġ= Ġuser čĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload V acc inations ( user ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġset V acc ination Type ( state : ĠV accine State ) Ġ{ čĊĠĠĠĠĠĠĠ Ġlist Items . clear () čĊčĊĠĠĠĠĠĠĠ Ġwhen ( state ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠV accine State . ALL Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Items . addAll ( scheduled List Items ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Items . addAll ( active List Items ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Items . addAll ( not V acc inated List Items ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Items . addAll ( not Scheduled List Items ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ ĠV accine State . ACTIVE Ġ-> Ġlist Items . addAll ( active List Items ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠV accine State . SCHEDUL ED Ġ-> Ġlist Items . addAll ( scheduled List Items ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠV accine State . NOT _ SCHEDUL ED Ġ-> Ġlist Items . addAll ( not Scheduled List Items ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠV accine State . NOT _ V ACC IN ATED Ġ-> Ġlist Items . addAll ( not V acc inated List Items ) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( list Items . isEmpty ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Items . add ( Header Item ( no V acc inations String . value )) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġitem Adapter . apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . clear () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . addAll ( list Items ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġload V acc inations ( currentUser : ĠUser ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġv acc inations : ĠList < V acc ination >? Ġ= Ġv acc ination Repository . getAll Active V acc inations () čĊĠĠĠĠĠĠĠ Ġv acc inations ?. let Ġ{ Ġlist Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . filter Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . userId . to Long () Ġ== ĠcurrentUser . uid čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems List Ġ= Ġmutable ListOf < V accine Item >() čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . forEach Ġ{ Ġitem Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv accine : ĠV accine ? Ġ= Ġv accine Repository . get V accine ( item . f _ uid ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv accine ?. let Ġ{ Ġvac Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvac Item Ġ= ĠV accine Item ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . uid , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvac . name , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . v acc ination Date !! , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV accine State . ACTIVE , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis :: on Item Click čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems List . add ( vac Item ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap List Items ( items List ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġmap List Items ( v accine Items : ĠMutable List < V accine Item >) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġlist Map : ĠMutable Map < V accine State , ĠMutable List < V accine Item >> Ġ= Ġto Map ( v accine Items ) čĊĠĠĠĠĠĠĠ Ġlist Items . clear () čĊčĊĠĠĠĠĠĠĠ Ġfor Ġ( state : ĠV accine State Ġin Ġlist Map . keys ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Ġ= ĠHeader Item ( state . text ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist : ĠMutable List < V accine Item > Ġ= Ġlist Map . get OrDefault ( state , Ġmutable ListOf ()) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV accine State . ACTIVE Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive List Items . add ( header ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive List Items . addAll ( list ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV accine State . SCHEDUL ED Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscheduled List Items . add ( header ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscheduled List Items . addAll ( list ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV accine State . NOT _ SCHEDUL ED Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot Scheduled List Items . add ( header ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot Scheduled List Items . addAll ( list ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV accine State . NOT _ V ACC IN ATED Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot V acc inated List Items . add ( header ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot V acc inated List Items . addAll ( list ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġlist Items . addAll ( scheduled List Items ) čĊĠĠĠĠĠĠĠ Ġlist Items . addAll ( active List Items ) čĊĠĠĠĠĠĠĠ Ġlist Items . addAll ( not V acc inated List Items ) čĊĠĠĠĠĠĠĠ Ġlist Items . addAll ( not Scheduled List Items ) čĊčĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . Main ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Adapter . apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . clear () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . addAll ( list Items ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġto Map ( v acs : ĠMutable List < V accine Item >): ĠMutable Map < V accine State , ĠMutable List < V accine Item >> Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġmap : ĠMutable Map < V accine State , ĠMutable List < V accine Item >> Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠ ĠEnum Map ( V accine State :: class . java ) čĊčĊĠĠĠĠĠĠĠ Ġfor Ġ( v accine Item : ĠV accine Item Ġin Ġv acs ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue : ĠMutable List < V accine Item > Ġ= Ġmap [ v accine Item . state ] Ġ?: ĠArrayList () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . put If Absent ( v accine Item . state , Ġvalue ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . add ( v accine Item ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġmap čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġon Item Click ( id : ĠLong ) Ġ{ čĊĠĠĠĠĠĠĠ Ġselected Id . value Ġ= Ġid čĊĠĠĠ Ġ} č Ċ }