@openmrs/esm-patient-programs-app 3.0.3-pre.989 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/169.js +1 -1
  2. package/dist/169.js.map +1 -1
  3. package/dist/206.js +3 -0
  4. package/dist/206.js.LICENSE.txt +14 -0
  5. package/dist/206.js.map +1 -0
  6. package/dist/313.js +1 -1
  7. package/dist/313.js.map +1 -1
  8. package/dist/339.js +1 -1
  9. package/dist/339.js.map +1 -1
  10. package/dist/364.js +1 -1
  11. package/dist/364.js.map +1 -1
  12. package/dist/373.js +1 -1
  13. package/dist/482.js +2 -0
  14. package/dist/482.js.map +1 -0
  15. package/dist/539.js +1 -1
  16. package/dist/539.js.map +1 -1
  17. package/dist/574.js +1 -1
  18. package/dist/600.js +1 -1
  19. package/dist/600.js.map +1 -1
  20. package/dist/628.js +3 -0
  21. package/dist/{970.js.LICENSE.txt → 628.js.LICENSE.txt} +0 -0
  22. package/dist/628.js.map +1 -0
  23. package/dist/78.js +3 -0
  24. package/dist/{906.js.LICENSE.txt → 78.js.LICENSE.txt} +0 -0
  25. package/dist/78.js.map +1 -0
  26. package/dist/9.js +1 -1
  27. package/dist/9.js.map +1 -1
  28. package/dist/932.js +1 -1
  29. package/dist/932.js.map +1 -1
  30. package/dist/943.js +1 -1
  31. package/dist/943.js.map +1 -1
  32. package/dist/968.js +1 -1
  33. package/dist/968.js.map +1 -1
  34. package/dist/openmrs-esm-patient-programs-app.js +1 -1
  35. package/dist/openmrs-esm-patient-programs-app.js.buildmanifest.json +95 -118
  36. package/dist/openmrs-esm-patient-programs-app.js.map +1 -1
  37. package/package.json +3 -3
  38. package/src/index.ts +1 -5
  39. package/translations/en.json +0 -3
  40. package/dist/413.js +0 -2
  41. package/dist/413.js.map +0 -1
  42. package/dist/622.js +0 -2
  43. package/dist/622.js.map +0 -1
  44. package/dist/817.js +0 -3
  45. package/dist/817.js.LICENSE.txt +0 -8
  46. package/dist/817.js.map +0 -1
  47. package/dist/906.js +0 -3
  48. package/dist/906.js.map +0 -1
  49. package/dist/970.js +0 -3
  50. package/dist/970.js.map +0 -1
  51. package/src/programs/program-record.component.tsx +0 -93
  52. package/src/programs/program-record.css +0 -42
  53. package/src/programs/program-record.test.outdated.tsx +0 -57
package/dist/313.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_openmrs_esm_patient_programs_app=self.webpackChunk_openmrs_esm_patient_programs_app||[]).push([[313],{7313:(e,t,a)=>{a.r(t),a.d(t,{default:()=>S});var r=a(9902),l=a.n(r),n=a(8011),o=a(6007),s=a(9035),i=a(8580),d=a(1145),m=a(7030),c=a(160),p=a(6266),u=a(6091),g=a(364),h=a(7500),E=a(8345),Z=a(1358),b=a(2427),y=a(3783),k=a(3863),P=a(8827),f=a(819),C=a(3771),w=a(4924),v=a(5873);function _(){return _=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var r in a)Object.prototype.hasOwnProperty.call(a,r)&&(e[r]=a[r])}return e},_.apply(this,arguments)}const S=e=>{let{patientUuid:t,basePath:a}=e;const{t:r}=(0,w.useTranslation)(),S=r("programs","Program enrollments"),T=r("carePrograms","Care Programs"),D=r("seeAll","See all"),A=window.spaBase+a+"/programs",{data:O,isError:I,isLoading:N,isValidating:$}=(0,v.Bw)(t),H=O?.filter((e=>!e.dateCompleted)),{data:L}=(0,v.oI)(),j=(0,k.Z)(L,(e=>!(0,P.Z)((0,f.Z)(O,"program.uuid"),e.uuid))),{results:x,goTo:z,currentPage:B}=(0,s.usePagination)(O??[],5),U=l().useCallback((()=>(0,C.launchPatientWorkspace)("programs-form-workspace")),[]),W=[{key:"display",header:r("activePrograms","Active programs")},{key:"location",header:r("location","Location")},{key:"dateEnrolled",header:r("dateEnrolled","Date enrolled")},{key:"status",header:r("status","Status")}],F=l().useMemo((()=>x?.map((e=>({id:e.uuid,display:e.display,location:e.location?.display,dateEnrolled:(0,s.formatDatetime)(new Date(e.dateEnrolled)),status:e.dateCompleted?`${r("completedOn","Completed On")} ${(0,s.formatDate)(new Date(e.dateCompleted))}`:r("active","Active")})))),[x,r]);return N?l().createElement(i.Z,{role:"progressbar"}):I?l().createElement(C.ErrorState,{error:I,headerTitle:T}):H?.length?l().createElement("div",{className:o.Z.widgetCard},l().createElement(C.CardHeader,{title:T},l().createElement("span",null,$?l().createElement(d.Z,null):null),l().createElement(m.Z,{kind:"ghost",renderIcon:n.Z,iconDescription:"Add programs",onClick:U,disabled:L?.length&&0===j?.length},r("add","Add"))),l().createElement(c.Z,null,L?.length&&0===j?.length&&l().createElement(p.K0,{style:{minWidth:"100%",margin:"0rem",padding:"0rem"},kind:"info",lowContrast:!0,subtitle:r("noEligibleEnrollments","There are no more programs left to enroll this patient in"),title:r("fullyEnrolled","Enrolled in all programs")}),l().createElement(u.ZP,{rows:F,headers:W,isSortable:!0,size:"short"},(e=>{let{rows:t,headers:a,getHeaderProps:r,getTableProps:n}=e;return l().createElement(g.Z,_({},n(),{useZebraStyles:!0}),l().createElement(h.Z,null,l().createElement(E.Z,null,a.map((e=>l().createElement(Z.Z,_({className:`${o.Z.productiveHeading01} ${o.Z.text02}`},r({header:e,isSortable:e.isSortable})),e.header?.content??e.header))))),l().createElement(b.Z,null,t.map((e=>l().createElement(E.Z,{key:e.id},e.cells.map((e=>l().createElement(y.Z,{key:e.id},e.value?.content??e.value))))))))}))),l().createElement(C.PatientChartPagination,{currentItems:x.length,onPageNumberChange:e=>{let{page:t}=e;return z(t)},pageNumber:B,pageSize:5,pageUrl:A,totalItems:O.length,urlLabel:D})):l().createElement(C.EmptyState,{displayText:S,headerTitle:T,launchForm:U})}}}]);
1
+ "use strict";(self.webpackChunk_openmrs_esm_patient_programs_app=self.webpackChunk_openmrs_esm_patient_programs_app||[]).push([[313],{7313:(e,t,a)=>{a.r(t),a.d(t,{default:()=>S});var r=a(9902),l=a.n(r),n=a(8011),o=a(6007),s=a(9035),i=a(8580),d=a(1145),m=a(7030),c=a(160),p=a(6266),u=a(451),g=a(364),h=a(7500),E=a(8345),Z=a(1358),b=a(2427),y=a(3783),k=a(3863),P=a(8827),f=a(819),C=a(3771),w=a(4924),v=a(5873);function _(){return _=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var r in a)Object.prototype.hasOwnProperty.call(a,r)&&(e[r]=a[r])}return e},_.apply(this,arguments)}const S=e=>{let{patientUuid:t,basePath:a}=e;const{t:r}=(0,w.useTranslation)(),S=r("programs","Program enrollments"),T=r("carePrograms","Care Programs"),D=r("seeAll","See all"),A=window.spaBase+a+"/programs",{data:O,isError:I,isLoading:N,isValidating:$}=(0,v.Bw)(t),H=O?.filter((e=>!e.dateCompleted)),{data:L}=(0,v.oI)(),j=(0,k.Z)(L,(e=>!(0,P.Z)((0,f.Z)(O,"program.uuid"),e.uuid))),{results:x,goTo:z,currentPage:B}=(0,s.usePagination)(O??[],5),U=l().useCallback((()=>(0,C.launchPatientWorkspace)("programs-form-workspace")),[]),W=[{key:"display",header:r("activePrograms","Active programs")},{key:"location",header:r("location","Location")},{key:"dateEnrolled",header:r("dateEnrolled","Date enrolled")},{key:"status",header:r("status","Status")}],F=l().useMemo((()=>x?.map((e=>({id:e.uuid,display:e.display,location:e.location?.display,dateEnrolled:(0,s.formatDatetime)(new Date(e.dateEnrolled)),status:e.dateCompleted?`${r("completedOn","Completed On")} ${(0,s.formatDate)(new Date(e.dateCompleted))}`:r("active","Active")})))),[x,r]);return N?l().createElement(i.Z,{role:"progressbar"}):I?l().createElement(C.ErrorState,{error:I,headerTitle:T}):H?.length?l().createElement("div",{className:o.Z.widgetCard},l().createElement(C.CardHeader,{title:T},l().createElement("span",null,$?l().createElement(d.Z,null):null),l().createElement(m.Z,{kind:"ghost",renderIcon:n.Z,iconDescription:"Add programs",onClick:U,disabled:L?.length&&0===j?.length},r("add","Add"))),l().createElement(c.Z,null,L?.length&&0===j?.length&&l().createElement(p.K0,{style:{minWidth:"100%",margin:"0rem",padding:"0rem"},kind:"info",lowContrast:!0,subtitle:r("noEligibleEnrollments","There are no more programs left to enroll this patient in"),title:r("fullyEnrolled","Enrolled in all programs")}),l().createElement(u.ZP,{rows:F,headers:W,isSortable:!0,size:"short"},(e=>{let{rows:t,headers:a,getHeaderProps:r,getTableProps:n}=e;return l().createElement(g.Z,_({},n(),{useZebraStyles:!0}),l().createElement(h.Z,null,l().createElement(E.Z,null,a.map((e=>l().createElement(Z.Z,_({className:`${o.Z.productiveHeading01} ${o.Z.text02}`},r({header:e,isSortable:e.isSortable})),e.header?.content??e.header))))),l().createElement(b.Z,null,t.map((e=>l().createElement(E.Z,{key:e.id},e.cells.map((e=>l().createElement(y.Z,{key:e.id},e.value?.content??e.value))))))))}))),l().createElement(C.PatientChartPagination,{currentItems:x.length,onPageNumberChange:e=>{let{page:t}=e;return z(t)},pageNumber:B,pageSize:5,pageUrl:A,totalItems:O.length,urlLabel:D})):l().createElement(C.EmptyState,{displayText:S,headerTitle:T,launchForm:U})}}}]);
2
2
  //# sourceMappingURL=313.js.map
package/dist/313.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"313.js","mappings":"ymBAgCA,MAoIA,EA7H0D,IAA+B,IAA9B,YAAEA,EAAF,SAAeC,GAAe,EACvF,MAAM,EAAEC,IAAMC,EAAAA,EAAAA,kBACRC,EAAcF,EAAE,WAAY,uBAC5BG,EAAcH,EAAE,eAAgB,iBAChCI,EAAWJ,EAAE,SAAU,WACvBK,EAAUC,OAAOC,QAAUR,EAAW,aAEpCS,KAAMC,EAAR,QAAqBC,EAArB,UAA8BC,EAA9B,aAAyCC,IAAiBC,EAAAA,EAAAA,IAAef,GACzEgB,EAAoBL,GAAaM,QAAQC,IAAgBA,EAAWC,iBAElET,KAAMU,IAAsBC,EAAAA,EAAAA,MAE9BC,GAAmBL,EAAAA,EAAAA,GACvBG,GACCG,KAAaC,EAAAA,EAAAA,IAASC,EAAAA,EAAAA,GAAId,EAAa,gBAAiBY,EAAQG,SAG3DC,QAASC,EAAX,KAAiCC,EAAjC,YAAuCC,IAAgBC,EAAAA,EAAAA,eAAcpB,GAAe,GAxBhE,GA0BpBqB,EAAqBC,IAAAA,aAAkB,KAAMC,EAAAA,EAAAA,wBAAuB,4BAA4B,IAEhGC,EAAe,CACnB,CACEC,IAAK,UACLC,OAAQnC,EAAE,iBAAkB,oBAE9B,CACEkC,IAAK,WACLC,OAAQnC,EAAE,WAAY,aAExB,CACEkC,IAAK,eACLC,OAAQnC,EAAE,eAAgB,kBAE5B,CACEkC,IAAK,SACLC,OAAQnC,EAAE,SAAU,YAIlBoC,EAAYL,IAAAA,SAAc,IACvBL,GAAsBH,KAAKP,IAAD,CAC/BqB,GAAIrB,EAAWQ,KACfc,QAAStB,EAAWsB,QACpBC,SAAUvB,EAAWuB,UAAUD,QAC/BE,cAAcC,EAAAA,EAAAA,gBAAe,IAAIC,KAAK1B,EAAWwB,eACjDG,OAAQ3B,EAAWC,cACd,GAAEjB,EAAE,cAAe,oBAAmB4C,EAAAA,EAAAA,YAAW,IAAIF,KAAK1B,EAAWC,kBACtEjB,EAAE,SAAU,eAEjB,CAAC0B,EAAsB1B,IAE1B,OAAIW,EAAkB,kBAAC,IAAD,CAAmBkC,KAAK,gBAC1CnC,EAAgB,kBAAC,EAAAoC,WAAD,CAAYC,MAAOrC,EAASP,YAAaA,IACzDW,GAAmBkC,OAEnB,yBAAKC,UAAWC,EAAAA,EAAAA,YACd,kBAAC,EAAAC,WAAD,CAAYC,MAAOjD,GACjB,8BAAOS,EAAe,kBAAC,IAAD,MAAoB,MAC1C,kBAAC,IAAD,CACEyC,KAAK,QACLC,WAAYC,EAAAA,EACZC,gBAAgB,eAChBC,QAAS3B,EACT4B,SAAUxC,GAAmB8B,QAAuC,IAA7B5B,GAAkB4B,QAExDhD,EAAE,MAAO,SAGd,kBAAC,IAAD,KACGkB,GAAmB8B,QAAuC,IAA7B5B,GAAkB4B,QAC9C,kBAAC,KAAD,CACEW,MAAO,CAAEC,SAAU,OAAQC,OAAQ,OAAQC,QAAS,QACpDT,KAAM,OACNU,aAAa,EACbC,SAAUhE,EAAE,wBAAyB,6DACrCoD,MAAOpD,EAAE,gBAAiB,8BAG9B,kBAAC,KAAD,CAAWiE,KAAM7B,EAAW8B,QAASjC,EAAckC,YAAY,EAAMC,KAAK,UACvE,QAAC,KAAEH,EAAF,QAAQC,EAAR,eAAiBG,EAAjB,cAAiCC,GAAlC,SACC,kBAAC,IAAD,KAAWA,IAAX,CAA4BC,gBAAc,IACxC,kBAAC,IAAD,KACE,kBAAC,IAAD,KACGL,EAAQ3C,KAAKY,GACZ,kBAAC,IAAD,GACEc,UAAY,GAAEC,EAAAA,EAAAA,uBAA8BA,EAAAA,EAAAA,UACxCmB,EAAe,CACjBlC,OAAAA,EACAgC,WAAYhC,EAAOgC,cAGpBhC,EAAOA,QAAQqC,SAAWrC,EAAOA,YAK1C,kBAAC,IAAD,KACG8B,EAAK1C,KAAKkD,GACT,kBAAC,IAAD,CAAUvC,IAAKuC,EAAIpC,IAChBoC,EAAIC,MAAMnD,KAAKoD,GACd,kBAAC,IAAD,CAAWzC,IAAKyC,EAAKtC,IAAKsC,EAAKC,OAAOJ,SAAWG,EAAKC,kBAStE,kBAAC,EAAAC,uBAAD,CACEC,aAAcpD,EAAqBsB,OACnC+B,mBAAoB,QAAC,KAAEC,GAAH,SAAcrD,EAAKqD,IACvCC,WAAYrD,EACZsD,SAzHkB,EA0HlB7E,QAASA,EACT8E,WAAY1E,EAAYuC,OACxB5C,SAAUA,KAKX,kBAAC,EAAAgF,WAAD,CAAYlF,YAAaA,EAAaC,YAAaA,EAAakF,WAAYvD","sources":["webpack://@openmrs/esm-patient-programs-app/./src/programs/programs-overview.component.tsx"],"sourcesContent":["import React from 'react';\nimport dayjs from 'dayjs';\nimport Add16 from '@carbon/icons-react/es/add/16';\nimport styles from './programs-overview.scss';\nimport { formatDate, formatDatetime, usePagination } from '@openmrs/esm-framework';\nimport {\n DataTable,\n DataTableSkeleton,\n Button,\n InlineLoading,\n Table,\n TableCell,\n TableContainer,\n TableBody,\n TableHead,\n TableHeader,\n TableRow,\n InlineNotification,\n} from 'carbon-components-react';\nimport filter from 'lodash-es/filter';\nimport includes from 'lodash-es/includes';\nimport map from 'lodash-es/map';\nimport {\n CardHeader,\n EmptyState,\n ErrorState,\n PatientChartPagination,\n launchPatientWorkspace,\n} from '@openmrs/esm-patient-common-lib';\nimport { useTranslation } from 'react-i18next';\nimport { useAvailablePrograms, useEnrollments } from './programs.resource';\n\nconst programsToShowCount = 5;\n\ninterface ProgramsOverviewProps {\n basePath: string;\n patientUuid: string;\n}\n\nconst ProgramsOverview: React.FC<ProgramsOverviewProps> = ({ patientUuid, basePath }) => {\n const { t } = useTranslation();\n const displayText = t('programs', 'Program enrollments');\n const headerTitle = t('carePrograms', 'Care Programs');\n const urlLabel = t('seeAll', 'See all');\n const pageUrl = window.spaBase + basePath + '/programs';\n\n const { data: enrollments, isError, isLoading, isValidating } = useEnrollments(patientUuid);\n const activeEnrollments = enrollments?.filter((enrollment) => !enrollment.dateCompleted);\n\n const { data: availablePrograms } = useAvailablePrograms();\n\n const eligiblePrograms = filter(\n availablePrograms,\n (program) => !includes(map(enrollments, 'program.uuid'), program.uuid),\n );\n\n const { results: paginatedEnrollments, goTo, currentPage } = usePagination(enrollments ?? [], programsToShowCount);\n\n const launchProgramsForm = React.useCallback(() => launchPatientWorkspace('programs-form-workspace'), []);\n\n const tableHeaders = [\n {\n key: 'display',\n header: t('activePrograms', 'Active programs'),\n },\n {\n key: 'location',\n header: t('location', 'Location'),\n },\n {\n key: 'dateEnrolled',\n header: t('dateEnrolled', 'Date enrolled'),\n },\n {\n key: 'status',\n header: t('status', 'Status'),\n },\n ];\n\n const tableRows = React.useMemo(() => {\n return paginatedEnrollments?.map((enrollment) => ({\n id: enrollment.uuid,\n display: enrollment.display,\n location: enrollment.location?.display,\n dateEnrolled: formatDatetime(new Date(enrollment.dateEnrolled)),\n status: enrollment.dateCompleted\n ? `${t('completedOn', 'Completed On')} ${formatDate(new Date(enrollment.dateCompleted))}`\n : t('active', 'Active'),\n }));\n }, [paginatedEnrollments, t]);\n\n if (isLoading) return <DataTableSkeleton role=\"progressbar\" />;\n if (isError) return <ErrorState error={isError} headerTitle={headerTitle} />;\n if (activeEnrollments?.length) {\n return (\n <div className={styles.widgetCard}>\n <CardHeader title={headerTitle}>\n <span>{isValidating ? <InlineLoading /> : null}</span>\n <Button\n kind=\"ghost\"\n renderIcon={Add16}\n iconDescription=\"Add programs\"\n onClick={launchProgramsForm}\n disabled={availablePrograms?.length && eligiblePrograms?.length === 0}\n >\n {t('add', 'Add')}\n </Button>\n </CardHeader>\n <TableContainer>\n {availablePrograms?.length && eligiblePrograms?.length === 0 && (\n <InlineNotification\n style={{ minWidth: '100%', margin: '0rem', padding: '0rem' }}\n kind={'info'}\n lowContrast={true}\n subtitle={t('noEligibleEnrollments', 'There are no more programs left to enroll this patient in')}\n title={t('fullyEnrolled', 'Enrolled in all programs')}\n />\n )}\n <DataTable rows={tableRows} headers={tableHeaders} isSortable={true} size=\"short\">\n {({ rows, headers, getHeaderProps, getTableProps }) => (\n <Table {...getTableProps()} useZebraStyles>\n <TableHead>\n <TableRow>\n {headers.map((header) => (\n <TableHeader\n className={`${styles.productiveHeading01} ${styles.text02}`}\n {...getHeaderProps({\n header,\n isSortable: header.isSortable,\n })}\n >\n {header.header?.content ?? header.header}\n </TableHeader>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {rows.map((row) => (\n <TableRow key={row.id}>\n {row.cells.map((cell) => (\n <TableCell key={cell.id}>{cell.value?.content ?? cell.value}</TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </DataTable>\n </TableContainer>\n <PatientChartPagination\n currentItems={paginatedEnrollments.length}\n onPageNumberChange={({ page }) => goTo(page)}\n pageNumber={currentPage}\n pageSize={programsToShowCount}\n pageUrl={pageUrl}\n totalItems={enrollments.length}\n urlLabel={urlLabel}\n />\n </div>\n );\n }\n return <EmptyState displayText={displayText} headerTitle={headerTitle} launchForm={launchProgramsForm} />;\n};\n\nexport default ProgramsOverview;\n"],"names":["patientUuid","basePath","t","useTranslation","displayText","headerTitle","urlLabel","pageUrl","window","spaBase","data","enrollments","isError","isLoading","isValidating","useEnrollments","activeEnrollments","filter","enrollment","dateCompleted","availablePrograms","useAvailablePrograms","eligiblePrograms","program","includes","map","uuid","results","paginatedEnrollments","goTo","currentPage","usePagination","launchProgramsForm","React","launchPatientWorkspace","tableHeaders","key","header","tableRows","id","display","location","dateEnrolled","formatDatetime","Date","status","formatDate","role","ErrorState","error","length","className","styles","CardHeader","title","kind","renderIcon","Add16","iconDescription","onClick","disabled","style","minWidth","margin","padding","lowContrast","subtitle","rows","headers","isSortable","size","getHeaderProps","getTableProps","useZebraStyles","content","row","cells","cell","value","PatientChartPagination","currentItems","onPageNumberChange","page","pageNumber","pageSize","totalItems","EmptyState","launchForm"],"sourceRoot":""}
1
+ {"version":3,"file":"313.js","mappings":"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","sources":["webpack://@openmrs/esm-patient-programs-app/./src/programs/programs-overview.component.tsx"],"sourcesContent":["import React from 'react';\nimport dayjs from 'dayjs';\nimport Add16 from '@carbon/icons-react/es/add/16';\nimport styles from './programs-overview.scss';\nimport { formatDate, formatDatetime, usePagination } from '@openmrs/esm-framework';\nimport {\n DataTable,\n DataTableSkeleton,\n Button,\n InlineLoading,\n Table,\n TableCell,\n TableContainer,\n TableBody,\n TableHead,\n TableHeader,\n TableRow,\n InlineNotification,\n} from 'carbon-components-react';\nimport filter from 'lodash-es/filter';\nimport includes from 'lodash-es/includes';\nimport map from 'lodash-es/map';\nimport {\n CardHeader,\n EmptyState,\n ErrorState,\n PatientChartPagination,\n launchPatientWorkspace,\n} from '@openmrs/esm-patient-common-lib';\nimport { useTranslation } from 'react-i18next';\nimport { useAvailablePrograms, useEnrollments } from './programs.resource';\n\nconst programsToShowCount = 5;\n\ninterface ProgramsOverviewProps {\n basePath: string;\n patientUuid: string;\n}\n\nconst ProgramsOverview: React.FC<ProgramsOverviewProps> = ({ patientUuid, basePath }) => {\n const { t } = useTranslation();\n const displayText = t('programs', 'Program enrollments');\n const headerTitle = t('carePrograms', 'Care Programs');\n const urlLabel = t('seeAll', 'See all');\n const pageUrl = window.spaBase + basePath + '/programs';\n\n const { data: enrollments, isError, isLoading, isValidating } = useEnrollments(patientUuid);\n const activeEnrollments = enrollments?.filter((enrollment) => !enrollment.dateCompleted);\n\n const { data: availablePrograms } = useAvailablePrograms();\n\n const eligiblePrograms = filter(\n availablePrograms,\n (program) => !includes(map(enrollments, 'program.uuid'), program.uuid),\n );\n\n const { results: paginatedEnrollments, goTo, currentPage } = usePagination(enrollments ?? [], programsToShowCount);\n\n const launchProgramsForm = React.useCallback(() => launchPatientWorkspace('programs-form-workspace'), []);\n\n const tableHeaders = [\n {\n key: 'display',\n header: t('activePrograms', 'Active programs'),\n },\n {\n key: 'location',\n header: t('location', 'Location'),\n },\n {\n key: 'dateEnrolled',\n header: t('dateEnrolled', 'Date enrolled'),\n },\n {\n key: 'status',\n header: t('status', 'Status'),\n },\n ];\n\n const tableRows = React.useMemo(() => {\n return paginatedEnrollments?.map((enrollment) => ({\n id: enrollment.uuid,\n display: enrollment.display,\n location: enrollment.location?.display,\n dateEnrolled: formatDatetime(new Date(enrollment.dateEnrolled)),\n status: enrollment.dateCompleted\n ? `${t('completedOn', 'Completed On')} ${formatDate(new Date(enrollment.dateCompleted))}`\n : t('active', 'Active'),\n }));\n }, [paginatedEnrollments, t]);\n\n if (isLoading) return <DataTableSkeleton role=\"progressbar\" />;\n if (isError) return <ErrorState error={isError} headerTitle={headerTitle} />;\n if (activeEnrollments?.length) {\n return (\n <div className={styles.widgetCard}>\n <CardHeader title={headerTitle}>\n <span>{isValidating ? <InlineLoading /> : null}</span>\n <Button\n kind=\"ghost\"\n renderIcon={Add16}\n iconDescription=\"Add programs\"\n onClick={launchProgramsForm}\n disabled={availablePrograms?.length && eligiblePrograms?.length === 0}\n >\n {t('add', 'Add')}\n </Button>\n </CardHeader>\n <TableContainer>\n {availablePrograms?.length && eligiblePrograms?.length === 0 && (\n <InlineNotification\n style={{ minWidth: '100%', margin: '0rem', padding: '0rem' }}\n kind={'info'}\n lowContrast={true}\n subtitle={t('noEligibleEnrollments', 'There are no more programs left to enroll this patient in')}\n title={t('fullyEnrolled', 'Enrolled in all programs')}\n />\n )}\n <DataTable rows={tableRows} headers={tableHeaders} isSortable={true} size=\"short\">\n {({ rows, headers, getHeaderProps, getTableProps }) => (\n <Table {...getTableProps()} useZebraStyles>\n <TableHead>\n <TableRow>\n {headers.map((header) => (\n <TableHeader\n className={`${styles.productiveHeading01} ${styles.text02}`}\n {...getHeaderProps({\n header,\n isSortable: header.isSortable,\n })}\n >\n {header.header?.content ?? header.header}\n </TableHeader>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {rows.map((row) => (\n <TableRow key={row.id}>\n {row.cells.map((cell) => (\n <TableCell key={cell.id}>{cell.value?.content ?? cell.value}</TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </DataTable>\n </TableContainer>\n <PatientChartPagination\n currentItems={paginatedEnrollments.length}\n onPageNumberChange={({ page }) => goTo(page)}\n pageNumber={currentPage}\n pageSize={programsToShowCount}\n pageUrl={pageUrl}\n totalItems={enrollments.length}\n urlLabel={urlLabel}\n />\n </div>\n );\n }\n return <EmptyState displayText={displayText} headerTitle={headerTitle} launchForm={launchProgramsForm} />;\n};\n\nexport default ProgramsOverview;\n"],"names":["patientUuid","basePath","t","useTranslation","displayText","headerTitle","urlLabel","pageUrl","window","spaBase","data","enrollments","isError","isLoading","isValidating","useEnrollments","activeEnrollments","filter","enrollment","dateCompleted","availablePrograms","useAvailablePrograms","eligiblePrograms","program","includes","map","uuid","results","paginatedEnrollments","goTo","currentPage","usePagination","launchProgramsForm","React","launchPatientWorkspace","tableHeaders","key","header","tableRows","id","display","location","dateEnrolled","formatDatetime","Date","status","formatDate","role","ErrorState","error","length","className","styles","CardHeader","title","kind","renderIcon","Add16","iconDescription","onClick","disabled","style","minWidth","margin","padding","lowContrast","subtitle","rows","headers","isSortable","size","getHeaderProps","getTableProps","useZebraStyles","content","row","cells","cell","value","PatientChartPagination","currentItems","onPageNumberChange","page","pageNumber","pageSize","totalItems","EmptyState","launchForm"],"sourceRoot":""}