@kenyaemr/esm-express-workflow-app 5.4.3 → 5.4.4-pre.1
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 +13 -11
- package/dist/1074.js +1 -0
- package/dist/1074.js.map +1 -0
- package/dist/1084.js +1 -0
- package/dist/1084.js.map +1 -0
- package/dist/12.js +17 -0
- package/dist/12.js.map +1 -0
- package/dist/126.js +1 -0
- package/dist/126.js.map +1 -0
- package/dist/1311.js +1 -0
- package/dist/1311.js.map +1 -0
- package/dist/1323.js +1 -0
- package/dist/1323.js.map +1 -0
- package/dist/1469.js +1 -0
- package/dist/1469.js.map +1 -0
- package/dist/1506.js +13 -0
- package/dist/1506.js.map +1 -0
- package/dist/1760.js +1 -0
- package/dist/1760.js.map +1 -0
- package/dist/1780.js +1 -0
- package/dist/1780.js.map +1 -0
- package/dist/1791.js +1 -0
- package/dist/1791.js.map +1 -0
- package/dist/1884.js +1 -0
- package/dist/1884.js.map +1 -0
- package/dist/1972.js +1 -0
- package/dist/1972.js.map +1 -0
- package/dist/1990.js +1 -0
- package/dist/1990.js.map +1 -0
- package/dist/2016.js +1 -0
- package/dist/2016.js.map +1 -0
- package/dist/2024.js +1 -0
- package/dist/2024.js.map +1 -0
- package/dist/2153.js +1 -0
- package/dist/2153.js.map +1 -0
- package/dist/216.js +1 -0
- package/dist/216.js.map +1 -0
- package/dist/2225.js +1 -0
- package/dist/2225.js.map +1 -0
- package/dist/2294.js +1 -0
- package/dist/2294.js.map +1 -0
- package/dist/2345.js +1 -0
- package/dist/2345.js.map +1 -0
- package/dist/2386.js +1 -0
- package/dist/2386.js.map +1 -0
- package/dist/2438.js +1 -0
- package/dist/2438.js.map +1 -0
- package/dist/2499.js +1 -0
- package/dist/2499.js.map +1 -0
- package/dist/2500.js +1 -0
- package/dist/2500.js.map +1 -0
- package/dist/2586.js +1 -0
- package/dist/2586.js.map +1 -0
- package/dist/2625.js +1 -0
- package/dist/2625.js.map +1 -0
- package/dist/2685.js +1 -0
- package/dist/2685.js.map +1 -0
- package/dist/2757.js +1 -0
- package/dist/2757.js.map +1 -0
- package/dist/2851.js +1 -0
- package/dist/2851.js.map +1 -0
- package/dist/2881.js +1 -0
- package/dist/2881.js.map +1 -0
- package/dist/2948.js +1 -0
- package/dist/2948.js.map +1 -0
- package/dist/2968.js +1 -0
- package/dist/2968.js.map +1 -0
- package/dist/2998.js +1 -0
- package/dist/2998.js.map +1 -0
- package/dist/30.js +1 -0
- package/dist/30.js.map +1 -0
- package/dist/3089.js +1 -0
- package/dist/3089.js.map +1 -0
- package/dist/3139.js +1 -0
- package/dist/3139.js.map +1 -0
- package/dist/3220.js +1 -0
- package/dist/3220.js.map +1 -0
- package/dist/3265.js +1 -0
- package/dist/3265.js.map +1 -0
- package/dist/3548.js +1 -0
- package/dist/3548.js.map +1 -0
- package/dist/3567.js +1 -0
- package/dist/3567.js.map +1 -0
- package/dist/3571.js +1 -0
- package/dist/3571.js.map +1 -0
- package/dist/3691.js +1 -0
- package/dist/3691.js.map +1 -0
- package/dist/3730.js +1 -0
- package/dist/3730.js.map +1 -0
- package/dist/3923.js +1 -0
- package/dist/3923.js.map +1 -0
- package/dist/3963.js +1 -0
- package/dist/3963.js.map +1 -0
- package/dist/4024.js +1 -0
- package/dist/4024.js.map +1 -0
- package/dist/405.js +1 -0
- package/dist/405.js.map +1 -0
- package/dist/4296.js +1 -0
- package/dist/4296.js.map +1 -0
- package/dist/4504.js +1 -0
- package/dist/4504.js.map +1 -0
- package/dist/4564.js +1 -0
- package/dist/4564.js.map +1 -0
- package/dist/4581.js +1 -0
- package/dist/4581.js.map +1 -0
- package/dist/4670.js +1 -0
- package/dist/4670.js.map +1 -0
- package/dist/4680.js +1 -0
- package/dist/4680.js.map +1 -0
- package/dist/4682.js +1 -0
- package/dist/4682.js.map +1 -0
- package/dist/4735.js +1 -0
- package/dist/4735.js.map +1 -0
- package/dist/4737.js +1 -0
- package/dist/4737.js.map +1 -0
- package/dist/4744.js +1 -0
- package/dist/4744.js.map +1 -0
- package/dist/4795.js +1 -0
- package/dist/4795.js.map +1 -0
- package/dist/4813.js +2 -0
- package/dist/4813.js.map +1 -0
- package/dist/4818.js +1 -0
- package/dist/4818.js.map +1 -0
- package/dist/4858.js +1 -0
- package/dist/4858.js.map +1 -0
- package/dist/487.js +1 -0
- package/dist/487.js.map +1 -0
- package/dist/4970.js +1 -0
- package/dist/4970.js.map +1 -0
- package/dist/5047.js +1 -0
- package/dist/5047.js.map +1 -0
- package/dist/5054.js +1 -0
- package/dist/5054.js.map +1 -0
- package/dist/5202.js +1 -0
- package/dist/5202.js.map +1 -0
- package/dist/5491.js +1 -0
- package/dist/5491.js.map +1 -0
- package/dist/5592.js +1 -0
- package/dist/5592.js.map +1 -0
- package/dist/5669.js +1 -0
- package/dist/5669.js.map +1 -0
- package/dist/5787.js +1 -0
- package/dist/5787.js.map +1 -0
- package/dist/586.js +1 -0
- package/dist/586.js.map +1 -0
- package/dist/5879.js +1 -0
- package/dist/5879.js.map +1 -0
- package/dist/5904.js +1 -0
- package/dist/5904.js.map +1 -0
- package/dist/5986.js +1 -0
- package/dist/5986.js.map +1 -0
- package/dist/6007.js +11 -0
- package/dist/6007.js.map +1 -0
- package/dist/6075.js +1 -0
- package/dist/6075.js.map +1 -0
- package/dist/6258.js +1 -0
- package/dist/6258.js.map +1 -0
- package/dist/629.js +1 -0
- package/dist/629.js.map +1 -0
- package/dist/6328.js +1 -0
- package/dist/6328.js.map +1 -0
- package/dist/6355.js +1 -0
- package/dist/6355.js.map +1 -0
- package/dist/64.js +1 -0
- package/dist/64.js.map +1 -0
- package/dist/6445.js +1 -0
- package/dist/6445.js.map +1 -0
- package/dist/6456.js +1 -0
- package/dist/6466.js +3 -0
- package/dist/6466.js.map +1 -0
- package/dist/6663.js +1 -0
- package/dist/6663.js.map +1 -0
- package/dist/6720.js +1 -0
- package/dist/6720.js.map +1 -0
- package/dist/6798.js +66 -0
- package/dist/6798.js.map +1 -0
- package/dist/6925.js +1 -0
- package/dist/6925.js.map +1 -0
- package/dist/7201.js +1 -0
- package/dist/7201.js.map +1 -0
- package/dist/7234.js +1 -0
- package/dist/7234.js.map +1 -0
- package/dist/7261.js +1 -0
- package/dist/7261.js.map +1 -0
- package/dist/7326.js +1 -0
- package/dist/7359.js +1 -0
- package/dist/7405.js +1 -0
- package/dist/7405.js.map +1 -0
- package/dist/7591.js +1 -0
- package/dist/7591.js.map +1 -0
- package/dist/7602.js +1 -0
- package/dist/7602.js.map +1 -0
- package/dist/7607.js +1 -0
- package/dist/7701.js +1 -0
- package/dist/7701.js.map +1 -0
- package/dist/7717.js +1 -0
- package/dist/7717.js.map +1 -0
- package/dist/7739.js +1 -0
- package/dist/7739.js.map +1 -0
- package/dist/7788.js +1 -0
- package/dist/7788.js.map +1 -0
- package/dist/7819.js +1 -0
- package/dist/7819.js.map +1 -0
- package/dist/7820.js +1 -0
- package/dist/7820.js.map +1 -0
- package/dist/7844.js +1 -0
- package/dist/7844.js.map +1 -0
- package/dist/7971.js +1 -0
- package/dist/7971.js.map +1 -0
- package/dist/807.js +1 -0
- package/dist/807.js.map +1 -0
- package/dist/8159.js +7 -0
- package/dist/8159.js.map +1 -0
- package/dist/8338.js +1 -0
- package/dist/8338.js.map +1 -0
- package/dist/845.js +1 -0
- package/dist/845.js.map +1 -0
- package/dist/8566.js +1 -0
- package/dist/8566.js.map +1 -0
- package/dist/8570.js +1 -0
- package/dist/8570.js.map +1 -0
- package/dist/8613.js +1 -0
- package/dist/8613.js.map +1 -0
- package/dist/8682.js +1 -0
- package/dist/8682.js.map +1 -0
- package/dist/87.js +1 -0
- package/dist/87.js.map +1 -0
- package/dist/8727.js +1 -0
- package/dist/8766.js +1 -0
- package/dist/8766.js.map +1 -0
- package/dist/8799.js +1 -0
- package/dist/8799.js.map +1 -0
- package/dist/8828.js +1 -0
- package/dist/8828.js.map +1 -0
- package/dist/8860.js +1 -0
- package/dist/8860.js.map +1 -0
- package/dist/8911.js +1 -0
- package/dist/8911.js.map +1 -0
- package/dist/8930.js +1 -0
- package/dist/8930.js.map +1 -0
- package/dist/8971.js +1 -0
- package/dist/8971.js.map +1 -0
- package/dist/9011.js +1 -0
- package/dist/9011.js.map +1 -0
- package/dist/9111.js +1 -0
- package/dist/9111.js.map +1 -0
- package/dist/9124.js +1 -0
- package/dist/9124.js.map +1 -0
- package/dist/9157.js +1 -0
- package/dist/9157.js.map +1 -0
- package/dist/9161.js +1 -0
- package/dist/9161.js.map +1 -0
- package/dist/9182.js +1 -0
- package/dist/921.js +1 -0
- package/dist/921.js.map +1 -0
- package/dist/9212.js +1 -0
- package/dist/9212.js.map +1 -0
- package/dist/9255.js +1 -0
- package/dist/9255.js.map +1 -0
- package/dist/9257.js +1 -0
- package/dist/9257.js.map +1 -0
- package/dist/9343.js +1 -0
- package/dist/9343.js.map +1 -0
- package/dist/9404.js +1 -0
- package/dist/9404.js.map +1 -0
- package/dist/9446.js +1 -0
- package/dist/9446.js.map +1 -0
- package/dist/9449.js +1 -0
- package/dist/9449.js.map +1 -0
- package/dist/9488.js +1 -0
- package/dist/9488.js.map +1 -0
- package/dist/9514.js +1 -0
- package/dist/9514.js.map +1 -0
- package/dist/9528.js +1 -0
- package/dist/9528.js.map +1 -0
- package/dist/9535.js +1 -0
- package/dist/9535.js.map +1 -0
- package/dist/9606.js +1 -0
- package/dist/9606.js.map +1 -0
- package/dist/9834.js +1 -0
- package/dist/9834.js.map +1 -0
- package/dist/9845.js +1 -0
- package/dist/9845.js.map +1 -0
- package/dist/9848.js +1 -0
- package/dist/9848.js.map +1 -0
- package/dist/kenyaemr-esm-express-workflow-app.js +5 -5
- package/dist/kenyaemr-esm-express-workflow-app.js.buildmanifest.json +3394 -173
- package/dist/kenyaemr-esm-express-workflow-app.js.map +1 -1
- package/dist/main.js +7 -106
- package/dist/main.js.map +1 -1
- package/dist/routes.json +1 -1
- package/package.json +7 -8
- package/rspack.config.js +1 -1
- package/src/components/accounting/index.tsx +11 -10
- package/src/components/admissions/admissions-dashboard.component.tsx +2 -2
- package/src/components/admissions/index.tsx +11 -10
- 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/appointments/index.ts +10 -8
- 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-context.tsx +19 -0
- package/src/components/consultation/consultation-summary-cards.component.tsx +124 -0
- package/src/components/consultation/consultation.component.tsx +41 -268
- package/src/components/consultation/consultation.resource.ts +67 -24
- package/src/components/consultation/consultation.scss +5 -0
- package/src/components/consultation/consultation.utils.tsx +222 -0
- package/src/components/consultation/dashboard.component.tsx +0 -2
- package/src/components/consultation/index.ts +28 -21
- 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/facility-dashboard/index.tsx +10 -9
- package/src/components/laboratory/index.ts +22 -10
- package/src/components/laboratory/lab-table.component.tsx +40 -12
- package/src/components/laboratory/laboratory-tabs.component.tsx +3 -17
- package/src/components/mch/dashboard.component.tsx +0 -2
- package/src/components/mch/index.tsx +10 -9
- package/src/components/mch/mch.component.tsx +1 -3
- package/src/components/mch/mch.consultation.component.tsx +27 -15
- package/src/components/mch/mch.triage.component.tsx +42 -33
- package/src/components/pharmacy/index.ts +21 -19
- package/src/components/pharmacy/orders/pharmacy-orders.component.tsx +35 -13
- 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 +27 -10
- 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 +69 -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 +25 -10
- package/src/components/radiology-and-imaging/radiology-and-imaging-table.component.tsx +62 -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 +79 -50
- 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/helper/index.ts +4 -0
- package/src/components/registration/index.ts +10 -9
- 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 +57 -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 +759 -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 +389 -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 +11 -9
- package/src/components/triage/dashboard.component.tsx +0 -2
- package/src/components/triage/index.ts +10 -9
- package/src/components/triage/triage.component.tsx +92 -42
- package/src/components/triage/triage.resource.ts +56 -50
- package/src/components/triage/triage.scss +6 -0
- package/src/config-schema.ts +482 -0
- package/src/hooks/useOrders.tsx +2 -2
- package/src/hooks/useServiceQueues.tsx +95 -25
- package/src/index.ts +84 -28
- package/src/routes.json +290 -32
- package/src/shared/dashboard-link/dashboard-link.component.tsx +11 -8
- package/src/shared/orders/OrderTable.tsx +19 -3
- 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 -85
- package/src/shared/pin-put/pinput.component.test.tsx +7 -6
- package/src/shared/queue/queue-entry/queue-entry-table.component.tsx +99 -88
- package/src/shared/queue/queue-entry/queue-entry-table.scss +4 -0
- package/src/shared/queue/queue-summary-cards.component.tsx +32 -0
- package/src/shared/queue/queue-tab.component.tsx +182 -70
- package/src/shared/queue/queue-tab.scss +1 -0
- package/src/shared/queue/queue-workflow-context.tsx +90 -0
- package/src/shared/tabs/create-tab-extension.tsx +33 -0
- package/src/shared/tabs/extension-tabs.component.tsx +51 -30
- package/src/shared/utils/index.ts +119 -5
- package/src/types/index.ts +29 -2
- package/translations/am.json +426 -133
- package/translations/en.json +312 -19
- package/translations/fr.json +351 -63
- package/translations/sw.json +330 -37
- package/dist/127.js +0 -1
- package/dist/200.js +0 -1
- package/dist/200.js.map +0 -1
- package/dist/24.js +0 -1
- package/dist/24.js.map +0 -1
- package/dist/267.js +0 -1
- package/dist/267.js.map +0 -1
- package/dist/285.js +0 -1
- package/dist/285.js.map +0 -1
- package/dist/329.js +0 -1
- package/dist/329.js.map +0 -1
- package/dist/40.js +0 -1
- package/dist/466.js +0 -1
- package/dist/466.js.map +0 -1
- package/dist/472.js +0 -66
- package/dist/472.js.map +0 -1
- package/dist/490.js +0 -1
- package/dist/490.js.map +0 -1
- package/dist/54.js +0 -1
- package/dist/54.js.map +0 -1
- package/dist/689.js +0 -1
- package/dist/689.js.map +0 -1
- package/dist/697.js +0 -1
- package/dist/697.js.map +0 -1
- package/dist/704.js +0 -1
- package/dist/704.js.map +0 -1
- package/dist/710.js +0 -1
- package/dist/710.js.map +0 -1
- package/dist/729.js +0 -17
- package/dist/729.js.map +0 -1
- package/dist/805.js +0 -37
- package/dist/805.js.map +0 -1
- package/dist/847.js +0 -1
- package/dist/847.js.map +0 -1
- package/dist/85.js +0 -1
- package/dist/85.js.map +0 -1
- package/dist/882.js +0 -1
- package/dist/91.js +0 -1
- package/dist/91.js.map +0 -1
- package/dist/916.js +0 -1
- package/dist/994.js +0 -1
- package/dist/994.js.map +0 -1
- package/dist/998.js +0 -1
- package/dist/998.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 -184
- 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
|
@@ -11,23 +11,26 @@ export interface LinkConfig {
|
|
|
11
11
|
name: string;
|
|
12
12
|
title: string;
|
|
13
13
|
icon?: string | CarbonIconType;
|
|
14
|
+
basePath?: string;
|
|
14
15
|
}
|
|
15
16
|
|
|
16
|
-
export function LinkExtension({ config }: { config: LinkConfig }) {
|
|
17
|
+
export function LinkExtension({ config }: { readonly config: LinkConfig }) {
|
|
17
18
|
const { t } = useTranslation();
|
|
18
|
-
const { name, title, icon } = config;
|
|
19
|
+
const { name, title, icon, basePath = 'home' } = config;
|
|
19
20
|
const nameSegment = name.split('/').at(-1);
|
|
20
21
|
const location = useLocation();
|
|
21
|
-
const spaBasePath = window.getOpenmrsSpaBase() +
|
|
22
|
+
const spaBasePath = window.getOpenmrsSpaBase() + basePath;
|
|
22
23
|
|
|
23
|
-
let urlSegment = useMemo(() => decodeURIComponent(last(location.pathname.split('/'))), [location.pathname]);
|
|
24
|
-
const IconComp = typeof icon
|
|
24
|
+
let urlSegment = useMemo(() => decodeURIComponent(last(location.pathname.split('/')) || ''), [location.pathname]);
|
|
25
|
+
const IconComp = typeof icon === 'string' ? null : icon;
|
|
26
|
+
|
|
27
|
+
const url = spaBasePath + '/' + name;
|
|
28
|
+
|
|
29
|
+
const cleanUrl = url.replaceAll(/(?<!:)\/\//g, '/');
|
|
25
30
|
|
|
26
31
|
const isActive = nameSegment === urlSegment;
|
|
27
32
|
return (
|
|
28
|
-
<ConfigurableLink
|
|
29
|
-
to={spaBasePath + '/' + name}
|
|
30
|
-
className={`cds--side-nav__link ${isActive && 'active-left-nav-link'}`}>
|
|
33
|
+
<ConfigurableLink to={cleanUrl} className={`cds--side-nav__link ${isActive && 'active-left-nav-link'}`}>
|
|
31
34
|
{typeof icon === 'string' ? (
|
|
32
35
|
<MaybeIcon icon={icon} className={styles.icon} size={16} />
|
|
33
36
|
) : (
|
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import { DataTable, Table, TableHead, TableRow, TableHeader, TableBody, TableCell, Layer, Button } from '@carbon/react';
|
|
3
3
|
import { Add } from '@carbon/react/icons';
|
|
4
4
|
import { useTranslation } from 'react-i18next';
|
|
5
|
-
import { parseDate, formatDatetime } from '@openmrs/esm-framework';
|
|
5
|
+
import { parseDate, formatDatetime, translateFrom, OpenmrsResource } from '@openmrs/esm-framework';
|
|
6
6
|
import { PriorityPill, StatusPill } from './OrderPills';
|
|
7
7
|
import { type Order } from '../../types/order/order';
|
|
8
8
|
import { CardHeader } from '@openmrs/esm-patient-common-lib';
|
|
@@ -15,12 +15,14 @@ type OrderTableProps = {
|
|
|
15
15
|
tableCellClassName: string;
|
|
16
16
|
priorityPillClassName: string;
|
|
17
17
|
statusPillClassName: string;
|
|
18
|
+
module: string;
|
|
18
19
|
};
|
|
19
20
|
|
|
20
21
|
const defaultHeaders = (t: (k: string, d: string) => string) => [
|
|
21
22
|
{ header: t('orderNo', 'Order No'), key: 'orderNo' },
|
|
22
23
|
{ header: t('dateOrdered', 'Date Ordered'), key: 'dateOrdered' },
|
|
23
24
|
{ header: t('order', 'Order'), key: 'order' },
|
|
25
|
+
{ header: t('orderReason', 'Order reason'), key: 'orderReason' },
|
|
24
26
|
{ header: t('priority', 'Priority'), key: 'priority' },
|
|
25
27
|
{ header: t('orderBy', 'Order By'), key: 'orderBy' },
|
|
26
28
|
{ header: t('status', 'Status'), key: 'status' },
|
|
@@ -34,6 +36,7 @@ export const OrderTable: React.FC<OrderTableProps> = ({
|
|
|
34
36
|
tableCellClassName,
|
|
35
37
|
priorityPillClassName,
|
|
36
38
|
statusPillClassName,
|
|
39
|
+
module,
|
|
37
40
|
}) => {
|
|
38
41
|
const { t } = useTranslation();
|
|
39
42
|
|
|
@@ -42,9 +45,22 @@ export const OrderTable: React.FC<OrderTableProps> = ({
|
|
|
42
45
|
orderNo: order.orderNumber,
|
|
43
46
|
dateOrdered: formatDatetime(parseDate(order.dateActivated), { mode: 'standard' }),
|
|
44
47
|
order: order.concept?.display?.replace('_', ' ') ?? '--',
|
|
45
|
-
priority:
|
|
48
|
+
priority: (
|
|
49
|
+
<PriorityPill
|
|
50
|
+
value={translateFrom(module, order.urgency, order.urgency)}
|
|
51
|
+
className={priorityPillClassName}
|
|
52
|
+
dataAttrName="priority"
|
|
53
|
+
/>
|
|
54
|
+
),
|
|
46
55
|
orderBy: order.orderer?.display ?? '--',
|
|
47
|
-
|
|
56
|
+
orderReason: (order.orderReason as unknown as OpenmrsResource)?.display,
|
|
57
|
+
status: (
|
|
58
|
+
<StatusPill
|
|
59
|
+
value={translateFrom(module, order.fulfillerStatus, order.fulfillerStatus)}
|
|
60
|
+
className={statusPillClassName}
|
|
61
|
+
dataAttrName="status"
|
|
62
|
+
/>
|
|
63
|
+
),
|
|
48
64
|
}));
|
|
49
65
|
|
|
50
66
|
if (orders?.length === 0) {
|
|
@@ -3,7 +3,36 @@ import { default as otpVerificationModal } from './otp-verification.modal';
|
|
|
3
3
|
import { type ModalSize } from '@carbon/react/lib/components/Modal/Modal';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Result returned by onStartBiometric — the caller's `/biometric-authorize`
|
|
7
|
+
* handler resolves with this shape so the modal knows the embed URL to render
|
|
8
|
+
* and the auth code to round-trip on success.
|
|
9
|
+
*/
|
|
10
|
+
export type BiometricStartResult = {
|
|
11
|
+
embed_url: string;
|
|
12
|
+
authorization_code: string;
|
|
13
|
+
consent_token: string;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Result handed to onBiometricSuccess when the iframe's eKYC capture completes
|
|
18
|
+
* successfully (postMessage from the eKYC origin).
|
|
19
|
+
*/
|
|
20
|
+
export type BiometricSuccessResult = {
|
|
21
|
+
authorization_code: string;
|
|
22
|
+
consent_token: string;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Options for configuring the OTP / Secure Patient Authentication modal.
|
|
27
|
+
*
|
|
28
|
+
* The modal supports two operating modes:
|
|
29
|
+
*
|
|
30
|
+
* 1. **otp-only** (default, backward compatible) — opens directly into the
|
|
31
|
+
* existing OTP confirm-phone screen. Use this when the only auth path is OTP.
|
|
32
|
+
* All existing consumers don't need to change.
|
|
33
|
+
*
|
|
34
|
+
* 2. **multi** — opens an auth landing screen with three options: biometric,
|
|
35
|
+
* OTP, or whitelist request. The available options depend on `whitelistedForOTP`.
|
|
7
36
|
*
|
|
8
37
|
* @property {number} [otpLength] - The number of digits required for the OTP. Defaults to implementation-specific value.
|
|
9
38
|
* @property {(otp: string) => Promise<void>} [onVerify] - Callback invoked when the user submits the OTP. Should return a promise that resolves on successful verification.
|
|
@@ -15,35 +44,61 @@ import { type ModalSize } from '@carbon/react/lib/components/Modal/Modal';
|
|
|
15
44
|
* @property {number} [expiryMinutes] - The number of minutes after which the OTP expires. Defaults to 5 minutes. This is displayed to the user for clarity.
|
|
16
45
|
* @property {() => void} [onCleanup] - Callback invoked when the modal closes to clean up OTP resources.
|
|
17
46
|
*
|
|
47
|
+
* @property {'otp-only' | 'multi'} [authMode] - When 'multi', shows the auth-landing method picker first (Biometric / OTP / Whitelist). When 'otp-only' or undefined, opens directly to the existing OTP landing.
|
|
48
|
+
* @property {boolean} [whitelistedForOTP] - Whether the patient is approved for OTP whitelist bypass. Drives method picker layout and post-failure recovery options.
|
|
49
|
+
* @property {() => Promise<BiometricStartResult>} [onStartBiometric] - Called when the user picks biometric. Should resolve with the embed_url + auth code from /biometric-authorize.
|
|
50
|
+
* @property {(result: BiometricSuccessResult) => void} [onBiometricSuccess] - Called on successful biometric capture (iframe postMessage SUCCESS).
|
|
51
|
+
* @property {(consentToken: string | null) => void} [onBiometricCancel] - Called when biometric session is cancelled (user closes, timer expires). Backend's /biometric-cancel goes here.
|
|
52
|
+
* @property {() => void} [onRequestWhitelist] - Called when the user clicks "Request OTP Whitelisting" — parent should open the whitelist submission flow.
|
|
53
|
+
* @property {() => void} [onRejected] - Called when the user clicks "Reject" on the auth landing — visit proceeds without consent (administrative override).
|
|
54
|
+
* @property {string} [ekycOrigin] - Expected origin of the eKYC iframe's postMessage events for security validation. Defaults to https://test.ekyc.pesaflow.com.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* // OTP-only mode (existing behavior, unchanged)
|
|
58
|
+
* launchOtpVerificationModal({
|
|
59
|
+
* otpLength: 6,
|
|
60
|
+
* phoneNumber: '254700000000',
|
|
61
|
+
* onRequestOtp: async (phone) => sendSHAOtp(crId, codes),
|
|
62
|
+
* onVerify: async (otp) => createSHAVirtualClaim(crId, otp, ...),
|
|
63
|
+
* onVerificationSuccess: () => console.log('verified'),
|
|
64
|
+
* });
|
|
65
|
+
*
|
|
18
66
|
* @example
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
67
|
+
* // Multi-method auth mode (biometric + OTP + whitelist)
|
|
68
|
+
* launchOtpVerificationModal({
|
|
69
|
+
* authMode: 'multi',
|
|
70
|
+
* whitelistedForOTP: patient.whitelisted_for_otp ?? false,
|
|
71
|
+
* phoneNumber: '254700000000',
|
|
72
|
+
*
|
|
73
|
+
* // OTP wiring
|
|
74
|
+
* onRequestOtp: async (phone) => sendSHAOtp(crId, codes),
|
|
75
|
+
* onVerify: async (otp) => createSHAVirtualClaim(crId, otp, ...),
|
|
76
|
+
* onVerificationSuccess: () => { ... },
|
|
77
|
+
*
|
|
78
|
+
* // Biometric wiring
|
|
79
|
+
* onStartBiometric: async () => {
|
|
80
|
+
* const res = await createSHABiometricAuthorize({ ... });
|
|
81
|
+
* if (!res.success || !res.embed_url) throw new Error(res.error);
|
|
82
|
+
* return {
|
|
83
|
+
* embed_url: res.embed_url,
|
|
84
|
+
* authorization_code: res.authorization_code!,
|
|
85
|
+
* consent_token: res.consent_token!,
|
|
86
|
+
* };
|
|
87
|
+
* },
|
|
88
|
+
* onBiometricSuccess: (result) => {
|
|
89
|
+
* shaClaimResponseRef.current = result;
|
|
90
|
+
* },
|
|
91
|
+
* onBiometricCancel: async (consentToken) => {
|
|
92
|
+
* if (consentToken) await cancelBiometricSession(consentToken);
|
|
93
|
+
* },
|
|
94
|
+
*
|
|
95
|
+
* // Escape paths
|
|
96
|
+
* onRequestWhitelist: () => launchWhitelistSubmissionModal({ patientCRId }),
|
|
97
|
+
* onRejected: () => markVisitProceedingWithoutConsent(),
|
|
98
|
+
* });
|
|
45
99
|
*/
|
|
46
100
|
export type OTPVerificationModalOptions = {
|
|
101
|
+
// ── existing OTP props ──
|
|
47
102
|
otpLength?: number;
|
|
48
103
|
onVerify?: (otp: string) => Promise<void>;
|
|
49
104
|
obscureText?: boolean;
|
|
@@ -54,12 +109,40 @@ export type OTPVerificationModalOptions = {
|
|
|
54
109
|
expiryMinutes?: number;
|
|
55
110
|
size?: ModalSize;
|
|
56
111
|
onCleanup?: () => void;
|
|
112
|
+
|
|
113
|
+
// ── new multi-method auth props ──
|
|
114
|
+
/** When 'multi', shows the auth-landing method picker first. Defaults to 'otp-only'. */
|
|
115
|
+
authMode?: 'otp-only' | 'multi';
|
|
116
|
+
|
|
117
|
+
/** Whether the patient is approved for OTP whitelist bypass. */
|
|
118
|
+
whitelistedForOTP?: boolean;
|
|
119
|
+
|
|
120
|
+
/** Called when user picks biometric. Resolve with embed_url + auth code. */
|
|
121
|
+
onStartBiometric?: () => Promise<BiometricStartResult>;
|
|
122
|
+
|
|
123
|
+
/** Called on successful biometric capture (postMessage SUCCESS from eKYC). */
|
|
124
|
+
onBiometricSuccess?: (result: BiometricSuccessResult) => void;
|
|
125
|
+
|
|
126
|
+
/** Called when biometric session is cancelled. Wire to backend /biometric-cancel. */
|
|
127
|
+
onBiometricCancel?: (consentToken: string | null) => void;
|
|
128
|
+
|
|
129
|
+
/** Called when user clicks "Request OTP Whitelisting". */
|
|
130
|
+
onRequestWhitelist?: () => void;
|
|
131
|
+
|
|
132
|
+
/** Called when user clicks "Reject" — visit proceeds without consent. */
|
|
133
|
+
onRejected?: () => void;
|
|
134
|
+
|
|
135
|
+
/** Expected origin of eKYC postMessage events. Defaults to https://test.ekyc.pesaflow.com. */
|
|
136
|
+
ekycOrigin?: string;
|
|
137
|
+
|
|
138
|
+
/** Whether this modal is being used to start or end a visit. Defaults to 'start'. Affects progress message text. */
|
|
139
|
+
visitAction?: 'start' | 'end';
|
|
57
140
|
};
|
|
58
141
|
|
|
59
142
|
/**
|
|
60
|
-
* Launch the OTP
|
|
143
|
+
* Launch the OTP / Secure Patient Authentication modal with the provided options.
|
|
61
144
|
*
|
|
62
|
-
* @param props - Configuration options for the
|
|
145
|
+
* @param props - Configuration options for the modal
|
|
63
146
|
* @returns A dispose function to close the modal programmatically
|
|
64
147
|
*/
|
|
65
148
|
export const launchOtpVerificationModal = (props: OTPVerificationModalOptions) => {
|