@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.
- package/.turbo/turbo-build.log +3 -3
- package/dist/2024.js +1 -1
- package/dist/2024.js.map +1 -1
- package/dist/2386.js +1 -0
- package/dist/2386.js.map +1 -0
- package/dist/4670.js +1 -0
- package/dist/4670.js.map +1 -0
- package/dist/4682.js +1 -1
- package/dist/4682.js.map +1 -1
- package/dist/5563.js +1 -0
- package/dist/5563.js.map +1 -0
- package/dist/6075.js +1 -0
- package/dist/6075.js.map +1 -0
- package/dist/6456.js +1 -1
- package/dist/6720.js +1 -0
- package/dist/6720.js.map +1 -0
- package/dist/7607.js +1 -1
- package/dist/8566.js +1 -0
- package/dist/8566.js.map +1 -0
- package/dist/8727.js +1 -1
- package/dist/8799.js +1 -0
- package/dist/8799.js.map +1 -0
- package/dist/9161.js +1 -0
- package/dist/9161.js.map +1 -0
- package/dist/9182.js +1 -1
- package/dist/9343.js +1 -0
- package/dist/9343.js.map +1 -0
- package/dist/9535.js +1 -1
- package/dist/9535.js.map +1 -1
- package/dist/kenyaemr-esm-express-workflow-app.js +1 -1
- package/dist/kenyaemr-esm-express-workflow-app.js.buildmanifest.json +213 -118
- package/dist/kenyaemr-esm-express-workflow-app.js.map +1 -1
- package/dist/main.js +4 -4
- package/dist/main.js.map +1 -1
- package/dist/routes.json +1 -1
- package/package.json +1 -1
- package/src/components/consultation/clinical-encounter/clinical-encounter.component.tsx +4 -20
- package/src/components/consultation/index.ts +1 -1
- package/src/components/consultation/tabs/index.ts +34 -0
- package/src/components/laboratory/index.ts +10 -1
- package/src/components/laboratory/lab-table.component.tsx +25 -12
- package/src/components/laboratory/laboratory-tabs.component.tsx +3 -17
- package/src/components/pharmacy/index.ts +1 -1
- package/src/components/pharmacy/pharmacy-tabs.component.tsx +4 -20
- package/src/components/pharmacy/tabs/index.ts +13 -0
- package/src/components/procedures/index.ts +15 -1
- package/src/components/procedures/procedures-table.component.tsx +26 -13
- package/src/components/procedures/procedures-tabs.component.tsx +3 -22
- package/src/components/radiology-and-imaging/index.ts +10 -1
- package/src/components/radiology-and-imaging/radiology-and-imaging-table.component.tsx +35 -14
- package/src/components/radiology-and-imaging/radiology-and-imaging.component.tsx +3 -19
- package/src/index.ts +0 -1
- package/src/routes.json +206 -5
- package/src/shared/patient-chart/patient-summary-dashboard/patient-summary-dashboard.component.tsx +5 -73
- package/src/shared/tabs/create-tab-extension.tsx +33 -0
- package/src/shared/tabs/extension-tabs.component.tsx +51 -33
- package/translations/am.json +5 -1
- package/translations/en.json +5 -1
- package/translations/fr.json +5 -1
- package/translations/sw.json +5 -1
- package/dist/2332.js +0 -1
- package/dist/2332.js.map +0 -1
- package/dist/4666.js +0 -1
- package/dist/4666.js.map +0 -1
- package/dist/644.js +0 -1
- package/dist/644.js.map +0 -1
- package/dist/655.js +0 -1
- package/dist/655.js.map +0 -1
- package/dist/70.js +0 -1
- package/dist/70.js.map +0 -1
- package/dist/9387.js +0 -1
- package/dist/9387.js.map +0 -1
- package/src/shared/orders/OrdersTabs.tsx +0 -76
- /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,28 +1,12 @@
|
|
|
1
|
-
import React
|
|
2
|
-
import
|
|
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
|
|
13
|
-
|
|
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;
|
|
@@ -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 {
|
|
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> = ({
|
|
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
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
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,29 +1,13 @@
|
|
|
1
|
-
import 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
|
|
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
|
|
14
|
-
|
|
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
|
|
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 {
|
|
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 {
|
|
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
|
|
22
|
+
patient?: FHIRResource;
|
|
24
23
|
};
|
|
25
|
-
const ProceduresTable: React.FC<ProceduresTableProps> = ({
|
|
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
|
|
36
|
+
const windowProps = useMemo(() => ({ encounterUuid: orders?.[0]?.encounter?.uuid }), [orders]);
|
|
31
37
|
const groupProps = useMemo(
|
|
32
38
|
() => ({
|
|
33
39
|
patient,
|
|
34
|
-
patientUuid
|
|
40
|
+
patientUuid,
|
|
35
41
|
visitContext: visitContext,
|
|
36
42
|
mutateVisitContext: () => {
|
|
43
|
+
mutateOrders();
|
|
37
44
|
invalidateVisitByUuid(globalMutate, visitContext.uuid);
|
|
38
|
-
invalidateVisitAndEncounterData(globalMutate,
|
|
45
|
+
invalidateVisitAndEncounterData(globalMutate, patientUuid);
|
|
39
46
|
},
|
|
40
47
|
}),
|
|
41
|
-
[
|
|
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
|
|
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
|
|
16
|
-
|
|
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
|
|
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 {
|
|
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:
|
|
14
|
+
patient: FHIRResource;
|
|
16
15
|
};
|
|
17
|
-
const RadiologyAndImagingTable: React.FC<RadiologyAndImagingTableProps> = ({
|
|
16
|
+
const RadiologyAndImagingTable: React.FC<RadiologyAndImagingTableProps> = ({ patientUuid, patient }) => {
|
|
18
17
|
const { t } = useTranslation();
|
|
19
|
-
const { imagingOrderTypeUuid, imagingOrderableConceptSets } =
|
|
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:
|
|
32
|
+
const windowProps = useMemo(() => ({ encounterUuid: filteredOrders?.[0]?.encounter?.uuid }), [filteredOrders]);
|
|
23
33
|
const groupProps = useMemo(
|
|
24
34
|
() => ({
|
|
25
35
|
patient,
|
|
26
|
-
patientUuid
|
|
36
|
+
patientUuid,
|
|
27
37
|
visitContext: visitContext,
|
|
28
|
-
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 (
|
|
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={
|
|
79
|
+
orders={filteredOrders ?? []}
|
|
59
80
|
onAdd={() =>
|
|
60
81
|
launchAddLabOrder(
|
|
61
82
|
{
|
|
@@ -1,28 +1,12 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import
|
|
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
|
|
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 }) => <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 = {
|