@kenyaemr/esm-express-workflow-app 5.4.4-pre.43 → 5.4.4-pre.430
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/.turbo/turbo-build.log +14 -7
- package/dist/1084.js +1 -0
- package/dist/1084.js.map +1 -0
- package/dist/1278.js +1 -0
- package/dist/1278.js.map +1 -0
- package/dist/1324.js +1 -0
- package/dist/1324.js.map +1 -0
- package/dist/1375.js +66 -0
- package/dist/1375.js.map +1 -0
- package/dist/1402.js +1 -0
- package/dist/1402.js.map +1 -0
- package/dist/1442.js +1 -0
- package/dist/1442.js.map +1 -0
- package/dist/1520.js +1 -0
- package/dist/1520.js.map +1 -0
- package/dist/1559.js +1 -0
- package/dist/1559.js.map +1 -0
- package/dist/1593.js +1 -0
- package/dist/1593.js.map +1 -0
- package/dist/162.js +1 -0
- package/dist/162.js.map +1 -0
- package/dist/1620.js +1 -0
- package/dist/1620.js.map +1 -0
- package/dist/1658.js +1 -0
- package/dist/1658.js.map +1 -0
- package/dist/1659.js +1 -0
- package/dist/1659.js.map +1 -0
- package/dist/1789.js +1 -0
- package/dist/1789.js.map +1 -0
- package/dist/1827.js +1 -0
- package/dist/1827.js.map +1 -0
- package/dist/1831.js +1 -0
- package/dist/1831.js.map +1 -0
- package/dist/1854.js +1 -0
- package/dist/1854.js.map +1 -0
- package/dist/196.js +1 -0
- package/dist/196.js.map +1 -0
- package/dist/2127.js +1 -0
- package/dist/2127.js.map +1 -0
- package/dist/2152.js +1 -0
- package/dist/2152.js.map +1 -0
- package/dist/2202.js +1 -0
- package/dist/2202.js.map +1 -0
- package/dist/221.js +1 -0
- package/dist/221.js.map +1 -0
- package/dist/2269.js +1 -0
- package/dist/2269.js.map +1 -0
- package/dist/2293.js +1 -0
- package/dist/2293.js.map +1 -0
- package/dist/234.js +1 -0
- package/dist/234.js.map +1 -0
- package/dist/2412.js +1 -1
- package/dist/2412.js.map +1 -1
- package/dist/2466.js +1 -0
- package/dist/2466.js.map +1 -0
- package/dist/2534.js +1 -1
- package/dist/2534.js.map +1 -1
- package/dist/2553.js +1 -0
- package/dist/2553.js.map +1 -0
- package/dist/2556.js +1 -0
- package/dist/2556.js.map +1 -0
- package/dist/2648.js +1 -0
- package/dist/2648.js.map +1 -0
- package/dist/274.js +1 -0
- package/dist/274.js.map +1 -0
- package/dist/2788.js +1 -0
- package/dist/2788.js.map +1 -0
- package/dist/2842.js +1 -0
- package/dist/2842.js.map +1 -0
- package/dist/2874.js +1 -0
- package/dist/2874.js.map +1 -0
- package/dist/2916.js +1 -0
- package/dist/2916.js.map +1 -0
- package/dist/2947.js +1 -1
- package/dist/2947.js.map +1 -1
- package/dist/3012.js +1 -0
- package/dist/3012.js.map +1 -0
- package/dist/3087.js +1 -0
- package/dist/3087.js.map +1 -0
- package/dist/3335.js +1 -0
- package/dist/3335.js.map +1 -0
- package/dist/3378.js +1 -0
- package/dist/3378.js.map +1 -0
- package/dist/3504.js +1 -0
- package/dist/3504.js.map +1 -0
- package/dist/3509.js +1 -1
- package/dist/3509.js.map +1 -1
- package/dist/356.js +1 -0
- package/dist/356.js.map +1 -0
- package/dist/3690.js +1 -0
- package/dist/3690.js.map +1 -0
- package/dist/371.js +1 -0
- package/dist/371.js.map +1 -0
- package/dist/3747.js +1 -0
- package/dist/3747.js.map +1 -0
- package/dist/3819.js +1 -0
- package/dist/3819.js.map +1 -0
- package/dist/3820.js +1 -0
- package/dist/3820.js.map +1 -0
- package/dist/3910.js +1 -0
- package/dist/3910.js.map +1 -0
- package/dist/393.js +6 -0
- package/dist/393.js.map +1 -0
- package/dist/3933.js +1 -0
- package/dist/3933.js.map +1 -0
- package/dist/3989.js +1 -0
- package/dist/3989.js.map +1 -0
- package/dist/3995.js +1 -0
- package/dist/3995.js.map +1 -0
- package/dist/4032.js +1 -0
- package/dist/4032.js.map +1 -0
- package/dist/4145.js +1 -1
- package/dist/4145.js.map +1 -1
- package/dist/4178.js +1 -1
- package/dist/4178.js.map +1 -1
- package/dist/4191.js +1 -0
- package/dist/4191.js.map +1 -0
- package/dist/4212.js +1 -0
- package/dist/4212.js.map +1 -0
- package/dist/4215.js +1 -0
- package/dist/4215.js.map +1 -0
- package/dist/4523.js +1 -0
- package/dist/4523.js.map +1 -0
- package/dist/4588.js +1 -0
- package/dist/4588.js.map +1 -0
- package/dist/4617.js +1 -0
- package/dist/4617.js.map +1 -0
- package/dist/466.js +1 -1
- package/dist/466.js.map +1 -1
- package/dist/4688.js +1 -0
- package/dist/{7288.js.map → 4688.js.map} +1 -1
- package/dist/470.js +1 -0
- package/dist/470.js.map +1 -0
- package/dist/4759.js +1 -0
- package/dist/4759.js.map +1 -0
- package/dist/4818.js +1 -1
- package/dist/4818.js.map +1 -1
- package/dist/5086.js +1 -1
- package/dist/5086.js.map +1 -1
- package/dist/5093.js +1 -0
- package/dist/5093.js.map +1 -0
- package/dist/5097.js +1 -0
- package/dist/5097.js.map +1 -0
- package/dist/510.js +1 -0
- package/dist/510.js.map +1 -0
- package/dist/5117.js +1 -0
- package/dist/5117.js.map +1 -0
- package/dist/5279.js +1 -0
- package/dist/5279.js.map +1 -0
- package/dist/5434.js +1 -0
- package/dist/5434.js.map +1 -0
- package/dist/5514.js +1 -0
- package/dist/5514.js.map +1 -0
- package/dist/5568.js +1 -0
- package/dist/5568.js.map +1 -0
- package/dist/5576.js +1 -1
- package/dist/5576.js.map +1 -1
- package/dist/5630.js +1 -0
- package/dist/5630.js.map +1 -0
- package/dist/5676.js +1 -1
- package/dist/5676.js.map +1 -1
- package/dist/5695.js +1 -0
- package/dist/5695.js.map +1 -0
- package/dist/5697.js +1 -1
- package/dist/5697.js.map +1 -1
- package/dist/5728.js +1 -0
- package/dist/5728.js.map +1 -0
- package/dist/5809.js +1 -1
- package/dist/5809.js.map +1 -1
- package/dist/585.js +1 -0
- package/dist/585.js.map +1 -0
- package/dist/5887.js +1 -0
- package/dist/5887.js.map +1 -0
- package/dist/5958.js +1 -0
- package/dist/5958.js.map +1 -0
- package/dist/5964.js +1 -0
- package/dist/5964.js.map +1 -0
- package/dist/6008.js +1 -0
- package/dist/602.js +1 -0
- package/dist/602.js.map +1 -0
- package/dist/6020.js +1 -0
- package/dist/6020.js.map +1 -0
- package/dist/6161.js +1 -0
- package/dist/6161.js.map +1 -0
- package/dist/6273.js +1 -0
- package/dist/6273.js.map +1 -0
- package/dist/6337.js +1 -0
- package/dist/6337.js.map +1 -0
- package/dist/6427.js +1 -1
- package/dist/6427.js.map +1 -1
- package/dist/6429.js +1 -0
- package/dist/6429.js.map +1 -0
- package/dist/6478.js +7 -0
- package/dist/6478.js.map +1 -0
- package/dist/6508.js +1 -0
- package/dist/6508.js.map +1 -0
- package/dist/6634.js +1 -0
- package/dist/6634.js.map +1 -0
- package/dist/6767.js +1 -0
- package/dist/6767.js.map +1 -0
- package/dist/6783.js +1 -0
- package/dist/6783.js.map +1 -0
- package/dist/6868.js +1 -1
- package/dist/6868.js.map +1 -1
- package/dist/688.js +1 -0
- package/dist/688.js.map +1 -0
- package/dist/689.js +1 -1
- package/dist/689.js.map +1 -1
- package/dist/694.js +1 -0
- package/dist/694.js.map +1 -0
- package/dist/6987.js +1 -0
- package/dist/6987.js.map +1 -0
- package/dist/7061.js +1 -0
- package/dist/7061.js.map +1 -0
- package/dist/7078.js +1 -0
- package/dist/7078.js.map +1 -0
- package/dist/710.js +1 -0
- package/dist/710.js.map +1 -0
- package/dist/7128.js +1 -0
- package/dist/7128.js.map +1 -0
- package/dist/7209.js +1 -0
- package/dist/7209.js.map +1 -0
- package/dist/7424.js +1 -0
- package/dist/7424.js.map +1 -0
- package/dist/770.js +1 -0
- package/dist/770.js.map +1 -0
- package/dist/7707.js +1 -0
- package/dist/7707.js.map +1 -0
- package/dist/7784.js +1 -0
- package/dist/7784.js.map +1 -0
- package/dist/781.js +1 -1
- package/dist/781.js.map +1 -1
- package/dist/7824.js +1 -0
- package/dist/7824.js.map +1 -0
- package/dist/7832.js +1 -0
- package/dist/7832.js.map +1 -0
- package/dist/8178.js +1 -0
- package/dist/8178.js.map +1 -0
- package/dist/820.js +1 -0
- package/dist/820.js.map +1 -0
- package/dist/8224.js +1 -0
- package/dist/8224.js.map +1 -0
- package/dist/8225.js +1 -0
- package/dist/8225.js.map +1 -0
- package/dist/8240.js +1 -1
- package/dist/8240.js.map +1 -1
- package/dist/8258.js +1 -0
- package/dist/8258.js.map +1 -0
- package/dist/8702.js +1 -0
- package/dist/8702.js.map +1 -0
- package/dist/8725.js +1 -0
- package/dist/8725.js.map +1 -0
- package/dist/8762.js +1 -0
- package/dist/8762.js.map +1 -0
- package/dist/8763.js +1 -0
- package/dist/8763.js.map +1 -0
- package/dist/8815.js +1 -0
- package/dist/8815.js.map +1 -0
- package/dist/8882.js +1 -0
- package/dist/8882.js.map +1 -0
- package/dist/8924.js +1 -1
- package/dist/8924.js.map +1 -1
- package/dist/8937.js +1 -0
- package/dist/8937.js.map +1 -0
- package/dist/9.js +1 -1
- package/dist/9.js.map +1 -1
- package/dist/9061.js +1 -0
- package/dist/9061.js.map +1 -0
- package/dist/9087.js +1 -0
- package/dist/9087.js.map +1 -0
- package/dist/9301.js +1 -0
- package/dist/9301.js.map +1 -0
- package/dist/9324.js +1 -0
- package/dist/9324.js.map +1 -0
- package/dist/9497.js +1 -0
- package/dist/9497.js.map +1 -0
- package/dist/9520.js +1 -1
- package/dist/9520.js.map +1 -1
- package/dist/9526.js +1 -0
- package/dist/9526.js.map +1 -0
- package/dist/9621.js +1 -0
- package/dist/9621.js.map +1 -0
- package/dist/9676.js +17 -0
- package/dist/9676.js.map +1 -0
- package/dist/977.js +1 -0
- package/dist/977.js.map +1 -0
- package/dist/9771.js +1 -0
- package/dist/9771.js.map +1 -0
- package/dist/9806.js +1 -0
- package/dist/9806.js.map +1 -0
- package/dist/989.js +1 -0
- package/dist/989.js.map +1 -0
- package/dist/kenyaemr-esm-express-workflow-app.js +6 -5
- package/dist/kenyaemr-esm-express-workflow-app.js.buildmanifest.json +1407 -809
- package/dist/kenyaemr-esm-express-workflow-app.js.map +1 -1
- package/dist/main.js +22 -5
- package/dist/main.js.map +1 -1
- package/dist/routes.json +1 -1
- package/package.json +4 -6
- package/src/components/admissions/admissions-dashboard.component.tsx +2 -2
- package/src/components/anaesthetic/anaesthetic-dashboard.meta.ts +8 -0
- package/src/components/anaesthetic/anaesthetic-data-form.component.tsx +442 -0
- package/src/components/anaesthetic/anaesthetic-data-form.scss +278 -0
- package/src/components/anaesthetic/anaesthetic-link.component.tsx +21 -0
- package/src/components/anaesthetic/anaesthetic.component.tsx +618 -0
- package/src/components/anaesthetic/anaesthetic.resource.ts +1503 -0
- package/src/components/anaesthetic/anaesthetic.scss +1885 -0
- package/src/components/anaesthetic/forms/anaesthetic-form.component.tsx +304 -0
- package/src/components/anaesthetic/forms/anaesthetic-record-form.component.tsx +707 -0
- package/src/components/anaesthetic/forms/icd11-diagnosis-search.component.tsx +178 -0
- package/src/components/anaesthetic/forms/icd11-diagnosis-search.scss +126 -0
- package/src/components/anaesthetic/forms/index.ts +2 -0
- package/src/components/anaesthetic/forms/interoperative-record-drug-given-form.component.tsx +231 -0
- package/src/components/anaesthetic/forms/post-operative-summary-form.component.tsx +171 -0
- package/src/components/anaesthetic/forms/time-picker-dropdown.component.tsx +202 -0
- package/src/components/anaesthetic/forms/time-picker-dropdown.scss +107 -0
- package/src/components/anaesthetic/forms/time-picker-with-clock.component.tsx +174 -0
- package/src/components/anaesthetic/forms/time-picker-with-clock.scss +178 -0
- package/src/components/anaesthetic/forms/useAnaestheticData.ts +16 -0
- package/src/components/anaesthetic/graphs/anaesthetic-graph-wrapper.component.tsx +266 -0
- package/src/components/anaesthetic/graphs/anaesthetic-graph.component.tsx +185 -0
- package/src/components/anaesthetic/graphs/index.ts +2 -0
- package/src/components/anaesthetic/graphs/interoperative-record-drug-given-graph-wrapper.component.tsx +197 -0
- package/src/components/anaesthetic/graphs/interoperative-record-drug-given-graph.component.tsx +93 -0
- package/src/components/anaesthetic/resources/anaesthetic-amniotic-fluid.resource.ts +277 -0
- package/src/components/anaesthetic/resources/anaesthetic-form.resource.ts +716 -0
- package/src/components/anaesthetic/resources/anaesthetic.resource.ts +378 -0
- package/src/components/anaesthetic/types/index.ts +1349 -0
- package/src/components/consultation/clinical-encounter/clinical-encounter.component.tsx +4 -20
- package/src/components/consultation/clinical-encounter/encounter-details.component.tsx +9 -9
- package/src/components/consultation/clinical-encounter/encounter-details.test.tsx +19 -18
- package/src/components/consultation/consultation.utils.tsx +1 -1
- package/src/components/consultation/dashboard.component.tsx +0 -2
- package/src/components/consultation/index.ts +1 -1
- package/src/components/consultation/tabs/index.ts +67 -0
- package/src/components/facility-dashboard/components/header/home-header.component.tsx +8 -13
- package/src/components/laboratory/index.ts +11 -0
- package/src/components/laboratory/lab-table.component.tsx +46 -12
- package/src/components/laboratory/laboratory-tabs.component.tsx +3 -17
- package/src/components/mch/dashboard.component.tsx +0 -2
- package/src/components/mch/mch.component.tsx +1 -3
- package/src/components/pharmacy/index.ts +1 -1
- package/src/components/pharmacy/orders/pharmacy-orders.component.tsx +44 -6
- package/src/components/pharmacy/orders/pharmacy-orders.test.tsx +8 -7
- package/src/components/pharmacy/pharmacy-tabs.component.tsx +4 -20
- package/src/components/pharmacy/tabs/index.ts +21 -0
- package/src/components/preauth/index.ts +22 -0
- package/src/components/preauth/preauth-dashboard.component.tsx +20 -0
- package/src/components/procedures/index.ts +16 -0
- package/src/components/procedures/procedure-queues/index.ts +13 -0
- package/src/components/procedures/procedure-queues/procedure-form-extras.component.tsx +33 -0
- package/src/components/procedures/procedure-queues/procedure-form-extras.scss +5 -0
- package/src/components/procedures/procedure-queues/procedure-queues.component.tsx +35 -0
- package/src/components/procedures/procedure-queues/procedure-queues.resources.ts +37 -0
- package/src/components/procedures/procedure-queues/procedure-room-tabs.component.tsx +80 -0
- package/src/components/procedures/procedure-queues/procedure-rooms.scss +13 -0
- package/src/components/procedures/procedure-queues/queue-procedure-tabs.component.tsx +34 -0
- package/src/components/procedures/procedure-queues/summary-cards.component.tsx +81 -0
- package/src/components/procedures/procedure-queues/summary-cards.scss +35 -0
- package/src/components/procedures/procedures-table.component.tsx +77 -19
- package/src/components/procedures/procedures-tabs.component.test.tsx +57 -0
- package/src/components/procedures/procedures-tabs.component.tsx +3 -18
- package/src/components/radiology-and-imaging/index.ts +11 -0
- package/src/components/radiology-and-imaging/radiology-and-imaging-table.component.tsx +73 -21
- package/src/components/radiology-and-imaging/radiology-and-imaging.component.tsx +3 -19
- package/src/components/registration/card/HIE-card/hie-card.component.tsx +32 -44
- package/src/components/registration/card/Local-card/local-card.component.tsx +22 -24
- package/src/components/registration/checkin-form-extra/checkin-form-extra.extension.tsx +8 -2
- package/src/components/registration/checkin-form-extra/queue-fields.component.tsx +18 -19
- package/src/components/registration/dependants/dependants.component.tsx +37 -60
- package/src/components/registration/dependants/dependants.resource.ts +75 -46
- package/src/components/registration/end-visit-modal/end-visit-dialog.modal.tsx +320 -0
- package/src/components/registration/end-visit-modal/end-visit-dialog.scss +12 -0
- package/src/components/registration/end-visit-modal/end-visit.resource.tsx +59 -0
- package/src/components/registration/end-visit-modal/sha-end-visit.resource.ts +285 -0
- package/src/components/registration/search-bar/search-bar.resource.ts +32 -93
- package/src/components/registration/start-visit-form/hooks/useDefaultFacilityLocation.tsx +15 -0
- package/src/components/registration/start-visit-form/hooks/useDefaultVisitLocation.tsx +24 -0
- package/src/components/registration/start-visit-form/hooks/useOfflineVisitType.tsx +18 -0
- package/src/components/registration/start-visit-form/hooks/useRecommendedVisitTypes.tsx +36 -0
- package/src/components/registration/start-visit-form/hooks/useVisitAttributeType.tsx +102 -0
- package/src/components/registration/start-visit-form/overflow-menu-extension/custom-end-active-visit.extension.tsx +44 -0
- package/src/components/registration/start-visit-form/overflow-menu-extension/overflow-menu-item.extension.tsx +67 -0
- package/src/components/registration/start-visit-form/overflow-menu-extension/overflow-menu-item.scss +3 -0
- package/src/components/registration/start-visit-form/start-visit-workspace/base-visit-type.component.tsx +126 -0
- package/src/components/registration/start-visit-form/start-visit-workspace/base-visit-type.scss +75 -0
- package/src/components/registration/start-visit-form/start-visit-workspace/exported-visit-form.workspace.tsx +778 -0
- package/src/components/registration/start-visit-form/start-visit-workspace/location-selector.component.tsx +86 -0
- package/src/components/registration/start-visit-form/start-visit-workspace/recommended-visit-type.component.tsx +32 -0
- package/src/components/registration/start-visit-form/start-visit-workspace/visit-attribute-type.component.tsx +257 -0
- package/src/components/registration/start-visit-form/start-visit-workspace/visit-attribute-type.scss +5 -0
- package/src/components/registration/start-visit-form/start-visit-workspace/visit-date-time.component.tsx +193 -0
- package/src/components/registration/start-visit-form/start-visit-workspace/visit-form.resource.ts +390 -0
- package/src/components/registration/start-visit-form/start-visit-workspace/visit-form.scss +144 -0
- package/src/components/registration/start-visit-form/visit-form-workspace/visit-form.workspace.tsx +48 -0
- package/src/components/registration/type/index.ts +101 -0
- package/src/components/reports/index.ts +1 -0
- package/src/components/triage/dashboard.component.tsx +0 -2
- package/src/config-schema.ts +476 -0
- package/src/hooks/useOrders.tsx +2 -2
- package/src/hooks/useServiceQueues.tsx +1 -1
- package/src/index.ts +81 -15
- package/src/routes.json +298 -32
- package/src/shared/dashboard-link/dashboard-link.component.tsx +11 -8
- package/src/shared/orders/OrderTable.scss +7 -0
- package/src/shared/orders/OrderTable.tsx +68 -8
- package/src/shared/orders/print-order/print-order.component.tsx +158 -0
- package/src/shared/orders/print-order/print-order.scss +225 -0
- package/src/shared/orders/print-prescription/print-prescription.component.tsx +65 -0
- package/src/shared/orders/print-prescription/print-prescription.resource.ts +45 -0
- package/src/shared/orders/print-prescription/print-prescription.scss +25 -0
- package/src/shared/otp-verification/index.ts +112 -29
- package/src/shared/otp-verification/otp-verification.modal.tsx +1110 -122
- package/src/shared/otp-verification/otp-verification.scss +374 -0
- package/src/shared/patient-chart/patient-summary-dashboard/patient-summary-dashboard.component.tsx +5 -84
- package/src/shared/pin-put/pinput.component.test.tsx +7 -6
- package/src/shared/tabs/create-tab-extension.tsx +33 -0
- package/src/shared/tabs/extension-tabs.component.tsx +51 -33
- package/src/shared/utils/index.ts +140 -5
- package/src/types/index.ts +12 -0
- package/translations/am.json +443 -131
- package/translations/en.json +327 -15
- package/translations/fr.json +372 -63
- package/translations/sw.json +347 -35
- package/tsconfig.json +1 -0
- package/dist/1049.js +0 -1
- package/dist/1049.js.map +0 -1
- package/dist/1072.js +0 -1
- package/dist/1072.js.map +0 -1
- package/dist/1091.js +0 -1
- package/dist/1091.js.map +0 -1
- package/dist/1172.js +0 -1
- package/dist/1172.js.map +0 -1
- package/dist/132.js +0 -1
- package/dist/132.js.map +0 -1
- package/dist/1354.js +0 -1
- package/dist/1354.js.map +0 -1
- package/dist/1704.js +0 -1
- package/dist/1704.js.map +0 -1
- package/dist/1729.js +0 -17
- package/dist/1729.js.map +0 -1
- package/dist/1757.js +0 -1
- package/dist/1757.js.map +0 -1
- package/dist/1761.js +0 -1
- package/dist/1761.js.map +0 -1
- package/dist/1809.js +0 -7
- package/dist/1809.js.map +0 -1
- package/dist/1842.js +0 -1
- package/dist/1874.js +0 -1
- package/dist/1874.js.map +0 -1
- package/dist/1962.js +0 -1
- package/dist/1962.js.map +0 -1
- package/dist/2007.js +0 -1
- package/dist/2007.js.map +0 -1
- package/dist/2024.js +0 -1
- package/dist/2024.js.map +0 -1
- package/dist/2045.js +0 -1
- package/dist/2045.js.map +0 -1
- package/dist/2163.js +0 -1
- package/dist/2163.js.map +0 -1
- package/dist/2191.js +0 -1
- package/dist/2191.js.map +0 -1
- package/dist/2267.js +0 -1
- package/dist/2267.js.map +0 -1
- package/dist/231.js +0 -1
- package/dist/231.js.map +0 -1
- package/dist/236.js +0 -1
- package/dist/236.js.map +0 -1
- package/dist/2367.js +0 -1
- package/dist/2367.js.map +0 -1
- package/dist/2463.js +0 -1
- package/dist/2463.js.map +0 -1
- package/dist/2561.js +0 -1
- package/dist/2561.js.map +0 -1
- package/dist/2810.js +0 -2
- package/dist/2810.js.map +0 -1
- package/dist/2867.js +0 -1
- package/dist/2867.js.map +0 -1
- package/dist/2909.js +0 -1
- package/dist/2909.js.map +0 -1
- package/dist/2949.js +0 -1
- package/dist/2949.js.map +0 -1
- package/dist/3040.js +0 -1
- package/dist/3119.js +0 -1
- package/dist/3119.js.map +0 -1
- package/dist/3215.js +0 -1
- package/dist/3215.js.map +0 -1
- package/dist/322.js +0 -1
- package/dist/322.js.map +0 -1
- package/dist/3228.js +0 -1
- package/dist/3228.js.map +0 -1
- package/dist/330.js +0 -1
- package/dist/330.js.map +0 -1
- package/dist/3472.js +0 -1
- package/dist/3472.js.map +0 -1
- package/dist/351.js +0 -1
- package/dist/351.js.map +0 -1
- package/dist/3576.js +0 -1
- package/dist/3576.js.map +0 -1
- package/dist/397.js +0 -1
- package/dist/397.js.map +0 -1
- package/dist/4007.js +0 -66
- package/dist/4007.js.map +0 -1
- package/dist/4200.js +0 -1
- package/dist/4200.js.map +0 -1
- package/dist/4224.js +0 -1
- package/dist/4224.js.map +0 -1
- package/dist/43.js +0 -1
- package/dist/43.js.map +0 -1
- package/dist/4308.js +0 -1
- package/dist/4308.js.map +0 -1
- package/dist/4399.js +0 -1
- package/dist/4399.js.map +0 -1
- package/dist/4505.js +0 -1
- package/dist/4505.js.map +0 -1
- package/dist/4724.js +0 -1
- package/dist/4724.js.map +0 -1
- package/dist/498.js +0 -1
- package/dist/498.js.map +0 -1
- package/dist/509.js +0 -1
- package/dist/509.js.map +0 -1
- package/dist/5096.js +0 -1
- package/dist/5096.js.map +0 -1
- package/dist/5159.js +0 -13
- package/dist/5159.js.map +0 -1
- package/dist/5184.js +0 -1
- package/dist/5184.js.map +0 -1
- package/dist/5270.js +0 -1
- package/dist/5270.js.map +0 -1
- package/dist/5361.js +0 -1
- package/dist/5361.js.map +0 -1
- package/dist/5537.js +0 -1
- package/dist/5537.js.map +0 -1
- package/dist/566.js +0 -1
- package/dist/566.js.map +0 -1
- package/dist/5733.js +0 -1
- package/dist/5733.js.map +0 -1
- package/dist/5854.js +0 -1
- package/dist/5854.js.map +0 -1
- package/dist/5882.js +0 -1
- package/dist/6004.js +0 -1
- package/dist/6004.js.map +0 -1
- package/dist/6121.js +0 -3
- package/dist/6121.js.map +0 -1
- package/dist/6137.js +0 -1
- package/dist/6137.js.map +0 -1
- package/dist/6356.js +0 -1
- package/dist/6356.js.map +0 -1
- package/dist/6571.js +0 -1
- package/dist/6571.js.map +0 -1
- package/dist/6721.js +0 -1
- package/dist/6721.js.map +0 -1
- package/dist/6858.js +0 -1
- package/dist/6858.js.map +0 -1
- package/dist/6925.js +0 -1
- package/dist/6925.js.map +0 -1
- package/dist/6960.js +0 -1
- package/dist/6960.js.map +0 -1
- package/dist/7085.js +0 -1
- package/dist/7085.js.map +0 -1
- package/dist/7127.js +0 -1
- package/dist/7176.js +0 -1
- package/dist/7176.js.map +0 -1
- package/dist/7237.js +0 -1
- package/dist/7237.js.map +0 -1
- package/dist/725.js +0 -1
- package/dist/725.js.map +0 -1
- package/dist/7288.js +0 -1
- package/dist/7329.js +0 -1
- package/dist/7329.js.map +0 -1
- package/dist/7334.js +0 -1
- package/dist/7334.js.map +0 -1
- package/dist/7461.js +0 -1
- package/dist/7461.js.map +0 -1
- package/dist/7517.js +0 -1
- package/dist/7517.js.map +0 -1
- package/dist/7837.js +0 -1
- package/dist/7837.js.map +0 -1
- package/dist/8103.js +0 -1
- package/dist/8103.js.map +0 -1
- package/dist/8110.js +0 -1
- package/dist/8110.js.map +0 -1
- package/dist/8179.js +0 -6
- package/dist/8179.js.map +0 -1
- package/dist/8189.js +0 -1
- package/dist/8189.js.map +0 -1
- package/dist/8209.js +0 -1
- package/dist/8209.js.map +0 -1
- package/dist/8249.js +0 -1
- package/dist/8249.js.map +0 -1
- package/dist/8285.js +0 -1
- package/dist/8285.js.map +0 -1
- package/dist/8470.js +0 -1
- package/dist/8470.js.map +0 -1
- package/dist/8502.js +0 -1
- package/dist/8502.js.map +0 -1
- package/dist/866.js +0 -1
- package/dist/866.js.map +0 -1
- package/dist/8889.js +0 -11
- package/dist/8889.js.map +0 -1
- package/dist/8990.js +0 -1
- package/dist/8990.js.map +0 -1
- package/dist/8994.js +0 -1
- package/dist/8994.js.map +0 -1
- package/dist/9049.js +0 -1
- package/dist/9049.js.map +0 -1
- package/dist/9054.js +0 -1
- package/dist/9054.js.map +0 -1
- package/dist/916.js +0 -1
- package/dist/9231.js +0 -1
- package/dist/9231.js.map +0 -1
- package/dist/9408.js +0 -1
- package/dist/9408.js.map +0 -1
- package/dist/9425.js +0 -1
- package/dist/9466.js +0 -1
- package/dist/9466.js.map +0 -1
- package/dist/9919.js +0 -1
- package/dist/9919.js.map +0 -1
- package/dist/9931.js +0 -1
- package/dist/9931.js.map +0 -1
- package/jest.config.js +0 -3
- package/src/shared/orders/OrdersTabs.tsx +0 -58
- package/src/shared/patient-chart/patient-chart.component.tsx +0 -61
- package/src/shared/patient-chart/patient-chart.resources.ts +0 -180
- package/src/shared/patient-chart/patient-chart.scss +0 -15
- package/src/shared/patient-chart/useInitialize.ts +0 -24
- /package/src/shared/{patient-chart/patient-summary-dashboard → tabs}/patient-summary-dashboard.scss +0 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { render, screen } from '@testing-library/react';
|
|
2
|
+
import { beforeEach, describe, expect, it, vi, type MockedFunction } from 'vitest';
|
|
3
|
+
import '@testing-library/jest-dom';
|
|
4
|
+
import { usePatientOrders } from '../../hooks/useOrders';
|
|
5
|
+
import ProceduresTabs from './procedures-tabs.component';
|
|
6
|
+
import type { fhir } from '@openmrs/esm-framework';
|
|
7
|
+
|
|
8
|
+
vi.mock('@openmrs/esm-framework', () => ({
|
|
9
|
+
useConfig: vi.fn(() => ({
|
|
10
|
+
proceduresConceptClassUuid: 'procedures-concept-class-uuid',
|
|
11
|
+
imagingOrderTypeUuid: 'imaging-order-type-uuid',
|
|
12
|
+
})),
|
|
13
|
+
ExtensionSlot: () => <div data-testid="extension-slot" />,
|
|
14
|
+
}));
|
|
15
|
+
|
|
16
|
+
vi.mock('../../hooks/useOrders', () => ({
|
|
17
|
+
usePatientOrders: vi.fn(),
|
|
18
|
+
}));
|
|
19
|
+
|
|
20
|
+
vi.mock('./procedures-table.component', () => ({
|
|
21
|
+
default: () => <div data-testid="procedures-orders-table">Procedures Orders Table</div>,
|
|
22
|
+
}));
|
|
23
|
+
|
|
24
|
+
vi.mock('../anaesthetic/anaesthetic.component', () => ({
|
|
25
|
+
default: () => <div data-testid="anaesthetic-tab-content">Anaesthetic Content</div>,
|
|
26
|
+
}));
|
|
27
|
+
|
|
28
|
+
const mockUsePatientOrders = usePatientOrders as MockedFunction<typeof usePatientOrders>;
|
|
29
|
+
|
|
30
|
+
describe('ProceduresTabs', () => {
|
|
31
|
+
const mockPatient: fhir.Patient = {
|
|
32
|
+
resourceType: 'Patient',
|
|
33
|
+
id: 'test-patient-uuid',
|
|
34
|
+
name: [{ given: ['John'], family: 'Doe' }],
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
beforeEach(() => {
|
|
38
|
+
vi.clearAllMocks();
|
|
39
|
+
mockUsePatientOrders.mockReturnValue({
|
|
40
|
+
data: [],
|
|
41
|
+
isLoading: false,
|
|
42
|
+
error: undefined,
|
|
43
|
+
mutate: vi.fn(),
|
|
44
|
+
isValidating: false,
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('renders Orders, Results and Anaesthetic tabs', () => {
|
|
49
|
+
render(<ProceduresTabs patientUuid="test-patient-uuid" patient={mockPatient} />);
|
|
50
|
+
|
|
51
|
+
const tabs = screen.getAllByRole('tab');
|
|
52
|
+
expect(tabs).toHaveLength(3);
|
|
53
|
+
expect(screen.getByRole('tab', { name: 'Orders' })).toBeInTheDocument();
|
|
54
|
+
expect(screen.getByRole('tab', { name: 'Results' })).toBeInTheDocument();
|
|
55
|
+
expect(screen.getByRole('tab', { name: 'Anaesthetic' })).toBeInTheDocument();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
@@ -1,28 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { useConfig } from '@openmrs/esm-framework';
|
|
3
2
|
|
|
4
|
-
import
|
|
5
|
-
import LabTable from './procedures-table.component';
|
|
6
|
-
import { ExpressWorkflowConfig } from '../../config-schema';
|
|
3
|
+
import ExtensionTabs from '../../shared/tabs/extension-tabs.component';
|
|
7
4
|
|
|
8
5
|
type ProceduresTabsProps = {
|
|
9
6
|
patientUuid: string;
|
|
10
|
-
patient: fhir.Patient;
|
|
11
7
|
};
|
|
12
8
|
|
|
13
|
-
const ProceduresTabs: React.FC<ProceduresTabsProps> = ({ patientUuid
|
|
14
|
-
|
|
15
|
-
return (
|
|
16
|
-
<OrdersTabs
|
|
17
|
-
patientUuid={patientUuid}
|
|
18
|
-
patient={patient}
|
|
19
|
-
basePath="procedures"
|
|
20
|
-
resultsSlotName="ewf-procedures-results-slot"
|
|
21
|
-
orderTypeUuid={imagingOrderTypeUuid}
|
|
22
|
-
filter={(order) => order.concept?.conceptClass?.uuid === proceduresConceptClassUuid}
|
|
23
|
-
Table={({ orders }) => <LabTable orders={orders} />}
|
|
24
|
-
/>
|
|
25
|
-
);
|
|
9
|
+
const ProceduresTabs: React.FC<ProceduresTabsProps> = ({ patientUuid }) => {
|
|
10
|
+
return <ExtensionTabs extensionSlotName="patient-procedure-tabs-slot" patientUuid={patientUuid} />;
|
|
26
11
|
};
|
|
27
12
|
|
|
28
13
|
export default ProceduresTabs;
|
|
@@ -23,3 +23,14 @@ export const radiologyAndImagingLeftPanelLink = getAsyncLifecycle(
|
|
|
23
23
|
})),
|
|
24
24
|
options,
|
|
25
25
|
);
|
|
26
|
+
|
|
27
|
+
// t("results", "Results")
|
|
28
|
+
export const patientImagingOrdersResults = getAsyncLifecycle(
|
|
29
|
+
() => import('../../shared/tabs/create-tab-extension').then((mod) => ({ default: mod.createTabExtension() })),
|
|
30
|
+
options,
|
|
31
|
+
);
|
|
32
|
+
// t("order", "Orders")
|
|
33
|
+
export const patientImagingOrdersTab = getAsyncLifecycle(
|
|
34
|
+
() => import('../../components/radiology-and-imaging/radiology-and-imaging-table.component'),
|
|
35
|
+
options,
|
|
36
|
+
);
|
|
@@ -1,35 +1,78 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { parseDate, formatDatetime, useConfig } from '@openmrs/esm-framework';
|
|
3
|
-
import { CardHeader, EmptyState, useLaunchWorkspaceRequiringVisit } from '@openmrs/esm-patient-common-lib';
|
|
4
|
-
import { Add } from '@carbon/react/icons';
|
|
5
|
-
import { Layer } from '@carbon/react';
|
|
1
|
+
import React, { useMemo } from 'react';
|
|
6
2
|
import { useTranslation } from 'react-i18next';
|
|
3
|
+
import { DataTableSkeleton, Layer } from '@carbon/react';
|
|
4
|
+
import { ErrorState, FHIRResource, useConfig } from '@openmrs/esm-framework';
|
|
5
|
+
import { EmptyState, useLaunchWorkspaceRequiringVisit, usePatientChartStore } from '@openmrs/esm-patient-common-lib';
|
|
7
6
|
import OrderTable from '../../shared/orders/OrderTable';
|
|
8
|
-
|
|
9
|
-
import { type Order } from '../../types/order/order';
|
|
10
7
|
import { type ExpressWorkflowConfig } from '../../config-schema';
|
|
8
|
+
import { usePatientOrders } from '../../hooks/useOrders';
|
|
11
9
|
import styles from './radiology-and-imaging.scss';
|
|
10
|
+
import { getPatientPrintFields } from '../../shared/utils';
|
|
12
11
|
|
|
13
12
|
type RadiologyAndImagingTableProps = {
|
|
14
|
-
|
|
13
|
+
patientUuid: string;
|
|
14
|
+
patient: fhir.Patient;
|
|
15
15
|
};
|
|
16
|
-
|
|
16
|
+
|
|
17
|
+
const RadiologyAndImagingTable: React.FC<RadiologyAndImagingTableProps> = ({ patientUuid, patient }) => {
|
|
17
18
|
const { t } = useTranslation();
|
|
18
|
-
const { imagingOrderTypeUuid, imagingOrderableConceptSets } =
|
|
19
|
+
const { imagingOrderTypeUuid, imagingOrderableConceptSets, imagingConceptClassUuid } =
|
|
20
|
+
useConfig<ExpressWorkflowConfig>();
|
|
21
|
+
const {
|
|
22
|
+
data: orders,
|
|
23
|
+
isLoading,
|
|
24
|
+
error,
|
|
25
|
+
mutate: mutateOrders,
|
|
26
|
+
} = usePatientOrders(patientUuid, 'any', imagingOrderTypeUuid, undefined, undefined);
|
|
27
|
+
|
|
28
|
+
const filteredOrders = useMemo(
|
|
29
|
+
() => orders?.filter((order) => order.concept?.conceptClass?.uuid === imagingConceptClassUuid),
|
|
30
|
+
[imagingConceptClassUuid, orders],
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
const { mutateVisitContext, visitContext } = usePatientChartStore(patientUuid);
|
|
34
|
+
|
|
35
|
+
const windowProps = useMemo(() => ({ encounterUuid: filteredOrders?.[0]?.encounter?.uuid }), [filteredOrders]);
|
|
36
|
+
const groupProps = useMemo(
|
|
37
|
+
() => ({
|
|
38
|
+
patient,
|
|
39
|
+
patientUuid,
|
|
40
|
+
visitContext: visitContext,
|
|
41
|
+
mutateVisitContext: () => {
|
|
42
|
+
mutateOrders();
|
|
43
|
+
mutateVisitContext();
|
|
44
|
+
},
|
|
45
|
+
}),
|
|
46
|
+
[patient, patientUuid, visitContext, mutateOrders, mutateVisitContext],
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
const launchAddLabOrder = useLaunchWorkspaceRequiringVisit(patientUuid, 'order-basket');
|
|
50
|
+
|
|
51
|
+
const { patientName, patientId, patientAge } = getPatientPrintFields(patient);
|
|
19
52
|
|
|
20
|
-
|
|
53
|
+
if (isLoading) {
|
|
54
|
+
return <DataTableSkeleton />;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (error) {
|
|
58
|
+
return <ErrorState headerTitle={t('radiologyAndImagingOrders', 'Radiology & Imaging Orders')} error={error} />;
|
|
59
|
+
}
|
|
21
60
|
|
|
22
|
-
if (
|
|
61
|
+
if (filteredOrders?.length === 0) {
|
|
23
62
|
return (
|
|
24
63
|
<Layer>
|
|
25
64
|
<EmptyState
|
|
26
65
|
displayText={t('orders', 'Orders')}
|
|
27
66
|
headerTitle={t('radiologyAndImagingOrders', 'Radiology and Imaging Orders')}
|
|
28
67
|
launchForm={() =>
|
|
29
|
-
launchAddLabOrder(
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
68
|
+
launchAddLabOrder(
|
|
69
|
+
{
|
|
70
|
+
orderTypeUuid: imagingOrderTypeUuid,
|
|
71
|
+
orderableConceptSets: imagingOrderableConceptSets,
|
|
72
|
+
},
|
|
73
|
+
windowProps,
|
|
74
|
+
groupProps,
|
|
75
|
+
)
|
|
33
76
|
}
|
|
34
77
|
/>
|
|
35
78
|
</Layer>
|
|
@@ -39,17 +82,26 @@ const RadiologyAndImagingTable: React.FC<RadiologyAndImagingTableProps> = ({ ord
|
|
|
39
82
|
return (
|
|
40
83
|
<OrderTable
|
|
41
84
|
title={t('radiologyAndImagingOrders', 'Radiology & Imaging Orders')}
|
|
42
|
-
orders={
|
|
85
|
+
orders={filteredOrders ?? []}
|
|
43
86
|
onAdd={() =>
|
|
44
|
-
launchAddLabOrder(
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
87
|
+
launchAddLabOrder(
|
|
88
|
+
{
|
|
89
|
+
orderTypeUuid: imagingOrderTypeUuid,
|
|
90
|
+
orderableConceptSets: imagingOrderableConceptSets,
|
|
91
|
+
},
|
|
92
|
+
windowProps,
|
|
93
|
+
groupProps,
|
|
94
|
+
)
|
|
48
95
|
}
|
|
49
96
|
containerClassName={styles.labTableContainer}
|
|
50
97
|
tableCellClassName={styles.tableCell}
|
|
51
98
|
priorityPillClassName={styles.priorityPill}
|
|
52
99
|
statusPillClassName={styles.statusPill}
|
|
100
|
+
module="@kenyaemr/esm-imaging-orders-app"
|
|
101
|
+
orderType="radiology"
|
|
102
|
+
patientName={patientName}
|
|
103
|
+
patientId={patientId}
|
|
104
|
+
patientAge={patientAge}
|
|
53
105
|
/>
|
|
54
106
|
);
|
|
55
107
|
};
|
|
@@ -1,28 +1,12 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import
|
|
3
|
-
import OrdersTabs from '../../shared/orders/OrdersTabs';
|
|
4
|
-
import LabTable from './radiology-and-imaging-table.component';
|
|
5
|
-
import { ExpressWorkflowConfig } from '../../config-schema';
|
|
2
|
+
import ExtensionTabs from '../../shared/tabs/extension-tabs.component';
|
|
6
3
|
|
|
7
4
|
type RadiologyAndImagingTabsProps = {
|
|
8
5
|
patientUuid: string;
|
|
9
|
-
patient: fhir.Patient;
|
|
10
6
|
};
|
|
11
|
-
const imagingRadiologyConceptClassUuid = '8caa332c-efe4-4025-8b18-3398328e1323';
|
|
12
7
|
|
|
13
|
-
const RadiologyAndImagingTabs: React.FC<RadiologyAndImagingTabsProps> = ({ patientUuid
|
|
14
|
-
|
|
15
|
-
return (
|
|
16
|
-
<OrdersTabs
|
|
17
|
-
patientUuid={patientUuid}
|
|
18
|
-
patient={patient}
|
|
19
|
-
basePath="radiology-and-imaging"
|
|
20
|
-
resultsSlotName="ewf-radiology-and-imaging-results-slot"
|
|
21
|
-
orderTypeUuid={imagingOrderTypeUuid}
|
|
22
|
-
filter={(order) => order.concept?.conceptClass?.uuid === imagingRadiologyConceptClassUuid}
|
|
23
|
-
Table={({ orders }) => <LabTable orders={orders} />}
|
|
24
|
-
/>
|
|
25
|
-
);
|
|
8
|
+
const RadiologyAndImagingTabs: React.FC<RadiologyAndImagingTabsProps> = ({ patientUuid }) => {
|
|
9
|
+
return <ExtensionTabs extensionSlotName="patient-imaging-tabs-slot" patientUuid={patientUuid} />;
|
|
26
10
|
};
|
|
27
11
|
|
|
28
12
|
export default RadiologyAndImagingTabs;
|
|
@@ -7,13 +7,21 @@ import styles from '../card.scss';
|
|
|
7
7
|
import DependentsComponent from '../../dependants/dependants.component';
|
|
8
8
|
import { LocalResponse, type HIEBundleResponse, type EligibilityResponse } from '../../type';
|
|
9
9
|
import { hasDependents } from '../../helper';
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
launchWorkspace2,
|
|
12
|
+
launchWorkspaceGroup2,
|
|
13
|
+
PatientPhoto,
|
|
14
|
+
showModal,
|
|
15
|
+
navigate,
|
|
16
|
+
type Visit,
|
|
17
|
+
} from '@openmrs/esm-framework';
|
|
11
18
|
import { EnhancedPatientBannerPatientInfo } from '../../patient-banner/patient-banner.component';
|
|
12
19
|
import { findExistingLocalPatient, registerOrLaunchHIEPatient } from '../../search-bar/search-bar.resource';
|
|
13
20
|
import { launchOtpVerificationModal } from '../../../../shared/otp-verification';
|
|
14
21
|
import { otpManager, useOtpSource, cleanupAllOTPs } from './hie-card.resource';
|
|
15
22
|
import { useMultipleActiveVisits } from '../../dependants/dependants.resource';
|
|
16
23
|
import { sanitizePhoneNumber } from '../../../../shared/utils';
|
|
24
|
+
import { VisitFormProps } from '../../start-visit-form/visit-form-workspace/visit-form.workspace';
|
|
17
25
|
|
|
18
26
|
interface HIEDisplayCardProps {
|
|
19
27
|
bundle: HIEBundleResponse;
|
|
@@ -140,6 +148,25 @@ const HIEDisplayCard: React.FC<HIEDisplayCardProps> = ({
|
|
|
140
148
|
return '254700000000';
|
|
141
149
|
};
|
|
142
150
|
|
|
151
|
+
const launchCheckInWorkspace = async (patient: any, patientUuid: string) => {
|
|
152
|
+
await launchWorkspaceGroup2('ewf-patient-chart', {
|
|
153
|
+
patient,
|
|
154
|
+
patientUuid,
|
|
155
|
+
visitContext: null as unknown as Visit,
|
|
156
|
+
mutateVisitContext: () => {},
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
launchWorkspace2<VisitFormProps, {}, {}>(
|
|
160
|
+
'custom-start-visit-workspace-form',
|
|
161
|
+
{
|
|
162
|
+
openedFrom: 'registration-check-in',
|
|
163
|
+
showPatientHeader: false,
|
|
164
|
+
},
|
|
165
|
+
{},
|
|
166
|
+
null,
|
|
167
|
+
);
|
|
168
|
+
};
|
|
169
|
+
|
|
143
170
|
const handleOTPRequest = (patientUuid: string) => {
|
|
144
171
|
setOtpRequestedFor((prev) => new Set(prev).add(patientUuid));
|
|
145
172
|
};
|
|
@@ -170,9 +197,7 @@ const HIEDisplayCard: React.FC<HIEDisplayCardProps> = ({
|
|
|
170
197
|
if (!otpSource) {
|
|
171
198
|
throw new Error('OTP source not configured. Please contact your administrator.');
|
|
172
199
|
}
|
|
173
|
-
|
|
174
200
|
otpManager.setOtpSource(otpSource);
|
|
175
|
-
|
|
176
201
|
await otpManager.requestOTP(sanitizedPhone, patientName, otpExpiryMinutes, searchedNationalId, patientUuid);
|
|
177
202
|
} catch (error) {
|
|
178
203
|
throw error;
|
|
@@ -184,9 +209,7 @@ const HIEDisplayCard: React.FC<HIEDisplayCardProps> = ({
|
|
|
184
209
|
if (!otpSource) {
|
|
185
210
|
throw new Error('OTP source not configured. Please contact your administrator.');
|
|
186
211
|
}
|
|
187
|
-
|
|
188
212
|
otpManager.setOtpSource(otpSource);
|
|
189
|
-
|
|
190
213
|
const isValid = await otpManager.verifyOTP(sanitizedPhone, otp, patientUuid);
|
|
191
214
|
if (!isValid) {
|
|
192
215
|
throw new Error('OTP verification failed');
|
|
@@ -312,21 +335,7 @@ const HIEDisplayCard: React.FC<HIEDisplayCardProps> = ({
|
|
|
312
335
|
<Button
|
|
313
336
|
kind="secondary"
|
|
314
337
|
size="sm"
|
|
315
|
-
onClick={() =>
|
|
316
|
-
const localPatientName =
|
|
317
|
-
localPatient?.person?.personName?.display ||
|
|
318
|
-
`${localPatient?.person?.personName?.givenName || ''} ${
|
|
319
|
-
localPatient?.person?.personName?.middleName || ''
|
|
320
|
-
} ${localPatient?.person?.personName?.familyName || ''}`.trim() ||
|
|
321
|
-
patientName;
|
|
322
|
-
|
|
323
|
-
launchWorkspace('start-visit-workspace-form', {
|
|
324
|
-
patientUuid: localPatient.uuid,
|
|
325
|
-
workspaceTitle: t('startVisitWorkspaceTitle', 'Start Visit for {{patientName}}', {
|
|
326
|
-
patientName: localPatientName,
|
|
327
|
-
}),
|
|
328
|
-
});
|
|
329
|
-
}}>
|
|
338
|
+
onClick={() => launchCheckInWorkspace(localPatient, localPatient.uuid)}>
|
|
330
339
|
{t('checkIn', 'Check In')}
|
|
331
340
|
</Button>
|
|
332
341
|
)}
|
|
@@ -345,27 +354,8 @@ const HIEDisplayCard: React.FC<HIEDisplayCardProps> = ({
|
|
|
345
354
|
kind="secondary"
|
|
346
355
|
size="sm"
|
|
347
356
|
onClick={async () => {
|
|
348
|
-
const
|
|
349
|
-
|
|
350
|
-
patientUuid: localPatient.uuid,
|
|
351
|
-
workspaceTitle: t('checkInPatientWorkspaceTitle', 'Check in patient'),
|
|
352
|
-
closeWorkspace: () => {
|
|
353
|
-
closeWorkspace('start-visit-workspace-form', {
|
|
354
|
-
onWorkspaceClose: () => {
|
|
355
|
-
navigate({ to: `\${openmrsSpaBase}/patient/${localPatient.uuid}/chart` });
|
|
356
|
-
},
|
|
357
|
-
ignoreChanges: true,
|
|
358
|
-
});
|
|
359
|
-
},
|
|
360
|
-
closeWorkspaceWithSavedChanges: () => {
|
|
361
|
-
closeWorkspace('start-visit-workspace-form', {
|
|
362
|
-
onWorkspaceClose: () => {
|
|
363
|
-
navigate({ to: `\${openmrsSpaBase}/patient/${localPatient.uuid}/chart` });
|
|
364
|
-
},
|
|
365
|
-
ignoreChanges: true,
|
|
366
|
-
});
|
|
367
|
-
},
|
|
368
|
-
});
|
|
357
|
+
const registeredPatient = await registerOrLaunchHIEPatient(patient, t);
|
|
358
|
+
await launchCheckInWorkspace(registeredPatient, registeredPatient.uuid);
|
|
369
359
|
}}>
|
|
370
360
|
{t('checkIn', 'Check In')}
|
|
371
361
|
</Button>
|
|
@@ -376,9 +366,7 @@ const HIEDisplayCard: React.FC<HIEDisplayCardProps> = ({
|
|
|
376
366
|
iconDescription={showDependents ? 'Hide dependents' : 'Show dependents'}
|
|
377
367
|
kind="tertiary"
|
|
378
368
|
size="sm"
|
|
379
|
-
onClick={() =>
|
|
380
|
-
toggleDependentsVisibility(patientKey);
|
|
381
|
-
}}
|
|
369
|
+
onClick={() => toggleDependentsVisibility(patientKey)}
|
|
382
370
|
renderIcon={showDependents ? ChevronUp : ChevronDown}>
|
|
383
371
|
{showDependents
|
|
384
372
|
? t('hideDependents', 'Hide dependents')
|
|
@@ -5,7 +5,7 @@ import { useTranslation } from 'react-i18next';
|
|
|
5
5
|
import classNames from 'classnames';
|
|
6
6
|
import styles from '../card.scss';
|
|
7
7
|
import { LocalResponse, type HIEBundleResponse, type EligibilityResponse } from '../../type';
|
|
8
|
-
import {
|
|
8
|
+
import { launchWorkspace2, launchWorkspaceGroup2, PatientPhoto, showModal, type Visit } from '@openmrs/esm-framework';
|
|
9
9
|
import { EnhancedPatientBannerPatientInfo } from '../../patient-banner/patient-banner.component';
|
|
10
10
|
import { convertLocalPatientToFHIR, getNationalIdFromPatient, hasDependents } from '../../helper';
|
|
11
11
|
import { launchOtpVerificationModal } from '../../../../shared/otp-verification';
|
|
@@ -13,6 +13,7 @@ import DependentsComponent from '../../dependants/dependants.component';
|
|
|
13
13
|
import { useMultipleActiveVisits } from '../../dependants/dependants.resource';
|
|
14
14
|
import { otpManager, useOtpSource, cleanupAllOTPs } from '../HIE-card/hie-card.resource';
|
|
15
15
|
import { sanitizePhoneNumber } from '../../../../shared/utils';
|
|
16
|
+
import { VisitFormProps } from '../../start-visit-form/visit-form-workspace/visit-form.workspace';
|
|
16
17
|
|
|
17
18
|
interface LocalPatientCardProps {
|
|
18
19
|
localSearchResults: LocalResponse;
|
|
@@ -46,7 +47,6 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
|
|
|
46
47
|
}
|
|
47
48
|
}, [otpSource]);
|
|
48
49
|
|
|
49
|
-
// Clean up OTPs when component unmounts
|
|
50
50
|
useEffect(() => {
|
|
51
51
|
return () => {
|
|
52
52
|
cleanupAllOTPs();
|
|
@@ -114,6 +114,25 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
|
|
|
114
114
|
return '254700000000';
|
|
115
115
|
}, []);
|
|
116
116
|
|
|
117
|
+
const launchCheckInWorkspace = async (patient: any, patientUuid: string) => {
|
|
118
|
+
const groupProps = {
|
|
119
|
+
patient,
|
|
120
|
+
patientUuid,
|
|
121
|
+
visitContext: null as unknown as Visit,
|
|
122
|
+
mutateVisitContext: () => {},
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
launchWorkspace2<VisitFormProps, {}, {}>(
|
|
126
|
+
'custom-start-visit-workspace-form',
|
|
127
|
+
{
|
|
128
|
+
openedFrom: 'registration-check-in',
|
|
129
|
+
showPatientHeader: false,
|
|
130
|
+
},
|
|
131
|
+
{},
|
|
132
|
+
groupProps,
|
|
133
|
+
);
|
|
134
|
+
};
|
|
135
|
+
|
|
117
136
|
const handleOTPRequest = useCallback((patientUuid: string) => {
|
|
118
137
|
setOtpRequestedFor((prev) => new Set(prev).add(patientUuid));
|
|
119
138
|
}, []);
|
|
@@ -141,9 +160,7 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
|
|
|
141
160
|
if (!otpSource) {
|
|
142
161
|
throw new Error('OTP source not configured. Please contact your administrator.');
|
|
143
162
|
}
|
|
144
|
-
|
|
145
163
|
otpManager.setOtpSource(otpSource);
|
|
146
|
-
|
|
147
164
|
await otpManager.requestOTP(sanitizedPhone, patientName, otpExpiryMinutes, searchedNationalId, patientUuid);
|
|
148
165
|
} catch (error) {
|
|
149
166
|
throw error;
|
|
@@ -155,9 +172,7 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
|
|
|
155
172
|
if (!otpSource) {
|
|
156
173
|
throw new Error('OTP source not configured. Please contact your administrator.');
|
|
157
174
|
}
|
|
158
|
-
|
|
159
175
|
otpManager.setOtpSource(otpSource);
|
|
160
|
-
|
|
161
176
|
const isValid = await otpManager.verifyOTP(sanitizedPhone, otp, patientUuid);
|
|
162
177
|
if (!isValid) {
|
|
163
178
|
throw new Error('OTP verification failed');
|
|
@@ -207,7 +222,6 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
|
|
|
207
222
|
const hasActiveVisit = !!activeVisit;
|
|
208
223
|
|
|
209
224
|
const hiePatientData: any = findHIEPatientData(localPatient);
|
|
210
|
-
|
|
211
225
|
const patientHasDependents: boolean = hiePatientData ? hasDependents(hiePatientData) : false;
|
|
212
226
|
const showDependents: boolean = showDependentsForPatient.has(patientUuid);
|
|
213
227
|
|
|
@@ -230,7 +244,6 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
|
|
|
230
244
|
<div className={styles.patientAvatar} role="img">
|
|
231
245
|
<PatientPhoto patientUuid={patientUuid} patientName={patientName} />
|
|
232
246
|
</div>
|
|
233
|
-
|
|
234
247
|
<EnhancedPatientBannerPatientInfo
|
|
235
248
|
patient={fhirPatient}
|
|
236
249
|
renderedFrom="local-search"
|
|
@@ -291,22 +304,7 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
|
|
|
291
304
|
<Button
|
|
292
305
|
kind="primary"
|
|
293
306
|
size="sm"
|
|
294
|
-
onClick={() =>
|
|
295
|
-
launchWorkspace('start-visit-workspace-form', {
|
|
296
|
-
patientUuid: patientUuid,
|
|
297
|
-
workspaceTitle: t('checkInPatientWorkspaceTitle', 'Check in patient'),
|
|
298
|
-
closeWorkspace: () => {
|
|
299
|
-
closeWorkspace('start-visit-workspace-form', {
|
|
300
|
-
ignoreChanges: true,
|
|
301
|
-
});
|
|
302
|
-
},
|
|
303
|
-
closeWorkspaceWithSavedChanges: () => {
|
|
304
|
-
closeWorkspace('start-visit-workspace-form', {
|
|
305
|
-
ignoreChanges: true,
|
|
306
|
-
});
|
|
307
|
-
},
|
|
308
|
-
});
|
|
309
|
-
}}>
|
|
307
|
+
onClick={() => launchCheckInWorkspace(localPatient, patientUuid)}>
|
|
310
308
|
{t('checkIn', 'Check In')}
|
|
311
309
|
</Button>
|
|
312
310
|
)}
|
|
@@ -13,6 +13,7 @@ export interface CheckinFormExtraExtensionProps {
|
|
|
13
13
|
isDHAWorkflow: boolean;
|
|
14
14
|
};
|
|
15
15
|
patientUuid: string;
|
|
16
|
+
visitStatus: string;
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
/**
|
|
@@ -20,9 +21,14 @@ export interface CheckinFormExtraExtensionProps {
|
|
|
20
21
|
* It is used slotted into the patient-chart's start visit form
|
|
21
22
|
*/
|
|
22
23
|
const CheckinFormExtraExtension: React.FC<CheckinFormExtraExtensionProps> = (props) => {
|
|
23
|
-
const { setVisitFormCallbacks, visitFormOpenedFrom, patientChartConfig } = props;
|
|
24
|
+
const { setVisitFormCallbacks, visitFormOpenedFrom, patientChartConfig, visitStatus } = props;
|
|
24
25
|
if (patientChartConfig.isDHAWorkflow || visitFormOpenedFrom == 'service-queues-add-patient') {
|
|
25
|
-
return
|
|
26
|
+
return (
|
|
27
|
+
<QueueFields
|
|
28
|
+
setOnSubmit={(onSubmit) => setVisitFormCallbacks({ onVisitCreatedOrUpdated: onSubmit })}
|
|
29
|
+
visitStatus={visitStatus}
|
|
30
|
+
/>
|
|
31
|
+
);
|
|
26
32
|
} else {
|
|
27
33
|
return <></>;
|
|
28
34
|
}
|
|
@@ -1,12 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
InlineNotification,
|
|
3
|
-
RadioButton,
|
|
4
|
-
RadioButtonGroup,
|
|
5
|
-
RadioButtonSkeleton,
|
|
6
|
-
Select,
|
|
7
|
-
SelectItem,
|
|
8
|
-
SelectSkeleton,
|
|
9
|
-
} from '@carbon/react';
|
|
1
|
+
import { InlineNotification, RadioButton, RadioButtonGroup, Select, SelectItem, SelectSkeleton } from '@carbon/react';
|
|
10
2
|
import { ResponsiveWrapper, showSnackbar, useConfig, useSession, type Visit } from '@openmrs/esm-framework';
|
|
11
3
|
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
12
4
|
import { useTranslation } from 'react-i18next';
|
|
@@ -16,21 +8,23 @@ import { ExpressWorkflowConfig } from '../../../config-schema';
|
|
|
16
8
|
|
|
17
9
|
export interface QueueFieldsProps {
|
|
18
10
|
setOnSubmit(onSubmit: (visit: Visit) => Promise<any>);
|
|
11
|
+
visitStatus: string;
|
|
19
12
|
}
|
|
20
13
|
|
|
21
|
-
const PATIENT_CATEGORIES = [
|
|
22
|
-
{ id: 'triage', name: 'Triage' },
|
|
23
|
-
{ id: 'walk-in', name: 'Walk-in' },
|
|
24
|
-
];
|
|
25
|
-
|
|
26
14
|
/**
|
|
27
15
|
* This component contains form fields for starting a patient's queue entry.
|
|
28
16
|
*/
|
|
29
|
-
const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit }) => {
|
|
17
|
+
const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit, visitStatus }) => {
|
|
30
18
|
const { t } = useTranslation();
|
|
19
|
+
const patientCategory = useMemo(
|
|
20
|
+
() => [
|
|
21
|
+
{ id: 'triage', name: t('triage', 'Triage') },
|
|
22
|
+
{ id: 'walk-in', name: t('walkIn', 'Walk-in') },
|
|
23
|
+
],
|
|
24
|
+
[t],
|
|
25
|
+
);
|
|
31
26
|
const { queueRooms, isLoading: isLoadingQueueRooms } = useQueueRooms();
|
|
32
27
|
const { sessionLocation } = useSession();
|
|
33
|
-
|
|
34
28
|
const {
|
|
35
29
|
visitQueueNumberAttributeUuid,
|
|
36
30
|
triageServiceConceptUuid,
|
|
@@ -84,7 +78,7 @@ const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit }) => {
|
|
|
84
78
|
|
|
85
79
|
const onSubmit = useCallback(
|
|
86
80
|
(visit: Visit) => {
|
|
87
|
-
if (selectedQueueRoom) {
|
|
81
|
+
if (selectedQueueRoom && visitStatus !== 'past') {
|
|
88
82
|
const selectedRoom = filteredQueueRooms.find((room) => room.uuid === selectedQueueRoom);
|
|
89
83
|
const queueUuid = selectedRoom?.queue?.uuid;
|
|
90
84
|
|
|
@@ -140,6 +134,7 @@ const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit }) => {
|
|
|
140
134
|
sessionLocation.uuid,
|
|
141
135
|
filteredQueueRooms,
|
|
142
136
|
t,
|
|
137
|
+
visitStatus,
|
|
143
138
|
],
|
|
144
139
|
);
|
|
145
140
|
|
|
@@ -157,6 +152,10 @@ const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit }) => {
|
|
|
157
152
|
}
|
|
158
153
|
}, [filteredQueueRooms, selectedQueueRoom]);
|
|
159
154
|
|
|
155
|
+
if (visitStatus === 'past') {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
|
|
160
159
|
return (
|
|
161
160
|
<div>
|
|
162
161
|
<section className={styles.section}>
|
|
@@ -169,7 +168,7 @@ const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit }) => {
|
|
|
169
168
|
orientation="vertical"
|
|
170
169
|
valueSelected={selectedCategory}
|
|
171
170
|
onChange={(value) => setSelectedCategory(String(value))}>
|
|
172
|
-
{
|
|
171
|
+
{patientCategory.map((category) => (
|
|
173
172
|
<RadioButton
|
|
174
173
|
key={category.id}
|
|
175
174
|
className={styles.radioButtonOption}
|
|
@@ -218,4 +217,4 @@ const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit }) => {
|
|
|
218
217
|
);
|
|
219
218
|
};
|
|
220
219
|
|
|
221
|
-
export default QueueFields;
|
|
220
|
+
export default React.memo(QueueFields);
|