@kenyaemr/esm-express-workflow-app 5.4.4-pre.340 → 5.4.4-pre.342

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/.turbo/turbo-build.log +3 -3
  2. package/dist/2024.js +1 -1
  3. package/dist/2024.js.map +1 -1
  4. package/dist/2386.js +1 -0
  5. package/dist/2386.js.map +1 -0
  6. package/dist/4670.js +1 -0
  7. package/dist/4670.js.map +1 -0
  8. package/dist/4682.js +1 -1
  9. package/dist/4682.js.map +1 -1
  10. package/dist/5563.js +1 -0
  11. package/dist/5563.js.map +1 -0
  12. package/dist/6075.js +1 -0
  13. package/dist/6075.js.map +1 -0
  14. package/dist/6456.js +1 -1
  15. package/dist/6720.js +1 -0
  16. package/dist/6720.js.map +1 -0
  17. package/dist/7607.js +1 -1
  18. package/dist/8566.js +1 -0
  19. package/dist/8566.js.map +1 -0
  20. package/dist/8727.js +1 -1
  21. package/dist/8799.js +1 -0
  22. package/dist/8799.js.map +1 -0
  23. package/dist/9161.js +1 -0
  24. package/dist/9161.js.map +1 -0
  25. package/dist/9182.js +1 -1
  26. package/dist/9343.js +1 -0
  27. package/dist/9343.js.map +1 -0
  28. package/dist/9535.js +1 -1
  29. package/dist/9535.js.map +1 -1
  30. package/dist/kenyaemr-esm-express-workflow-app.js +1 -1
  31. package/dist/kenyaemr-esm-express-workflow-app.js.buildmanifest.json +213 -118
  32. package/dist/kenyaemr-esm-express-workflow-app.js.map +1 -1
  33. package/dist/main.js +4 -4
  34. package/dist/main.js.map +1 -1
  35. package/dist/routes.json +1 -1
  36. package/package.json +1 -1
  37. package/src/components/consultation/clinical-encounter/clinical-encounter.component.tsx +4 -20
  38. package/src/components/consultation/index.ts +1 -1
  39. package/src/components/consultation/tabs/index.ts +34 -0
  40. package/src/components/laboratory/index.ts +10 -1
  41. package/src/components/laboratory/lab-table.component.tsx +25 -12
  42. package/src/components/laboratory/laboratory-tabs.component.tsx +3 -17
  43. package/src/components/pharmacy/index.ts +1 -1
  44. package/src/components/pharmacy/pharmacy-tabs.component.tsx +4 -20
  45. package/src/components/pharmacy/tabs/index.ts +13 -0
  46. package/src/components/procedures/index.ts +15 -1
  47. package/src/components/procedures/procedures-table.component.tsx +26 -13
  48. package/src/components/procedures/procedures-tabs.component.tsx +3 -22
  49. package/src/components/radiology-and-imaging/index.ts +10 -1
  50. package/src/components/radiology-and-imaging/radiology-and-imaging-table.component.tsx +35 -14
  51. package/src/components/radiology-and-imaging/radiology-and-imaging.component.tsx +3 -19
  52. package/src/index.ts +0 -1
  53. package/src/routes.json +206 -5
  54. package/src/shared/patient-chart/patient-summary-dashboard/patient-summary-dashboard.component.tsx +5 -73
  55. package/src/shared/tabs/create-tab-extension.tsx +33 -0
  56. package/src/shared/tabs/extension-tabs.component.tsx +51 -33
  57. package/translations/am.json +5 -1
  58. package/translations/en.json +5 -1
  59. package/translations/fr.json +5 -1
  60. package/translations/sw.json +5 -1
  61. package/dist/2332.js +0 -1
  62. package/dist/2332.js.map +0 -1
  63. package/dist/4666.js +0 -1
  64. package/dist/4666.js.map +0 -1
  65. package/dist/644.js +0 -1
  66. package/dist/644.js.map +0 -1
  67. package/dist/655.js +0 -1
  68. package/dist/655.js.map +0 -1
  69. package/dist/70.js +0 -1
  70. package/dist/70.js.map +0 -1
  71. package/dist/9387.js +0 -1
  72. package/dist/9387.js.map +0 -1
  73. package/src/shared/orders/OrdersTabs.tsx +0 -76
  74. /package/src/shared/{patient-chart/patient-summary-dashboard → tabs}/patient-summary-dashboard.scss +0 -0
package/dist/routes.json CHANGED
@@ -1 +1 @@
1
- {"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"fhir2":">=1.2","webservices.rest":">=2.24.0"},"pages":[{"component":"root","route":"express-workflow"},{"component":"queuesAdminHome","route":"queues-admin"}],"extensions":[{"component":"appointmentsDashboardLink","name":"appointments-dashboard-link","slot":"appointments-left-panel-slot","meta":{"name":"appointments","slot":"appointments-dashboard-slot","title":"Appointments"}},{"name":"ewf-preauth-dashboard-link","component":"preauthDashboardLink","slot":"patient-chart-dashboard-slot","order":10,"meta":{"name":"ewf-preauth","title":"Preauthorization","path":"preauthorization","slot":"ewf-preauth-dashboard-slot","layoutMode":"anchored","hideDashboardTitle":true}},{"name":"ewf-preauth-dashboard","component":"preauthDashboard","slot":"ewf-patient-chart-preauth-dashboard-slot","online":true,"offline":false},{"component":"admissionsLeftPanelLink","name":"admissions-dashboard-link","slot":"express-workflow-left-panel-slot","order":9,"meta":{"name":"admissions","slot":"admissions-dashboard-slot","title":"Admissions"}},{"component":"admissionsDashboard","name":"admissions-dashboard","slot":"admissions-dashboard-slot"},{"component":"consultationLeftPanelLink","name":"consultation-dashboard-link","slot":"homepage-dashboard-slot","order":3,"meta":{"name":"consultation","slot":"consultation-dashboard-slot","title":"Consultation"}},{"component":"consultationDashboard","name":"consultation-dashboard","slot":"consultation-dashboard-slot"},{"component":"facilityLeftPanelLink","name":"facility-dashboard-link","slot":"homepage-dashboard-slot","order":0,"meta":{"name":"dashboard","slot":"facility-dashboard-slot","title":"Dashboard"}},{"component":"facilityDashboard","name":"facility-dashboard","slot":"facility-dashboard-slot"},{"component":"mchLeftPanelLink","name":"mch-dashboard-link","slot":"homepage-dashboard-slot","meta":{"name":"mch","slot":"mch-dashboard-slot","title":"MCH"}},{"component":"mchDashboard","name":"mch-dashboard","slot":"mch-dashboard-slot"},{"component":"registrationLeftPanelLink","name":"registration-dashboard-link","slot":"homepage-dashboard-slot","meta":{"name":"registration","slot":"registration-dashboard-slot","title":"Registration"}},{"component":"registrationDashboard","name":"registration-dashboard","slot":"registration-dashboard-slot"},{"component":"triageLeftPanelLink","name":"triage-dashboard-link","slot":"homepage-dashboard-slot","meta":{"name":"triage","slot":"triage-dashboard-slot","title":"Triage"}},{"component":"triageDashboard","name":"triage-dashboard","slot":"triage-dashboard-slot"},{"name":"custom-visit-form-queue-fields","component":"checkinFormExtraExtension","slot":"visit-form-bottom-slot","order":0},{"component":"reportsDashboardLink","name":"reports-homepage-dashboard-link","slot":"homepage-dashboard-slot","meta":{"name":"reports","slot":"reports-homepage-dashboard-slot","title":"Reports"}},{"component":"reportsDashboard","name":"reports-dashboard","slot":"reports-homepage-dashboard-slot"},{"name":"pharmacy-homepage-dashboard-link","component":"pharmacyLink","slot":"homepage-dashboard-slot","meta":{"name":"pharmacy","title":"Pharmacy","path":"pharmacy","slot":"pharmacy-homepage-dashboard-slot"}},{"name":"pharmacy-homepage-dashboard","component":"pharmacy","slot":"pharmacy-homepage-dashboard-slot","online":true,"offline":false},{"name":"ewf-pharmacy-orders-dashboard","component":"pharmacyOrders","slot":"ewf-orders-slot","online":true,"offline":false},{"name":"patient-summary-dashboard","component":"patientSummaryDashboard","slot":"patient-chart-summary-dashboard-slot"},{"name":"ewf-clinical-encounter-link","component":"clinicalEncounterLink","slot":"patient-chart-dashboard-slot","meta":{"name":"ewf-clinical-encounter","title":"Clinical Encounter","slot":"ewf-patient-chart-clinical-encounter-slot","path":"clinical-encounter","layoutMode":"anchored","hideDashboardTitle":true}},{"name":"ewf-clinical-encounter-dashboard","component":"clinicalEncounter","slot":"ewf-patient-chart-clinical-encounter-slot","online":true,"offline":false},{"name":"ewf-laboratory-dashboard-link","component":"laboratoryLeftPanelLink","slot":"patient-chart-dashboard-slot","meta":{"name":"ewf-laboratory","title":"Lab Orders","path":"laboratory","slot":"ewf-patient-chart-laboratory-dashboard-slot","layoutMode":"anchored","hideDashboardTitle":true}},{"name":"ewf-laboratory-dashboard","component":"laboratoryDashboard","slot":"ewf-patient-chart-laboratory-dashboard-slot","online":true,"offline":false},{"name":"ewf-radiology-and-imaging-dashboard-link","component":"radiologyAndImagingLeftPanelLink","slot":"patient-chart-dashboard-slot","meta":{"name":"ewf-radiology-and-imaging","title":"Radiology and Imaging","path":"radiology-and-imaging","slot":"ewf-patient-chart-radiology-and-imaging-dashboard-slot","layoutMode":"anchored","hideDashboardTitle":true}},{"name":"ewf-radiology-and-imaging-dashboard","component":"radiologyAndImagingDashboard","slot":"ewf-patient-chart-radiology-and-imaging-dashboard-slot","online":true,"offline":false},{"name":"ewf-procedures-dashboard-link","component":"proceduresLeftPanelLink","slot":"patient-chart-dashboard-slot","meta":{"name":"ewf-procedures","title":"Procedures","path":"procedures","slot":"ewf-patient-chart-procedures-dashboard-slot","layoutMode":"anchored","hideDashboardTitle":true}},{"name":"ewf-procedures-dashboard","component":"proceduresDashboard","slot":"ewf-patient-chart-procedures-dashboard-slot","online":true,"offline":false},{"name":"ewf-pharmacy-dashboard-link","component":"pharmacyPatientChartDashboardLink","slot":"patient-chart-dashboard-slot","meta":{"name":"ewf-pharmacy","title":"Prescription","path":"pharmacy","slot":"ewf-patient-chart-pharmacy-dashboard-slot","layoutMode":"anchored","hideDashboardTitle":true}},{"name":"ewf-pharmacy-dashboard","component":"pharmacyTabs","slot":"ewf-patient-chart-pharmacy-dashboard-slot","online":true,"offline":false},{"name":"ewf-admissions-dashboard-link","component":"admissionsDashboardLink","slot":"patient-chart-dashboard-slot","meta":{"name":"ewf-admissions","title":"In-patient","path":"admissions","slot":"ewf-patient-chart-admissions-dashboard-slot","layoutMode":"anchored","hideDashboardTitle":true}},{"name":"ewf-admissions-dashboard","component":"admissionsDashboard","slot":"ewf-patient-chart-admissions-dashboard-slot","online":true,"offline":false},{"name":"ewf-homepage-dashboard-link","component":"homepageDashboardLink","slot":"patient-chart-dashboard-slot","order":0},{"name":"ewf-encounter-details-dashboard","component":"encounterDetails","slot":"ewf-clinical-encounter-slot","online":true,"offline":false},{"name":"custom-start-visit-overflow-menu-item","slot":"patient-actions-slot","component":"customStartVisitOverflowMenuItem","online":true,"offline":true},{"name":"custom-stop-visit-overflow-menu-item","component":"customStopVisitOverflowMenuItem","online":true,"offline":true},{"name":"procedure-queues","component":"procedureQueues","online":true,"offline":false,"featureFlag":"procedureQueues","slot":"procedure-orders-dashboard-slot"},{"name":"procedure-form-extras","component":"procedureFormExtras","slot":"procedure-order-form-extras-slot","online":true,"offline":false,"featureFlag":"procedureQueues"}],"workspaces2":[{"name":"custom-start-visit-workspace-form","component":"visitFormWorkspace","window":"ewf-start-visit"},{"name":"anaesthetic-record-workspace-form","component":"anaestheticFormWorkspace","window":"ewf-anaesthetic-record"},{"name":"interoperative-drug-given-workspace-form","component":"interoperativeDrugGivenFormWorkspace","window":"ewf-anaesthetic-record"}],"workspaceWindows2":[{"name":"ewf-start-visit","group":"patient-chart","width":"wider"},{"name":"ewf-anaesthetic-record","group":"ewf-patient-chart","width":"wider"}],"workspaceGroups2":[{"name":"ewf-patient-chart","scopePattern":"/patient/([^/]+)/chart"}],"modals":[{"component":"otpVerificationModal","name":"otp-verification-modal"},{"component":"facilityDashboardAuthorizationModal","name":"facility-dashboard-authorization-form-modal"},{"name":"custom-end-visit-dialog","component":"customEndVisitModal"}],"version":"5.4.4-pre.340"}
1
+ {"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"fhir2":">=1.2","webservices.rest":">=2.24.0"},"pages":[{"component":"root","route":"express-workflow"},{"component":"queuesAdminHome","route":"queues-admin"}],"extensions":[{"component":"appointmentsDashboardLink","name":"appointments-dashboard-link","slot":"appointments-left-panel-slot","meta":{"name":"appointments","slot":"appointments-dashboard-slot","title":"Appointments"}},{"name":"ewf-preauth-dashboard-link","component":"preauthDashboardLink","slot":"patient-chart-dashboard-slot","order":10,"meta":{"name":"ewf-preauth","title":"Preauthorization","path":"preauthorization","slot":"ewf-preauth-dashboard-slot","layoutMode":"anchored","hideDashboardTitle":true}},{"name":"ewf-preauth-dashboard","component":"preauthDashboard","slot":"ewf-patient-chart-preauth-dashboard-slot","online":true,"offline":false},{"component":"admissionsLeftPanelLink","name":"admissions-dashboard-link","slot":"express-workflow-left-panel-slot","order":9,"meta":{"name":"admissions","slot":"admissions-dashboard-slot","title":"Admissions"}},{"component":"admissionsDashboard","name":"admissions-dashboard","slot":"admissions-dashboard-slot"},{"component":"consultationLeftPanelLink","name":"consultation-dashboard-link","slot":"homepage-dashboard-slot","order":3,"meta":{"name":"consultation","slot":"consultation-dashboard-slot","title":"Consultation"}},{"component":"consultationDashboard","name":"consultation-dashboard","slot":"consultation-dashboard-slot"},{"component":"facilityLeftPanelLink","name":"facility-dashboard-link","slot":"homepage-dashboard-slot","order":0,"meta":{"name":"dashboard","slot":"facility-dashboard-slot","title":"Dashboard"}},{"component":"facilityDashboard","name":"facility-dashboard","slot":"facility-dashboard-slot"},{"component":"mchLeftPanelLink","name":"mch-dashboard-link","slot":"homepage-dashboard-slot","meta":{"name":"mch","slot":"mch-dashboard-slot","title":"MCH"}},{"component":"mchDashboard","name":"mch-dashboard","slot":"mch-dashboard-slot"},{"component":"registrationLeftPanelLink","name":"registration-dashboard-link","slot":"homepage-dashboard-slot","meta":{"name":"registration","slot":"registration-dashboard-slot","title":"Registration"}},{"component":"registrationDashboard","name":"registration-dashboard","slot":"registration-dashboard-slot"},{"component":"triageLeftPanelLink","name":"triage-dashboard-link","slot":"homepage-dashboard-slot","meta":{"name":"triage","slot":"triage-dashboard-slot","title":"Triage"}},{"component":"triageDashboard","name":"triage-dashboard","slot":"triage-dashboard-slot"},{"name":"custom-visit-form-queue-fields","component":"checkinFormExtraExtension","slot":"visit-form-bottom-slot","order":0},{"component":"reportsDashboardLink","name":"reports-homepage-dashboard-link","slot":"homepage-dashboard-slot","meta":{"name":"reports","slot":"reports-homepage-dashboard-slot","title":"Reports"}},{"component":"reportsDashboard","name":"reports-dashboard","slot":"reports-homepage-dashboard-slot"},{"name":"pharmacy-homepage-dashboard-link","component":"pharmacyLink","slot":"homepage-dashboard-slot","meta":{"name":"pharmacy","title":"Pharmacy","path":"pharmacy","slot":"pharmacy-homepage-dashboard-slot"}},{"name":"pharmacy-homepage-dashboard","component":"pharmacy","slot":"pharmacy-homepage-dashboard-slot","online":true,"offline":false},{"name":"ewf-pharmacy-orders-dashboard","component":"pharmacyOrders","slot":"ewf-orders-slot","online":true,"offline":false},{"name":"patient-summary-dashboard","component":"patientSummaryDashboard","slot":"patient-chart-summary-dashboard-slot"},{"name":"ewf-clinical-encounter-link","component":"clinicalEncounterLink","slot":"patient-chart-dashboard-slot","meta":{"name":"ewf-clinical-encounter","title":"Clinical Encounter","slot":"ewf-patient-chart-clinical-encounter-slot","path":"clinical-encounter","layoutMode":"anchored","hideDashboardTitle":true}},{"name":"ewf-clinical-encounter-dashboard","component":"clinicalEncounter","slot":"ewf-patient-chart-clinical-encounter-slot","online":true,"offline":false},{"name":"ewf-laboratory-dashboard-link","component":"laboratoryLeftPanelLink","slot":"patient-chart-dashboard-slot","meta":{"name":"ewf-laboratory","title":"Lab Orders","path":"laboratory","slot":"ewf-patient-chart-laboratory-dashboard-slot","layoutMode":"anchored","hideDashboardTitle":true}},{"name":"ewf-laboratory-dashboard","component":"laboratoryDashboard","slot":"ewf-patient-chart-laboratory-dashboard-slot","online":true,"offline":false},{"name":"ewf-radiology-and-imaging-dashboard-link","component":"radiologyAndImagingLeftPanelLink","slot":"patient-chart-dashboard-slot","meta":{"name":"ewf-radiology-and-imaging","title":"Radiology and Imaging","path":"radiology-and-imaging","slot":"ewf-patient-chart-radiology-and-imaging-dashboard-slot","layoutMode":"anchored","hideDashboardTitle":true}},{"name":"ewf-radiology-and-imaging-dashboard","component":"radiologyAndImagingDashboard","slot":"ewf-patient-chart-radiology-and-imaging-dashboard-slot","online":true,"offline":false},{"name":"ewf-procedures-dashboard-link","component":"proceduresLeftPanelLink","slot":"patient-chart-dashboard-slot","meta":{"name":"ewf-procedures","title":"Procedures","path":"procedures","slot":"ewf-patient-chart-procedures-dashboard-slot","layoutMode":"anchored","hideDashboardTitle":true}},{"name":"ewf-procedures-dashboard","component":"proceduresDashboard","slot":"ewf-patient-chart-procedures-dashboard-slot","online":true,"offline":false},{"name":"ewf-pharmacy-dashboard-link","component":"pharmacyPatientChartDashboardLink","slot":"patient-chart-dashboard-slot","meta":{"name":"ewf-pharmacy","title":"Prescription","path":"pharmacy","slot":"ewf-patient-chart-pharmacy-dashboard-slot","layoutMode":"anchored","hideDashboardTitle":true}},{"name":"ewf-pharmacy-dashboard","component":"pharmacyTabs","slot":"ewf-patient-chart-pharmacy-dashboard-slot","online":true,"offline":false},{"name":"ewf-admissions-dashboard-link","component":"admissionsDashboardLink","slot":"patient-chart-dashboard-slot","meta":{"name":"ewf-admissions","title":"In-patient","path":"admissions","slot":"ewf-patient-chart-admissions-dashboard-slot","layoutMode":"anchored","hideDashboardTitle":true}},{"name":"ewf-admissions-dashboard","component":"admissionsDashboard","slot":"ewf-patient-chart-admissions-dashboard-slot","online":true,"offline":false},{"name":"ewf-homepage-dashboard-link","component":"homepageDashboardLink","slot":"patient-chart-dashboard-slot","order":0},{"name":"ewf-encounter-details-dashboard","component":"encounterDetails","slot":"ewf-clinical-encounter-slot","online":true,"offline":false},{"name":"custom-start-visit-overflow-menu-item","slot":"patient-actions-slot","component":"customStartVisitOverflowMenuItem","online":true,"offline":true},{"name":"custom-stop-visit-overflow-menu-item","component":"customStopVisitOverflowMenuItem","online":true,"offline":true},{"name":"procedure-queues","component":"procedureQueues","online":true,"offline":false,"featureFlag":"procedureQueues","slot":"procedure-orders-dashboard-slot"},{"name":"procedure-form-extras","component":"procedureFormExtras","slot":"procedure-order-form-extras-slot","online":true,"offline":false,"featureFlag":"procedureQueues"},{"name":"ewf-patient-summary-tab","component":"patientSummary","slot":"ewf-patient-chart-patient-summary-tabs-extension-slot","meta":{"title":"patientSummaryTab","slot":"ewf-patient-summary-slot"}},{"name":"ewf-patient-vitals-tab","component":"patientVitals","slot":"ewf-patient-chart-patient-summary-tabs-extension-slot","meta":{"title":"vitalsAndAnthropometric","slot":"ewf-vitals-slot"}},{"name":"ewf-patient-care-panel-tab","component":"carePanel","slot":"ewf-patient-chart-patient-summary-tabs-extension-slot","meta":{"title":"carePanel","slot":"ewf-care-panel-slot"}},{"name":"ewf-patient-immunization-tab","component":"immunization","slot":"ewf-patient-chart-patient-summary-tabs-extension-slot","meta":{"title":"immunizations","slot":"ewf-immunizations-slot"}},{"name":"ewf-patient-relationships-tab","component":"relationships","slot":"ewf-patient-chart-patient-summary-tabs-extension-slot","meta":{"title":"relationships","slot":"ewf-relationships-slot"}},{"name":"ewf-patient-appointments-tab","component":"appointments","slot":"ewf-patient-chart-patient-summary-tabs-extension-slot","meta":{"title":"appointments","slot":"ewf-appointments-slot"}},{"name":"ewf-patient-attachments-tab","component":"attachments","slot":"ewf-patient-chart-patient-summary-tabs-extension-slot","meta":{"title":"attachments","slot":"ewf-attachments-slot"}},{"name":"ewf-patient-clinical-encounter-tab","component":"patientClinicalEncounter","slot":"clinical-encounter-tabs-slot","meta":{"title":"clinicalEncounter","slot":"ewf-clinical-encounter-slot"}},{"name":"ewf-patient-visits-tab","component":"patientVisits","slot":"clinical-encounter-tabs-slot","meta":{"title":"visits","slot":"ewf-visits-slot"}},{"name":"ewf-patient-special-clinics-tab","component":"specialClinics","slot":"clinical-encounter-tabs-slot","meta":{"title":"specialClinics","slot":"ewf-special-clinics-slot"}},{"name":"ewf-clinical-notes-tab","component":"clinicalNotes","meta":{"title":"clinicalNotes","slot":"ewf-clinical-notes-slot"}},{"name":"ewf-procedures-and-orders-tab","component":"proceduresAndOrders","meta":{"title":"proceduresAndOrders","slot":"ewf-procedures-and-orders-slot"}},{"name":"ewf-procedures-and-orders-results-tab","component":"proceduresAndOrdersResults","meta":{"title":"resultsTab","slot":"ewf-procedures-and-orders-results-slot"}},{"name":"ewf-pharmacy-orders-tab","component":"pharmacyOrdersTab","slot":"pharmacy-tabs-slot","meta":{"title":"orders","slot":"ewf-orders-slot"}},{"name":"ewf-pharmacy-active-medication-tab","component":"pharmacyActiveMedicationsTab","slot":"pharmacy-tabs-slot","meta":{"title":"activeMedications","slot":"ewf-active-medications-slot"}},{"name":"ewf-pharmacy-past-medication-tab","component":"pharmacyPastMedicationsTab","slot":"pharmacy-tabs-slot","meta":{"title":"pastMedications","slot":"ewf-past-medications-slot"}},{"name":"ewf-patient-lab-orders-tab","component":"patientLaboratoryOrdersTab","slot":"patient-laboratory-tabs-slot","meta":{"title":"orders"}},{"name":"ewf-patient-lab-order-results-tab","component":"patientLaboratoryOrdersResults","slot":"patient-laboratory-tabs-slot","meta":{"title":"results","slot":"ewf-laboratory-results-slot","basePath":"laboratory"}},{"name":"ewf-patient-procedure-orders-tab","component":"patientProcedureOrdersTab","slot":"patient-procedure-tabs-slot","meta":{"title":"orders"}},{"name":"ewf-patient-procedure-order-results-tab","component":"patientProcedureOrdersResults","slot":"patient-procedure-tabs-slot","meta":{"title":"results","slot":"ewf-procedures-results-slot","basePath":"procedures"}},{"name":"ewf-patient-procedure-anaesthetic-tab","component":"patientProcedureAnaestheticTab","slot":"patient-procedure-tabs-slot","meta":{"title":"anaesthetic"}},{"name":"ewf-patient-imaging-orders-tab","component":"patientImagingOrdersTab","slot":"patient-imaging-tabs-slot","meta":{"title":"orders"}},{"name":"ewf-patient-imaging-order-results-tab","component":"patientImagingOrdersResults","slot":"patient-imaging-tabs-slot","meta":{"title":"results","slot":"ewf-radiology-and-imaging-results-slot","basePath":"radiology-and-imaging"}}],"workspaces2":[{"name":"custom-start-visit-workspace-form","component":"visitFormWorkspace","window":"ewf-start-visit"},{"name":"anaesthetic-record-workspace-form","component":"anaestheticFormWorkspace","window":"ewf-anaesthetic-record"},{"name":"interoperative-drug-given-workspace-form","component":"interoperativeDrugGivenFormWorkspace","window":"ewf-anaesthetic-record"}],"workspaceWindows2":[{"name":"ewf-start-visit","group":"patient-chart","width":"wider"},{"name":"ewf-anaesthetic-record","group":"ewf-patient-chart","width":"wider"}],"workspaceGroups2":[{"name":"ewf-patient-chart","scopePattern":"/patient/([^/]+)/chart"}],"modals":[{"component":"otpVerificationModal","name":"otp-verification-modal"},{"component":"facilityDashboardAuthorizationModal","name":"facility-dashboard-authorization-form-modal"},{"name":"custom-end-visit-dialog","component":"customEndVisitModal"}],"version":"5.4.4-pre.342"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kenyaemr/esm-express-workflow-app",
3
- "version": "5.4.4-pre.340",
3
+ "version": "5.4.4-pre.342",
4
4
  "description": "Express workflow app for OpenMRS 3",
5
5
  "keywords": [
6
6
  "openmrs",
@@ -1,28 +1,12 @@
1
- import React, { useMemo } from 'react';
2
- import { useTranslation } from 'react-i18next';
3
- import { Layer } from '@carbon/react';
4
- import { IbmWatsonDiscovery, Account, Stethoscope } from '@carbon/react/icons';
5
- import ExtensionTabs, { ExtensionTabItem } from '../../../shared/tabs/extension-tabs.component';
1
+ import React from 'react';
2
+ import ExtensionTabs from '../../../shared/tabs/extension-tabs.component';
6
3
 
7
4
  type ClinicalEncounterProps = {
8
5
  patientUuid: string;
9
- patient: fhir.Patient;
10
6
  };
11
7
 
12
- const ClinicalEncounter: React.FC<ClinicalEncounterProps> = ({ patientUuid, patient }) => {
13
- const { t } = useTranslation();
14
- const state = useMemo(() => ({ patientUuid, patient }), [patientUuid, patient]);
15
- const items: Array<ExtensionTabItem> = [
16
- { label: t('clinicalEncounter', 'Clinical Encounter'), icon: Stethoscope, slotName: 'ewf-clinical-encounter-slot' },
17
- { label: t('visits', 'Visits'), icon: Account, slotName: 'ewf-visits-slot' },
18
- { label: t('specialClinics', 'Special Clinics'), icon: IbmWatsonDiscovery, slotName: 'ewf-special-clinics-slot' },
19
- ];
20
-
21
- return (
22
- <Layer>
23
- <ExtensionTabs items={items} state={state} />
24
- </Layer>
25
- );
8
+ const ClinicalEncounter: React.FC<ClinicalEncounterProps> = ({ patientUuid }) => {
9
+ return <ExtensionTabs extensionSlotName="clinical-encounter-tabs-slot" patientUuid={patientUuid} />;
26
10
  };
27
11
 
28
12
  export default ClinicalEncounter;
@@ -1,5 +1,5 @@
1
1
  import { getAsyncLifecycle } from '@openmrs/esm-framework';
2
-
2
+ export * from './tabs';
3
3
  import { moduleName } from '../../constants';
4
4
 
5
5
  const options = {
@@ -0,0 +1,34 @@
1
+ import { getSyncLifecycle } from '@openmrs/esm-framework';
2
+ import { createTabExtension } from '../../../shared/tabs/create-tab-extension';
3
+
4
+ const options = {
5
+ featureName: 'express-workflow',
6
+ moduleName: '@kenyaemr/esm-express-workflow-app',
7
+ };
8
+
9
+ // t('patientSummaryTab', 'Patient Summary')
10
+ export const patientSummary = getSyncLifecycle(createTabExtension(), options);
11
+ // t('vitalsAndAnthropometric', 'Vitals & Anthropometric')
12
+ export const patientVitals = getSyncLifecycle(createTabExtension(), options);
13
+ // t('carePanel', 'Care Panel')
14
+ export const carePanel = getSyncLifecycle(createTabExtension(), options);
15
+ // t('immunizations', 'Immunizations')
16
+ export const immunization = getSyncLifecycle(createTabExtension(), options);
17
+ // t('relationships', 'Relationships')
18
+ export const relationships = getSyncLifecycle(createTabExtension(), options);
19
+ // t('appointments', 'Appointments')
20
+ export const appointments = getSyncLifecycle(createTabExtension(), options);
21
+ // t("attachments", "Attachments")
22
+ export const attachments = getSyncLifecycle(createTabExtension(), options);
23
+ // t('clinicalEncounterTab', 'Clinical Encounter')
24
+ export const patientClinicalEncounter = getSyncLifecycle(createTabExtension(), options);
25
+ // t('visits', 'Visits')
26
+ export const patientVisits = getSyncLifecycle(createTabExtension(), options);
27
+ // t('specialClinics', 'Special Clinics')
28
+ export const specialClinics = getSyncLifecycle(createTabExtension(), options);
29
+ // t('clinicalNotes', 'Clinical Notes')
30
+ export const clinicalNotes = getSyncLifecycle(createTabExtension(), options);
31
+ // t('proceduresAndOrders', 'Procedures & Orders')
32
+ export const proceduresAndOrders = getSyncLifecycle(createTabExtension(), options);
33
+ // t('resultsTab', 'Results')
34
+ export const proceduresAndOrdersResults = getSyncLifecycle(createTabExtension(), options);
@@ -1,6 +1,7 @@
1
- import { getAsyncLifecycle } from '@openmrs/esm-framework';
1
+ import { getAsyncLifecycle, getSyncLifecycle } from '@openmrs/esm-framework';
2
2
 
3
3
  import { moduleName } from '../../constants';
4
+ import { createTabExtension } from '../../shared/tabs/create-tab-extension';
4
5
 
5
6
  const options = {
6
7
  featureName: 'express-workflow',
@@ -20,3 +21,11 @@ export const laboratoryLeftPanelLink = getAsyncLifecycle(
20
21
  })),
21
22
  options,
22
23
  );
24
+
25
+ // t("results", "Results")
26
+ export const patientLaboratoryOrdersResults = getSyncLifecycle(createTabExtension(), options);
27
+ // t("order", "Orders")
28
+ export const patientLaboratoryOrdersTab = getAsyncLifecycle(
29
+ () => import('../../components/laboratory/lab-table.component'),
30
+ options,
31
+ );
@@ -1,35 +1,48 @@
1
1
  import React, { useMemo } from 'react';
2
- import { Order } from '../../types/order/order';
3
- import { Layer } from '@carbon/react';
2
+ import { DataTableSkeleton, Layer } from '@carbon/react';
4
3
  import { useTranslation } from 'react-i18next';
5
- import { useConfig } from '@openmrs/esm-framework';
4
+ import { ErrorState, useConfig } from '@openmrs/esm-framework';
6
5
  import styles from './laboratory-tabs.scss';
7
6
  import { EmptyState, useLaunchWorkspaceRequiringVisit, usePatientChartStore } from '@openmrs/esm-patient-common-lib';
8
7
  import { ExpressWorkflowConfig } from '../../config-schema';
9
8
  import OrderTable from '../../shared/orders/OrderTable';
9
+ import { usePatientOrders } from '../../hooks/useOrders';
10
10
 
11
11
  type LabTableProps = {
12
- orders: Array<Order>;
13
12
  patientUuid: string;
14
- mutateOrders: () => void;
15
13
  };
16
14
 
17
- const LabTable: React.FC<LabTableProps> = ({ orders, patientUuid, mutateOrders }) => {
15
+ const LabTable: React.FC<LabTableProps> = ({ patientUuid }) => {
16
+ const { labOrderTypeUuid, orderableConceptSets } = useConfig<ExpressWorkflowConfig>();
17
+ const {
18
+ data: orders,
19
+ isLoading,
20
+ error,
21
+ mutate: mutateOrders,
22
+ } = usePatientOrders(patientUuid, 'any', labOrderTypeUuid, undefined, undefined);
23
+
18
24
  const { t } = useTranslation();
19
25
  const { patient } = usePatientChartStore(patientUuid);
20
- const windowProps = useMemo(() => ({ encounterUuid: orders[0]?.encounter?.uuid }), [orders[0]?.encounter?.uuid]);
26
+ const windowProps = useMemo(() => ({ encounterUuid: orders?.[0]?.encounter?.uuid }), [orders]);
21
27
  const groupProps = useMemo(
22
28
  () => ({
23
29
  patient,
24
30
  patientUuid: patient?.id,
25
- visitContext: orders[0]?.encounter?.visit,
31
+ visitContext: orders?.[0]?.encounter?.visit,
26
32
  mutateVisitContext: mutateOrders,
27
33
  }),
28
- [patient, orders[0]?.encounter?.visit, mutateOrders],
34
+ [patient, orders, mutateOrders],
29
35
  );
30
- const { labOrderTypeUuid, orderableConceptSets } = useConfig<ExpressWorkflowConfig>();
31
36
  const launchAddLabOrder = useLaunchWorkspaceRequiringVisit(patientUuid, 'order-basket');
32
37
 
38
+ if (isLoading) {
39
+ return <DataTableSkeleton />;
40
+ }
41
+
42
+ if (error) {
43
+ return <ErrorState headerTitle={t('laboratoryOrders', 'Laboratory Orders')} error={error} />;
44
+ }
45
+
33
46
  if (orders?.length === 0) {
34
47
  return (
35
48
  <Layer>
@@ -47,8 +60,8 @@ const LabTable: React.FC<LabTableProps> = ({ orders, patientUuid, mutateOrders }
47
60
  return (
48
61
  <OrderTable
49
62
  title={t('laboratoryOrders', 'Laboratory Orders')}
50
- orders={orders}
51
- onAdd={() => launchAddLabOrder(null, { encounterUuid: '' }, groupProps)}
63
+ orders={orders ?? []}
64
+ onAdd={() => launchAddLabOrder(undefined, { encounterUuid: '' }, groupProps)}
52
65
  containerClassName={styles.labTableContainer}
53
66
  tableCellClassName={styles.tableCell}
54
67
  priorityPillClassName={styles.priorityPill}
@@ -1,29 +1,15 @@
1
1
  import React from 'react';
2
2
  import { useTranslation } from 'react-i18next';
3
- import OrdersTabs from '../../shared/orders/OrdersTabs';
4
- import LabTable from './lab-table.component';
3
+ import ExtensionTabs from '../../shared/tabs/extension-tabs.component';
5
4
 
6
5
  type LaboratoryTabsProps = {
7
6
  patientUuid: string;
8
- patient: fhir.Patient;
9
7
  };
10
8
 
11
- const LaboratoryTabs: React.FC<LaboratoryTabsProps> = ({ patientUuid, patient }) => {
9
+ const LaboratoryTabs: React.FC<LaboratoryTabsProps> = ({ patientUuid }) => {
12
10
  const { t } = useTranslation();
13
- const testOrderTypeUuid = '52a447d3-a64a-11e3-9aeb-50e549534c5e';
14
11
 
15
- return (
16
- <OrdersTabs
17
- patientUuid={patientUuid}
18
- patient={patient}
19
- basePath="laboratory"
20
- resultsSlotName="ewf-laboratory-results-slot"
21
- orderTypeUuid={testOrderTypeUuid}
22
- Table={({ orders, mutateOrders }) => {
23
- return <LabTable orders={orders} patientUuid={patientUuid} mutateOrders={mutateOrders} />;
24
- }}
25
- />
26
- );
12
+ return <ExtensionTabs extensionSlotName="patient-laboratory-tabs-slot" patientUuid={patientUuid} />;
27
13
  };
28
14
 
29
15
  export default LaboratoryTabs;
@@ -1,7 +1,7 @@
1
1
  import { getAsyncLifecycle } from '@openmrs/esm-framework';
2
2
 
3
3
  import { moduleName } from '../../constants';
4
-
4
+ export * from './tabs';
5
5
  const options = {
6
6
  featureName: 'express-workflow',
7
7
  moduleName,
@@ -1,29 +1,13 @@
1
- import React, { useMemo } from 'react';
2
- import { useTranslation } from 'react-i18next';
3
- import { Layer } from '@carbon/react';
4
- import { Activity, RequestQuote, CalendarTools } from '@carbon/react/icons';
1
+ import React from 'react';
5
2
 
6
- import ExtensionTabs, { ExtensionTabItem } from '../../shared/tabs/extension-tabs.component';
3
+ import ExtensionTabs from '../../shared/tabs/extension-tabs.component';
7
4
 
8
5
  type PharmacyTabsProps = {
9
6
  patientUuid: string;
10
- patient: fhir.Patient;
11
7
  };
12
8
 
13
- const PharmacyTabs: React.FC<PharmacyTabsProps> = ({ patientUuid, patient }) => {
14
- const { t } = useTranslation();
15
- const state = useMemo(() => ({ patientUuid, patient }), [patientUuid, patient]);
16
- const items: Array<ExtensionTabItem> = [
17
- { label: t('orders', 'Orders'), icon: RequestQuote, slotName: 'ewf-orders-slot' },
18
- { label: t('activeMedications', 'Active Medications'), icon: Activity, slotName: 'ewf-active-medications-slot' },
19
- { label: t('pastMedications', 'Past Medications'), icon: CalendarTools, slotName: 'ewf-past-medications-slot' },
20
- ];
21
-
22
- return (
23
- <Layer>
24
- <ExtensionTabs items={items} state={state} />
25
- </Layer>
26
- );
9
+ const PharmacyTabs: React.FC<PharmacyTabsProps> = ({ patientUuid }) => {
10
+ return <ExtensionTabs extensionSlotName={'pharmacy-tabs-slot'} patientUuid={patientUuid} />;
27
11
  };
28
12
 
29
13
  export default PharmacyTabs;
@@ -0,0 +1,13 @@
1
+ import { getSyncLifecycle } from '@openmrs/esm-framework';
2
+ import { createTabExtension } from '../../../shared/tabs/create-tab-extension';
3
+
4
+ const options = {
5
+ featureName: 'express-workflow',
6
+ moduleName: '@kenyaemr/esm-express-workflow-app',
7
+ };
8
+ // t('orders', 'Orders')
9
+ export const pharmacyOrdersTab = getSyncLifecycle(createTabExtension(), options);
10
+ // t('activeMedications', 'Active Medications')
11
+ export const pharmacyActiveMedicationsTab = getSyncLifecycle(createTabExtension(), options);
12
+ // t('pastMedications', 'Past Medications')
13
+ export const pharmacyPastMedicationsTab = getSyncLifecycle(createTabExtension(), options);
@@ -1,6 +1,7 @@
1
- import { getAsyncLifecycle } from '@openmrs/esm-framework';
1
+ import { getAsyncLifecycle, getSyncLifecycle } from '@openmrs/esm-framework';
2
2
 
3
3
  import { moduleName } from '../../constants';
4
+ import { createTabExtension } from '../../shared/tabs/create-tab-extension';
4
5
 
5
6
  const options = {
6
7
  featureName: 'express-workflow',
@@ -20,3 +21,16 @@ export const proceduresLeftPanelLink = getAsyncLifecycle(
20
21
  })),
21
22
  options,
22
23
  );
24
+
25
+ // t("results", "Results")
26
+ export const patientProcedureOrdersResults = getSyncLifecycle(createTabExtension(), options);
27
+ // t("order", "Orders")
28
+ export const patientProcedureOrdersTab = getAsyncLifecycle(
29
+ () => import('../../components/procedures/procedures-table.component'),
30
+ options,
31
+ );
32
+ // t('anaesthetic', 'Anaesthetic')
33
+ export const patientProcedureAnaestheticTab = getAsyncLifecycle(
34
+ () => import('../../components/anaesthetic/anaesthetic.component'),
35
+ options,
36
+ );
@@ -1,5 +1,5 @@
1
- import React, { useMemo } from 'react';
2
- import { useConfig } from '@openmrs/esm-framework';
1
+ import { DataTableSkeleton, Layer } from '@carbon/react';
2
+ import { ErrorState, FHIRResource, useConfig } from '@openmrs/esm-framework';
3
3
  import {
4
4
  EmptyState,
5
5
  invalidateVisitAndEncounterData,
@@ -7,41 +7,54 @@ import {
7
7
  useLaunchWorkspaceRequiringVisit,
8
8
  usePatientChartStore,
9
9
  } from '@openmrs/esm-patient-common-lib';
10
- import { Layer } from '@carbon/react';
10
+ import React, { useMemo } from 'react';
11
11
  import { useTranslation } from 'react-i18next';
12
12
 
13
13
  import OrderTable from '../../shared/orders/OrderTable';
14
14
 
15
- import { type Order } from '../../types/order/order';
15
+ import { useSWRConfig } from 'swr';
16
16
  import { type ExpressWorkflowConfig } from '../../config-schema';
17
+ import { usePatientOrders } from '../../hooks/useOrders';
17
18
  import styles from './procedures.scss';
18
- import { useSWRConfig } from 'swr';
19
19
 
20
20
  type ProceduresTableProps = {
21
- orders: Order[];
22
21
  patientUuid: string;
23
- patient: fhir.Patient;
22
+ patient?: FHIRResource;
24
23
  };
25
- const ProceduresTable: React.FC<ProceduresTableProps> = ({ orders, patientUuid, patient }) => {
24
+ const ProceduresTable: React.FC<ProceduresTableProps> = ({ patientUuid, patient }) => {
26
25
  const { t } = useTranslation();
27
26
  const { imagingOrderTypeUuid, imagingOrderableConceptSets } = useConfig<ExpressWorkflowConfig>();
27
+ const {
28
+ data: orders,
29
+ isLoading,
30
+ error,
31
+ mutate: mutateOrders,
32
+ } = usePatientOrders(patientUuid, 'any', imagingOrderTypeUuid, undefined, undefined);
33
+
28
34
  const { visitContext } = usePatientChartStore(patientUuid);
29
35
  const { mutate: globalMutate } = useSWRConfig();
30
- const windowProps = useMemo(() => ({ encounterUuid: orders[0]?.encounter?.uuid }), [orders[0]?.encounter?.uuid]);
36
+ const windowProps = useMemo(() => ({ encounterUuid: orders?.[0]?.encounter?.uuid }), [orders]);
31
37
  const groupProps = useMemo(
32
38
  () => ({
33
39
  patient,
34
- patientUuid: patient?.id,
40
+ patientUuid,
35
41
  visitContext: visitContext,
36
42
  mutateVisitContext: () => {
43
+ mutateOrders();
37
44
  invalidateVisitByUuid(globalMutate, visitContext.uuid);
38
- invalidateVisitAndEncounterData(globalMutate, patient.id);
45
+ invalidateVisitAndEncounterData(globalMutate, patientUuid);
39
46
  },
40
47
  }),
41
- [globalMutate, visitContext, patient.id],
48
+ [patient, patientUuid, visitContext, mutateOrders, globalMutate],
42
49
  );
43
50
  const launchOrderBasket = useLaunchWorkspaceRequiringVisit(patientUuid ?? '', 'order-basket');
44
51
 
52
+ if (isLoading) {
53
+ return <DataTableSkeleton />;
54
+ }
55
+ if (error) {
56
+ return <ErrorState headerTitle={t('proceduresOrders', 'Procedures Orders')} error={error} />;
57
+ }
45
58
  if (orders?.length === 0) {
46
59
  return (
47
60
  <Layer>
@@ -66,7 +79,7 @@ const ProceduresTable: React.FC<ProceduresTableProps> = ({ orders, patientUuid,
66
79
  return (
67
80
  <OrderTable
68
81
  title={t('proceduresOrders', 'Procedures Orders')}
69
- orders={orders}
82
+ orders={orders ?? []}
70
83
  onAdd={() =>
71
84
  launchOrderBasket(
72
85
  {
@@ -1,32 +1,13 @@
1
1
  import React from 'react';
2
- import { useConfig } from '@openmrs/esm-framework';
3
- import { useTranslation } from 'react-i18next';
4
2
 
5
- import OrdersTabs from '../../shared/orders/OrdersTabs';
6
- import ProceduresTable from './procedures-table.component';
7
- import { ExpressWorkflowConfig } from '../../config-schema';
8
- import Anaesthetic from '../anaesthetic/anaesthetic.component';
3
+ import ExtensionTabs from '../../shared/tabs/extension-tabs.component';
9
4
 
10
5
  type ProceduresTabsProps = {
11
6
  patientUuid: string;
12
- patient: fhir.Patient;
13
7
  };
14
8
 
15
- const ProceduresTabs: React.FC<ProceduresTabsProps> = ({ patientUuid, patient }) => {
16
- const { t } = useTranslation();
17
- const { proceduresConceptClassUuid, imagingOrderTypeUuid } = useConfig<ExpressWorkflowConfig>();
18
- return (
19
- <OrdersTabs
20
- patientUuid={patientUuid}
21
- patient={patient}
22
- basePath="procedures"
23
- resultsSlotName="ewf-procedures-results-slot"
24
- orderTypeUuid={imagingOrderTypeUuid}
25
- filter={(order) => order.concept?.conceptClass?.uuid === proceduresConceptClassUuid}
26
- Table={({ orders }) => <ProceduresTable orders={orders} patientUuid={patientUuid} patient={patient} />}
27
- additionalTabs={[{ label: t('anaesthetic', 'Anaesthetic'), content: <Anaesthetic patientUuid={patientUuid} /> }]}
28
- />
29
- );
9
+ const ProceduresTabs: React.FC<ProceduresTabsProps> = ({ patientUuid }) => {
10
+ return <ExtensionTabs extensionSlotName="patient-procedure-tabs-slot" patientUuid={patientUuid} />;
30
11
  };
31
12
 
32
13
  export default ProceduresTabs;
@@ -1,6 +1,7 @@
1
- import { getAsyncLifecycle } from '@openmrs/esm-framework';
1
+ import { getAsyncLifecycle, getSyncLifecycle } from '@openmrs/esm-framework';
2
2
 
3
3
  import { moduleName } from '../../constants';
4
+ import { createTabExtension } from '../../shared/tabs/create-tab-extension';
4
5
 
5
6
  const options = {
6
7
  featureName: 'express-workflow',
@@ -23,3 +24,11 @@ export const radiologyAndImagingLeftPanelLink = getAsyncLifecycle(
23
24
  })),
24
25
  options,
25
26
  );
27
+
28
+ // t("results", "Results")
29
+ export const patientImagingOrdersResults = getSyncLifecycle(createTabExtension(), options);
30
+ // t("order", "Orders")
31
+ export const patientImagingOrdersTab = getAsyncLifecycle(
32
+ () => import('../../components/radiology-and-imaging/radiology-and-imaging-table.component'),
33
+ options,
34
+ );
@@ -1,37 +1,58 @@
1
- import React, { useMemo } from 'react';
2
- import { useConfig } from '@openmrs/esm-framework';
1
+ import { DataTableSkeleton, Layer } from '@carbon/react';
2
+ import { ErrorState, FHIRResource, useConfig } from '@openmrs/esm-framework';
3
3
  import { EmptyState, useLaunchWorkspaceRequiringVisit, usePatientChartStore } from '@openmrs/esm-patient-common-lib';
4
- import { Layer } from '@carbon/react';
4
+ import React, { useMemo } from 'react';
5
5
  import { useTranslation } from 'react-i18next';
6
6
  import OrderTable from '../../shared/orders/OrderTable';
7
7
 
8
- import { type Order } from '../../types/order/order';
9
8
  import { type ExpressWorkflowConfig } from '../../config-schema';
9
+ import { usePatientOrders } from '../../hooks/useOrders';
10
10
  import styles from './radiology-and-imaging.scss';
11
11
 
12
12
  type RadiologyAndImagingTableProps = {
13
- orders: Array<Order>;
14
13
  patientUuid: string;
15
- patient: fhir.Patient;
14
+ patient: FHIRResource;
16
15
  };
17
- const RadiologyAndImagingTable: React.FC<RadiologyAndImagingTableProps> = ({ orders, patientUuid, patient }) => {
16
+ const RadiologyAndImagingTable: React.FC<RadiologyAndImagingTableProps> = ({ patientUuid, patient }) => {
18
17
  const { t } = useTranslation();
19
- const { imagingOrderTypeUuid, imagingOrderableConceptSets } = useConfig<ExpressWorkflowConfig>();
18
+ const { imagingOrderTypeUuid, imagingOrderableConceptSets, imagingConceptClassUuid } =
19
+ useConfig<ExpressWorkflowConfig>();
20
+ const {
21
+ data: orders,
22
+ isLoading,
23
+ error,
24
+ mutate: mutateOrders,
25
+ } = usePatientOrders(patientUuid, 'any', imagingOrderTypeUuid, undefined, undefined);
26
+ const filteredOrders = useMemo(
27
+ () => orders?.filter((order) => order.concept?.conceptClass?.uuid === imagingConceptClassUuid),
28
+ [imagingConceptClassUuid, orders],
29
+ );
20
30
  const { mutateVisitContext, visitContext } = usePatientChartStore(patientUuid);
21
31
 
22
- const windowProps = useMemo(() => ({ encounterUuid: orders[0]?.encounter?.uuid }), [orders[0]?.encounter?.uuid]);
32
+ const windowProps = useMemo(() => ({ encounterUuid: filteredOrders?.[0]?.encounter?.uuid }), [filteredOrders]);
23
33
  const groupProps = useMemo(
24
34
  () => ({
25
35
  patient,
26
- patientUuid: patient?.id,
36
+ patientUuid,
27
37
  visitContext: visitContext,
28
- mutateVisitContext: mutateVisitContext,
38
+ mutateVisitContext: () => {
39
+ mutateOrders();
40
+ mutateVisitContext();
41
+ },
29
42
  }),
30
- [patient, visitContext, mutateVisitContext],
43
+ [patient, patientUuid, visitContext, mutateOrders, mutateVisitContext],
31
44
  );
32
45
  const launchAddLabOrder = useLaunchWorkspaceRequiringVisit(patientUuid, 'order-basket');
33
46
 
34
- if (orders?.length === 0) {
47
+ if (isLoading) {
48
+ return <DataTableSkeleton />;
49
+ }
50
+
51
+ if (error) {
52
+ return <ErrorState headerTitle={t('radiologyAndImagingOrders', 'Radiology & Imaging Orders')} error={error} />;
53
+ }
54
+
55
+ if (filteredOrders?.length === 0) {
35
56
  return (
36
57
  <Layer>
37
58
  <EmptyState
@@ -55,7 +76,7 @@ const RadiologyAndImagingTable: React.FC<RadiologyAndImagingTableProps> = ({ ord
55
76
  return (
56
77
  <OrderTable
57
78
  title={t('radiologyAndImagingOrders', 'Radiology & Imaging Orders')}
58
- orders={orders}
79
+ orders={filteredOrders ?? []}
59
80
  onAdd={() =>
60
81
  launchAddLabOrder(
61
82
  {
@@ -1,28 +1,12 @@
1
1
  import React from 'react';
2
- import { useConfig } from '@openmrs/esm-framework';
3
- import OrdersTabs from '../../shared/orders/OrdersTabs';
4
- import RadiologyAndImagingTable 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, patient }) => {
14
- const { imagingOrderTypeUuid } = useConfig<ExpressWorkflowConfig>();
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 }) => <RadiologyAndImagingTable orders={orders} patientUuid={patientUuid} patient={patient} />}
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;
package/src/index.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { defineConfigSchema, getAsyncLifecycle, getSyncLifecycle, registerFeatureFlag } from '@openmrs/esm-framework';
2
2
  import { configSchema } from './config-schema';
3
3
  export * from './components/procedures/procedure-queues';
4
-
5
4
  const moduleName = '@kenyaemr/esm-express-workflow-app';
6
5
 
7
6
  const options = {