/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠOn a ĠSystems , ĠInc Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . smart register . fhir core . quest . ui . patient . profile Ċ Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . Padding Values Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . foundation . remember Scroll State Ċ import Ġandroidx . compose . foundation . vertical Scroll Ċ import Ġandroidx . compose . material . Dropdown Menu Ċ import Ġandroidx . compose . material . Dropdown MenuItem Ċ import Ġandroidx . compose . material . Icon Ċ import Ġandroidx . compose . material . IconButton Ċ import Ġandroidx . compose . material . Sca ffold Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . material . Top AppBar Ċ import Ġandroidx . compose . material . icons . Icons Ċ import Ġandroidx . compose . material . icons . filled . Arrow Back Ċ import Ġandroidx . compose . material . icons . outlined . More Vert Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . La unched Effect Ċ import Ġandroidx . compose . runtime . Mutable State Ċ import Ġandroidx . compose . runtime . Side Effect Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . platform . Local Context Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . h ilt . navigation . compose . h ilt ViewModel Ċ import Ġandroidx . navigation . Nav Host Controller Ċ import Ġorg . smart register . fhir core . engine . R Ċ import Ġorg . smart register . fhir core . engine . app feature . model . Health Module Ċ import Ġorg . smart register . fhir core . engine . ui . components . Form Button Ċ import Ġorg . smart register . fhir core . engine . ui . theme . Patient Profile Sections BackgroundColor Ċ import Ġorg . smart register . fhir core . quest . ui . patient . profile . components . Personal Data Ċ import Ġorg . smart register . fhir core . quest . ui . patient . profile . components . Profile Action able Item Ċ import Ġorg . smart register . fhir core . quest . ui . patient . profile . components . Profile Card Ċ import Ġorg . smart register . fhir core . quest . ui . shared . models . Patient Profile View Section Ċ Ċ @ Composable Ċ fun ĠPatient Profile Screen ( ĊĠ Ġapp Feature Name : ĠString ?, ĊĠ Ġhealth Module : ĠHealth Module , ĊĠ Ġpatient Id : ĠString ?, ĊĠ Ġfamily Id : ĠString ?, ĊĠ Ġnav Controller : ĠNav Host Controller , ĊĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠ Ġpatient Profile ViewModel : ĠPatient Profile ViewModel Ġ= Ġh ilt ViewModel (), ĊĠ Ġrefresh Data State : ĠMutable State < Boolean > Ċ ) Ġ{ ĊĊĠ Ġval Ġcontext Ġ= ĠLocal Context . current ĊĠ Ġval Ġprofile ViewData Ġ= Ġpatient Profile ViewModel . patient Profile ViewData . value ĊĠ Ġvar Ġshow Overflow Menu Ġby Ġremember Ġ{ Ġmutable State Of ( false ) Ġ} ĊĠ Ġval Ġview State Ġ= Ġpatient Profile ViewModel . patient Profile Ui State . value ĊĠ Ġval Ġrefresh Data State Value Ġby Ġremember Ġ{ Ġrefresh Data State Ġ} ĊĊĠ ĠLa unched Effect ( Unit ) Ġ{ ĊĠĠĠ Ġpatient Profile ViewModel . fetch Patient Profile Data ( app Feature Name , Ġhealth Module , Ġpatient Id Ġ?: Ġ"") ĊĠ Ġ} ĊĊĠ ĠSide Effect Ġ{ ĊĠĠĠ Ġ// ĠRefresh Ġfamily Ġprofile Ġdata Ġon Ġresume ĊĠĠĠ Ġif Ġ( refresh Data State Value ) Ġ{ ĊĠĠĠĠĠ Ġpatient Profile ViewModel . fetch Patient Profile Data ( app Feature Name , Ġhealth Module , Ġpatient Id Ġ?: Ġ"") ĊĠĠĠĠĠ Ġrefresh Data State . value Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ ĠScaffold ( ĊĠĠĠ Ġtop Bar Ġ= Ġ{ ĊĠĠĠĠĠ ĠTop AppBar ( ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġnavigation Icon Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠIcon Button ( onClick Ġ= Ġ{ Ġnav Controller . pop Back Stack () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( Icons . Filled . Arrow Back , Ġnull ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġactions Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠIcon Button ( onClick Ġ= Ġ{ Ġshow Overflow Menu Ġ= Ġ! show Overflow Menu Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Vector Ġ= ĠIcons . Outlined . More Vert , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt int Ġ= ĠColor . White ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ ĠDropdown Menu ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpanded Ġ= Ġshow Overflow Menu , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Dismiss Request Ġ= Ġ{ Ġshow Overflow Menu Ġ= Ġfalse Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview State . overflow Menu Items . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDropdown MenuItem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Overflow Menu Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpatient Profile ViewModel . on Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPatient Profile Event . Overflow Menu Click ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile ViewData . logical Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfamily Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Padding Ġ= ĠPadding Values ( horizontal Ġ= Ġ 1 6 . dp , Ġvertical Ġ= Ġ 8 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . confirm Action ) Ġit . title Color . copy ( alpha Ġ= Ġ 0 . 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠColor . Transparent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĠText ( text Ġ= Ġstring Resource ( id Ġ= Ġit . title Resource ), Ġcolor Ġ= Ġit . title Color ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ) Ġ{ Ġinner Padding Ġ-> ĊĠĠĠ ĠBox ( modifier Ġ= Ġmodifier . padding ( inner Padding )) Ġ{ ĊĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĊĠĠĠĠĠĠĠĠĠ Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. vertical Scroll ( remember Scroll State ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( Patient Profile Sections BackgroundColor ) ĊĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠPersonal ĠData : Ġe . g . Ġsex , Ġage , Ġdo b ĊĠĠĠĠĠĠĠ ĠPersonal Data ( profile ViewData ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPatient Ġtasks : ĠList Ġof Ġtasks Ġfor Ġthe Ġpatients ĊĠĠĠĠĠĠĠ Ġif Ġ( profile ViewData . tasks . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠProfile Card ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġstring Resource ( R . string . tasks ). uppercase (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Action Click Ġ= Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile View Section Ġ= ĠPatient Profile View Section . TASK S ĊĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile ViewData . tasks . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProfile Action able Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Action Click Ġ= Ġ{ Ġtask Form Id , ĠtaskId Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpatient Profile ViewModel . on Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPatient Profile Event . Open Task Form ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Form Id Ġ= Ġtask Form Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtaskId Ġ= ĠtaskId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpatient Id Ġ= Ġprofile ViewData . logical Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠForms : ĠLoaded Ġfor Ġquest Ġapp ĊĠĠĠĠĠĠĠ Ġif Ġ( profile ViewData . forms . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠProfile Card ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġstring Resource ( R . string . forms ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Action Click Ġ= Ġ{ Ġpatient Profile ViewModel . on Event ( Patient Profile Event . See All ( it )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile View Section Ġ= ĠPatient Profile View Section . FOR MS ĊĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile ViewData . forms . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠForm Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Button Data Ġ= Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Form Click Ġ= Ġ{ Ġquestion naire Id , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpatient Profile ViewModel . on Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPatient Profile Event . Load Questionnaire ( question naire Id , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠMedical ĠHistory : ĠShow Ġmedic ation Ġhistory Ġfor Ġthe Ġpatient ĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġadd Ġhandled Ġevents Ġfor Ġall Ġitems Ġaction Ġclick ĊĠĠĠĠĠĠĠ Ġif Ġ( profile ViewData . medical History Data . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠProfile Card ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġstring Resource ( R . string . medical _ history ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Action Click Ġ= Ġ{ Ġpatient Profile ViewModel . on Event ( Patient Profile Event . See All ( it )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile View Section Ġ= ĠPatient Profile View Section . MED ICAL _ HISTORY ĊĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile ViewData . medical History Data . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProfile Action able Item ( it , Ġon Action Click Ġ= Ġ{ Ġ_, Ġ_ Ġ-> Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠUp coming ĠServices : ĠDisplay Ġupcoming Ġservices Ġ( or Ġtasks ) Ġfor Ġthe Ġpatient ĊĠĠĠĠĠĠĠ Ġif Ġ( profile ViewData . up coming Services . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠProfile Card ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġstring Resource ( R . string . up coming _ services ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Action Click Ġ= Ġ{ Ġpatient Profile ViewModel . on Event ( Patient Profile Event . See All ( it )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile View Section Ġ= ĠPatient Profile View Section . UP COM ING _ SERVICES ĊĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile ViewData . up coming Services . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProfile Action able Item ( it , Ġon Action Click Ġ= Ġ{ Ġ_, Ġ_ Ġ-> Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠService ĠCard : ĠDisplay Ġother Ġv ital Ġinformation Ġfor ĠAN C / P NC ĊĠĠĠĠĠĠĠ Ġif Ġ( profile ViewData . anc Card Data . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠProfile Card ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġstring Resource ( R . string . service _ card ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Action Click Ġ= Ġ{ Ġpatient Profile ViewModel . on Event ( Patient Profile Event . See All ( it )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile View Section Ġ= ĠPatient Profile View Section . SERVICE _ CARD ĊĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile ViewData . anc Card Data . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProfile Action able Item ( it , Ġon Action Click Ġ= Ġ{ Ġ_, Ġ_ Ġ-> Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ