package Ġcom . mobile health sport s . v accine pass . ui . main . user Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . mobile health sport s . v accine pass . R Ċ 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 . messages . Message Request Ċ import Ġcom . mobile health sport s . v accine pass . presentation . services . messages . Toast 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 . services . navigation . Select UserRequest Ċ 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 Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . time . LocalDate Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ enum Ġclass ĠList ItemType Ġ{ ĊĠĠĠ ĠHEADER , ĊĠĠĠ ĠV ACC INE , ĊĠĠĠ ĠAP POINT MENT Ċ } Ċ Ċ abstract Ġclass ĠListItem ( open Ġvar Ġtype : ĠList ItemType ) Ċ data Ġclass ĠHeader Item ( val Ġtext : ĠString , Ġoverride Ġvar Ġtype : ĠList ItemType Ġ= ĠList ItemType . HEADER ) Ġ: ĊĠĠĠ ĠListItem ( type ) Ċ Ċ data Ġclass ĠV accine Item ( ĊĠĠĠ Ġval Ġid : ĠLong , ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġval Ġdate : ĠLocalDate , ĊĠĠĠ Ġval Ġstate : ĠV accine State , ĊĠĠĠ Ġval ĠonClick : Ġ(( id : ĠLong ) Ġ-> ĠUnit )? , ĊĠĠĠ Ġoverride Ġvar Ġtype : ĠList ItemType Ġ= ĠList ItemType . V ACC INE Ċ ) Ġ: ĠListItem ( type ) Ġ{ ĊĠĠĠ Ġfun Ġon Item Click () Ġ{ ĊĠĠĠĠĠĠĠ ĠonClick ?. invoke ( this . id ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠAppointment Item ( ĊĠĠĠ Ġval Ġid : ĠLong , ĊĠĠĠ Ġval Ġtitle : ĠString , ĊĠĠĠ Ġval Ġappointment _ date : ĠLocalDate , ĊĠĠĠ Ġval Ġreminder : ĠBoolean , ĊĠĠĠ Ġval ĠonClick : Ġ(( id : ĠLong ) Ġ-> ĠUnit )? , ĊĠĠĠ Ġoverride Ġvar Ġtype : ĠList ItemType Ġ= ĠList ItemType . AP POINT MENT Ċ ) Ġ: ĠListItem ( type ) Ġ{ ĊĠĠĠ Ġfun Ġon Item Click () Ġ{ ĊĠĠĠĠĠĠĠ ĠonClick ?. invoke ( this . id ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠV accine State ( val Ġtext : ĠString ) Ġ{ ĊĠĠĠ ĠALL (" All "), ĊĠĠĠ ĠACT IVE (" Active ĠV acc inations "), ĊĠĠĠ ĠS CH ED UL ED (" Scheduled ĠV acc inations "), ĊĠĠĠ ĠNOT _ SCHEDUL ED (" Expired ĠV acc inations "), ĊĠĠĠ ĠNOT _ V ACC IN ATED (" Mandatory ĠV acc inations ") Ċ } Ċ Ċ class ĠUser ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġv acc ination Repository : ĠV acc ination Repository , ĊĠĠĠ Ġprivate Ġval Ġv accine Repository : ĠV accine Repository Ċ ) Ġ: ĠBase ViewModel () Ġ{ ĊĠĠĠ Ġval Ġmessage Request Ġ= ĠService Request < Message Request >() ĊĊĠĠĠ Ġval Ġv accine Adapter Ġ= ĠItem View Adapter Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage Request . request ( Toast Request (" Clicked ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ navigation Request Ġ= ĠService Request < Navigation Request >() ĊĠĠĠ Ġval Ġnavigation Request Ġ= Ġ_ navigation Request ĊĊĠĠĠ Ġprivate Ġvar Ġv accine Length : ĠInt Ġ= Ġ 1 0 ĊĠĠĠ Ġprivate Ġval Ġ_ user : ĠMutable LiveData < User ?> Ġ= ĠMutable LiveData ( null ) ĊĊĠĠĠ Ġval Ġselected Id Ġ= ĠMutable LiveData (- 1 L ) ĊĠĠĠ Ġvar Ġuser : ĠLive Data < User ?> Ġ= Ġ_ user ĊĠĠĠ Ġvar Ġlist Items : ĠMutable List < ListItem > Ġ= ĠArrayList () ĊĊĠĠĠ Ġfun ĠsetUser ( user : ĠUser ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġuser ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ user . value Ġ= Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload V acc inations ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠCard Clicked Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Card Clicked () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Request . request ( Select UserRequest ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Items . add ( header ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( vac : ĠV accine Item Ġin Ġlist Map [ state ] !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Items . add ( vac ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv accine Adapter . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . addAll ( list Items ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Item Click ( id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Id . value Ġ= Ġid ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSHARE D _ PRE F _ KEY Ġ= Ġ" V ACC INE " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ COLOR Ġ= ĠR . color . black ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠERROR _ COLOR Ġ= ĠR . color . error _ red ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠERROR _ DELAY Ġ= Ġ 3 0 0 0 L ĊĠĠĠ Ġ} Ċ } Ċ