@openmrs/esm-patient-programs-app 3.0.3-pre.963 → 3.0.3-pre.969

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.
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:()=>T});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(8804),Z=a(1358),b=a(2427),y=a(3783),k=a(3863),f=a(816),w=a(819),v=a(3907),C=a(4924),P=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 T=e=>{let{patientUuid:t,basePath:a}=e;const{t:r}=(0,C.useTranslation)(),T=r("programs","Program enrollments"),S=r("carePrograms","Care Programs"),D=r("seeAll","See all"),O=window.spaBase+a+"/programs",{data:A,isError:I,isLoading:N,isValidating:$}=(0,P.Bw)(t),L=A?.filter((e=>!e.dateCompleted)),{data:j}=(0,P.oI)(),x=(0,k.Z)(j,(e=>!(0,f.Z)((0,w.Z)(A,"program.uuid"),e.uuid))),{results:z,goTo:B,currentPage:H}=(0,s.usePagination)(L??[],5),U=l().useCallback((()=>(0,v.wn)("programs-form-workspace")),[]),F=[{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")}],K=l().useMemo((()=>z?.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")})))),[z,r]);return N?l().createElement(i.Z,{role:"progressbar"}):I?l().createElement(v.Te,{error:I,headerTitle:S}):L?.length?l().createElement("div",{className:o.Z.widgetCard},l().createElement(v.Ol,{title:S},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:j?.length&&0===x?.length},r("add","Add"))),l().createElement(c.Z,null,j?.length&&0===x?.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:K,headers:F,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(v.e1,{currentItems:z.length,onPageNumberChange:e=>{let{page:t}=e;return B(t)},pageNumber:H,pageSize:5,pageUrl:O,totalItems:L.length,urlLabel:D})):l().createElement(v.ub,{displayText:T,headerTitle:S,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:()=>T});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),f=a(8827),w=a(819),v=a(3907),C=a(4924),P=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 T=e=>{let{patientUuid:t,basePath:a}=e;const{t:r}=(0,C.useTranslation)(),T=r("programs","Program enrollments"),S=r("carePrograms","Care Programs"),D=r("seeAll","See all"),O=window.spaBase+a+"/programs",{data:A,isError:I,isLoading:N,isValidating:$}=(0,P.Bw)(t),L=A?.filter((e=>!e.dateCompleted)),{data:j}=(0,P.oI)(),x=(0,k.Z)(j,(e=>!(0,f.Z)((0,w.Z)(A,"program.uuid"),e.uuid))),{results:z,goTo:B,currentPage:H}=(0,s.usePagination)(A??[],5),U=l().useCallback((()=>(0,v.wn)("programs-form-workspace")),[]),F=[{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")}],K=l().useMemo((()=>z?.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")})))),[z,r]);return N?l().createElement(i.Z,{role:"progressbar"}):I?l().createElement(v.Te,{error:I,headerTitle:S}):L?.length?l().createElement("div",{className:o.Z.widgetCard},l().createElement(v.Ol,{title:S},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:j?.length&&0===x?.length},r("add","Add"))),l().createElement(c.Z,null,j?.length&&0===x?.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:K,headers:F,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(v.e1,{currentItems:z.length,onPageNumberChange:e=>{let{page:t}=e;return B(t)},pageNumber:H,pageSize:5,pageUrl:O,totalItems:A.length,urlLabel:D})):l().createElement(v.ub,{displayText:T,headerTitle:S,launchForm:U})}}}]);
2
2
  //# sourceMappingURL=313.js.map
package/dist/313.js.map CHANGED
@@ -1 +1 @@
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 {\n results: paginatedEnrollments,\n goTo,\n currentPage,\n } = usePagination(activeEnrollments ?? [], 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={activeEnrollments.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","error","length","className","styles","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","currentItems","onPageNumberChange","page","pageNumber","pageSize","totalItems","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","error","length","className","styles","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","currentItems","onPageNumberChange","page","pageNumber","pageSize","totalItems","launchForm"],"sourceRoot":""}