@kenyaemr/esm-service-queues-app 7.0.3-pre.88 → 7.0.3-pre.94
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 +18 -17
- package/dist/130.js +1 -1
- package/dist/130.js.map +1 -1
- package/dist/199.js +1 -1
- package/dist/236.js +1 -0
- package/dist/236.js.map +1 -0
- package/dist/265.js +1 -0
- package/dist/265.js.map +1 -0
- package/dist/271.js +1 -1
- package/dist/282.js +1 -0
- package/dist/282.js.map +1 -0
- package/dist/319.js +1 -1
- package/dist/366.js +1 -0
- package/dist/366.js.map +1 -0
- package/dist/392.js +1 -0
- package/dist/392.js.map +1 -0
- package/dist/460.js +1 -1
- package/dist/484.js +2 -0
- package/dist/484.js.map +1 -0
- package/dist/574.js +1 -1
- package/dist/6.js +1 -1
- package/dist/604.js +1 -0
- package/dist/604.js.map +1 -0
- package/dist/644.js +1 -1
- package/dist/670.js +1 -0
- package/dist/670.js.map +1 -0
- package/dist/727.js +1 -0
- package/dist/727.js.map +1 -0
- package/dist/752.js +1 -1
- package/dist/757.js +1 -1
- package/dist/760.js +1 -0
- package/dist/760.js.map +1 -0
- package/dist/788.js +1 -1
- package/dist/800.js +1 -1
- package/dist/807.js +1 -1
- package/dist/818.js +1 -0
- package/dist/818.js.map +1 -0
- package/dist/828.js +1 -1
- package/dist/833.js +1 -1
- package/dist/911.js +1 -0
- package/dist/911.js.map +1 -0
- package/dist/kenyaemr-esm-service-queues-app.js +1 -1
- package/dist/kenyaemr-esm-service-queues-app.js.buildmanifest.json +160 -160
- package/dist/kenyaemr-esm-service-queues-app.js.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/routes.json +1 -1
- package/package.json +1 -1
- package/src/active-visits/active-visits-table.resource.ts +1 -1
- package/src/active-visits/change-status-dialog.scss +11 -11
- package/src/active-visits/change-status-dialog.test.tsx +36 -31
- package/src/add-patient-toqueue/add-patient-toqueue-dialog.scss +10 -10
- package/src/add-provider-queue-room/add-provider-queue-room.component.tsx +4 -4
- package/src/add-provider-queue-room/add-provider-queue-room.resource.ts +2 -2
- package/src/add-provider-queue-room/add-provider-queue-room.scss +6 -6
- package/src/add-provider-queue-room/add-provider-queue-room.test.tsx +44 -38
- package/src/clear-queue-entries-dialog/clear-queue-entries-dialog.component.tsx +1 -1
- package/src/clear-queue-entries-dialog/clear-queue-entries-dialog.scss +2 -3
- package/src/clear-queue-entries-dialog/clear-queue-entries-dialog.test.tsx +15 -15
- package/src/config-schema.ts +84 -84
- package/src/current-visit/current-visit-summary.component.tsx +1 -1
- package/src/current-visit/current-visit-summary.test.tsx +12 -11
- package/src/current-visit/current-visit.resource.ts +1 -1
- package/src/current-visit/current-visit.scss +4 -4
- package/src/current-visit/hooks/useVitalsConceptMetadata.tsx +1 -1
- package/src/current-visit/visit-details/triage-note.scss +11 -11
- package/src/helpers/helpers.test.ts +24 -0
- package/src/helpers/helpers.ts +41 -14
- package/src/home.test.tsx +10 -12
- package/src/hooks/useQueueService.ts +16 -10
- package/src/past-visit/past-visit-details/past-visit-summary.scss +8 -8
- package/src/past-visit/past-visit.component.tsx +1 -1
- package/src/past-visit/past-visit.resource.ts +1 -1
- package/src/past-visit/past-visit.scss +17 -17
- package/src/past-visit/past-visit.test.tsx +8 -13
- package/src/patient-info/appointment-details.scss +7 -7
- package/src/patient-info/appointment-details.test.tsx +11 -6
- package/src/patient-info/appointments.resource.ts +1 -1
- package/src/patient-info/patient-info.scss +9 -9
- package/src/patient-info/patient-info.test.tsx +3 -14
- package/src/patient-queue-header/patient-queue-header.component.tsx +4 -1
- package/src/patient-queue-header/patient-queue-header.scss +11 -11
- package/src/patient-queue-metrics/clinic-metrics.component.tsx +1 -1
- package/src/patient-queue-metrics/clinic-metrics.resource.ts +2 -2
- package/src/patient-queue-metrics/clinic-metrics.scss +4 -4
- package/src/patient-queue-metrics/clinic-metrics.test.tsx +40 -45
- package/src/patient-queue-metrics/metrics-card.scss +11 -11
- package/src/patient-queue-metrics/metrics-header.scss +2 -2
- package/src/patient-search/advanced-search.scss +27 -27
- package/src/patient-search/advanced-search.test.tsx +6 -9
- package/src/patient-search/basic-search.scss +14 -14
- package/src/patient-search/basic-search.test.tsx +2 -7
- package/src/patient-search/hooks/useDefaultLocation.ts +1 -1
- package/src/patient-search/hooks/useQueueLocations.tsx +1 -0
- package/src/patient-search/hooks/useScheduledVisits.ts +1 -1
- package/src/patient-search/patient-scheduled-visits.component.tsx +4 -4
- package/src/patient-search/patient-scheduled-visits.scss +17 -17
- package/src/patient-search/patient-scheduled-visits.test.tsx +18 -23
- package/src/patient-search/patient-search.scss +7 -7
- package/src/patient-search/patient-search.workspace.tsx +4 -4
- package/src/patient-search/search-results.scss +11 -11
- package/src/patient-search/search-results.test.tsx +2 -10
- package/src/patient-search/visit-form/visit-form.scss +12 -13
- package/src/patient-search/visit-form/visit-type-selector.component.tsx +9 -11
- package/src/patient-search/visit-form/visit-type-selector.scss +13 -13
- package/src/patient-search/visit-form/visit-type-selector.test.tsx +4 -3
- package/src/patient-search/visit-form-queue-fields/visit-form-queue-fields.scss +1 -3
- package/src/patient-search/visit-form-queue-fields/visit-form-queue-fields.test.tsx +15 -9
- package/src/queue-entry-table-components/edit-entry.scss +1 -1
- package/src/queue-entry-table-components/queue-priority.scss +3 -4
- package/src/queue-entry-table-components/transition-entry.scss +1 -1
- package/src/queue-patient-linelists/queue-linelist-base-table.scss +16 -17
- package/src/queue-patient-linelists/queue-linelist-base-table.test.tsx +7 -8
- package/src/queue-patient-linelists/queue-linelist-filter.scss +13 -13
- package/src/queue-patient-linelists/queue-linelist-filter.test.tsx +9 -6
- package/src/queue-patient-linelists/queue-linelist.resource.ts +4 -4
- package/src/queue-patient-linelists/scheduled-appointments-table.test.tsx +10 -7
- package/src/queue-rooms/queue-room-form.scss +13 -13
- package/src/queue-rooms/queue-room-form.test.tsx +10 -8
- package/src/queue-screen/queue-screen.scss +6 -4
- package/src/queue-screen/queue-screen.test.tsx +6 -6
- package/src/queue-services/queue-service-form.scss +13 -13
- package/src/queue-services/queue-service-form.test.tsx +15 -8
- package/src/queue-table/cells/queue-table-action-cell.component.tsx +2 -2
- package/src/queue-table/cells/queue-table-coming-from-cell.component.tsx +1 -1
- package/src/queue-table/default-queue-table.component.tsx +63 -61
- package/src/queue-table/default-queue-table.test.tsx +61 -61
- package/src/queue-table/queue-entry-actions/queue-entry-actions-modal.scss +36 -0
- package/src/queue-table/queue-entry-actions/queue-entry-actions.modal.tsx +30 -10
- package/src/queue-table/queue-entry-actions/queue-entry-actions.test.tsx +34 -103
- package/src/queue-table/queue-entry-actions/queue-entry-confirm-action.test.tsx +42 -25
- package/src/queue-table/queue-entry-actions/queue-entry-undo-actions.test.tsx +19 -14
- package/src/queue-table/queue-table-by-status-skeleton.component.tsx +1 -5
- package/src/queue-table/queue-table-expanded-row.component.tsx +1 -2
- package/src/queue-table/queue-table-metrics-card.scss +7 -7
- package/src/queue-table/queue-table-metrics.scss +3 -3
- package/src/queue-table/queue-table.component.tsx +8 -11
- package/src/queue-table/queue-table.scss +32 -26
- package/src/queue-table/queue-table.test.tsx +46 -21
- package/src/remove-queue-entry-dialog/remove-queue-entry.resource.ts +1 -1
- package/src/remove-queue-entry-dialog/remove-queue-entry.scss +2 -2
- package/src/remove-queue-entry-dialog/remove-queue-entry.test.tsx +13 -12
- package/src/side-menu/side-menu.test.tsx +0 -1
- package/src/transition-queue-entry/transition-queue-entry-dialog.component.tsx +1 -1
- package/src/transition-queue-entry/transition-queue-entry-dialog.scss +5 -5
- package/src/transition-queue-entry/transition-queue-entry-dialog.test.tsx +33 -44
- package/src/views/queue-tables-for-all-statuses.component.tsx +14 -14
- package/src/visits-missing-inqueue/visits-missing-inqueue.component.tsx +1 -1
- package/src/visits-missing-inqueue/visits-missing-inqueue.resource.ts +1 -1
- package/src/visits-missing-inqueue/visits-missing-inqueue.scss +17 -14
- package/translations/am.json +4 -2
- package/translations/ar.json +4 -2
- package/translations/en.json +1 -0
- package/translations/es.json +4 -2
- package/translations/fr.json +39 -37
- package/translations/he.json +4 -2
- package/translations/km.json +4 -2
- package/translations/zh.json +4 -2
- package/translations/zh_CN.json +4 -2
- package/dist/276.js +0 -1
- package/dist/276.js.map +0 -1
- package/dist/384.js +0 -2
- package/dist/384.js.map +0 -1
- package/dist/401.js +0 -1
- package/dist/401.js.map +0 -1
- package/dist/430.js +0 -1
- package/dist/430.js.map +0 -1
- package/dist/60.js +0 -1
- package/dist/60.js.map +0 -1
- package/dist/600.js +0 -1
- package/dist/600.js.map +0 -1
- package/dist/647.js +0 -1
- package/dist/647.js.map +0 -1
- package/dist/650.js +0 -1
- package/dist/650.js.map +0 -1
- package/dist/669.js +0 -1
- package/dist/669.js.map +0 -1
- package/dist/764.js +0 -1
- package/dist/764.js.map +0 -1
- package/dist/877.js +0 -1
- package/dist/877.js.map +0 -1
- package/dist/917.js +0 -1
- package/dist/917.js.map +0 -1
- package/src/queue-table/queue-entry-actions/queue-entry-actons-modal.scss +0 -36
- package/src/root.scss +0 -15
- /package/dist/{384.js.LICENSE.txt → 484.js.LICENSE.txt} +0 -0
package/dist/routes.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"webservices.rest":"^2.2.0","queue":"^2.4.0-0"},"extensions":[{"name":"outpatient-side-nav-ext","component":"outpatientSideNav","slot":"outpatient-sidebar-slot","online":true,"offline":true},{"name":"service-queues-dashboard-link","component":"serviceQueuesDashboardLink","slot":"homepage-dashboard-slot","meta":{"name":"service-queues","slot":"service-queues-dashboard-slot","title":"Service queues"},"online":true,"offline":true},{"name":"queue-table-by-status-menu-dashboard-link","component":"queueTableByStatusMenu","meta":{"name":"service-queues","slot":"service-queues-dashboard-slot","title":"Service queues"},"online":true,"offline":true},{"component":"root","name":"service-queues-dashboard","slot":"service-queues-dashboard-slot"},{"name":"edit-queue-entry-status-modal","component":"editQueueEntryStatusModal"},{"name":"patient-info-banner-slot","component":"patientInfoBannerSlot"},{"name":"remove-queue-entry","component":"removeQueueEntry"},{"name":"clear-all-queue-entries","component":"clearAllQueueEntries"},{"name":"add-visit-to-queue-modal","component":"addVisitToQueueModal"},{"name":"transition-queue-entry-status-modal","component":"transitionQueueEntryStatusModal"},{"name":"previous-visit-summary-widget","component":"pastVisitSummary","slot":"previous-visit-summary-slot"},{"name":"add-provider-to-room-modal","component":"addProviderToRoomModal"},{"name":"transition-queue-entry-modal","component":"transitionQueueEntryModal"},{"name":"edit-queue-entry-modal","component":"editQueueEntryModal"},{"name":"undo-transition-queue-entry-modal","component":"undoTransitionQueueEntryModal"},{"name":"void-queue-entry-modal","component":"voidQueueEntryModal"},{"name":"end-queue-entry-modal","component":"endQueueEntryModal"},{"name":"active-visits-row-actions","component":"activeVisitsRowActions","slot":"queue-table-serve-patient-slot"},{"name":"visit-form-queue-fields","component":"visitFormQueueFields","slot":"visit-form-queue-slot"}],"workspaces":[{"name":"service-queues-service-form","title":"addNewQueueService","component":"addNewQueueServiceWorkspace","type":"service-queues"},{"name":"service-queues-room-form","title":"addNewQueueServiceRoom","component":"addNewQueueServiceRoomWorkspace","type":"service-queues"},{"name":"service-queues-linelist-filter","title":"filter","component":"queueLinelistFilterWorkspace","type":"service-queues"},{"name":"service-queues-patient-search","title":"searchPatient","component":"patientSearchWorkspace","type":"service-queues"}],"version":"7.0.3-pre.
|
|
1
|
+
{"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"webservices.rest":"^2.2.0","queue":"^2.4.0-0"},"extensions":[{"name":"outpatient-side-nav-ext","component":"outpatientSideNav","slot":"outpatient-sidebar-slot","online":true,"offline":true},{"name":"service-queues-dashboard-link","component":"serviceQueuesDashboardLink","slot":"homepage-dashboard-slot","meta":{"name":"service-queues","slot":"service-queues-dashboard-slot","title":"Service queues"},"online":true,"offline":true},{"name":"queue-table-by-status-menu-dashboard-link","component":"queueTableByStatusMenu","meta":{"name":"service-queues","slot":"service-queues-dashboard-slot","title":"Service queues"},"online":true,"offline":true},{"component":"root","name":"service-queues-dashboard","slot":"service-queues-dashboard-slot"},{"name":"edit-queue-entry-status-modal","component":"editQueueEntryStatusModal"},{"name":"patient-info-banner-slot","component":"patientInfoBannerSlot"},{"name":"remove-queue-entry","component":"removeQueueEntry"},{"name":"clear-all-queue-entries","component":"clearAllQueueEntries"},{"name":"add-visit-to-queue-modal","component":"addVisitToQueueModal"},{"name":"transition-queue-entry-status-modal","component":"transitionQueueEntryStatusModal"},{"name":"previous-visit-summary-widget","component":"pastVisitSummary","slot":"previous-visit-summary-slot"},{"name":"add-provider-to-room-modal","component":"addProviderToRoomModal"},{"name":"transition-queue-entry-modal","component":"transitionQueueEntryModal"},{"name":"edit-queue-entry-modal","component":"editQueueEntryModal"},{"name":"undo-transition-queue-entry-modal","component":"undoTransitionQueueEntryModal"},{"name":"void-queue-entry-modal","component":"voidQueueEntryModal"},{"name":"end-queue-entry-modal","component":"endQueueEntryModal"},{"name":"active-visits-row-actions","component":"activeVisitsRowActions","slot":"queue-table-serve-patient-slot"},{"name":"visit-form-queue-fields","component":"visitFormQueueFields","slot":"visit-form-queue-slot"}],"workspaces":[{"name":"service-queues-service-form","title":"addNewQueueService","component":"addNewQueueServiceWorkspace","type":"service-queues"},{"name":"service-queues-room-form","title":"addNewQueueServiceRoom","component":"addNewQueueServiceRoomWorkspace","type":"service-queues"},{"name":"service-queues-linelist-filter","title":"filter","component":"queueLinelistFilterWorkspace","type":"service-queues"},{"name":"service-queues-patient-search","title":"searchPatient","component":"patientSearchWorkspace","type":"service-queues"}],"version":"7.0.3-pre.94"}
|
package/package.json
CHANGED
|
@@ -188,7 +188,7 @@ export function useServiceQueueEntries(service: string, locationUuid: string) {
|
|
|
188
188
|
return {
|
|
189
189
|
serviceQueueEntries: mappedServiceQueueEntries ? mappedServiceQueueEntries : [],
|
|
190
190
|
isLoading,
|
|
191
|
-
|
|
191
|
+
error,
|
|
192
192
|
isValidating,
|
|
193
193
|
};
|
|
194
194
|
}
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
@use '@carbon/
|
|
2
|
-
@use '@carbon/
|
|
1
|
+
@use '@carbon/layout';
|
|
2
|
+
@use '@carbon/type';
|
|
3
3
|
@use '@carbon/colors';
|
|
4
4
|
|
|
5
5
|
.radioButtonGroup {
|
|
6
6
|
display: flex;
|
|
7
7
|
flex-direction: column;
|
|
8
8
|
align-items: flex-start;
|
|
9
|
-
margin-top:
|
|
10
|
-
min-height:
|
|
9
|
+
margin-top: layout.$spacing-03;
|
|
10
|
+
min-height: layout.$spacing-10;
|
|
11
11
|
width: 100%;
|
|
12
12
|
@include type.type-style('body-compact-01');
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
.radioButton {
|
|
16
|
-
padding:
|
|
17
|
-
margin:
|
|
16
|
+
padding: layout.$spacing-02 layout.$spacing-02;
|
|
17
|
+
margin: layout.$spacing-03 0;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
section {
|
|
21
|
-
margin:
|
|
21
|
+
margin: layout.$spacing-03;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
.sectionTitle {
|
|
25
25
|
@include type.type-style('heading-compact-02');
|
|
26
26
|
color: colors.$gray-70;
|
|
27
|
-
margin-bottom:
|
|
27
|
+
margin-bottom: layout.$spacing-04;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
.modalBody {
|
|
31
|
-
padding-bottom:
|
|
31
|
+
padding-bottom: layout.$spacing-05;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
.inline {
|
|
@@ -37,11 +37,11 @@ section {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
.loading {
|
|
40
|
-
margin-right:
|
|
40
|
+
margin-right: layout.$spacing-02;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
.error {
|
|
44
|
-
margin-top:
|
|
44
|
+
margin-top: layout.$spacing-03;
|
|
45
45
|
color: colors.$red-60;
|
|
46
46
|
@include type.type-style('label-01');
|
|
47
47
|
}
|
|
@@ -1,23 +1,29 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import userEvent from '@testing-library/user-event';
|
|
3
3
|
import { screen, render, within } from '@testing-library/react';
|
|
4
|
-
import { mockServices,
|
|
5
|
-
import {
|
|
4
|
+
import { mockServices, mockSession, mockLocations, mockMappedQueueEntry } from '__mocks__';
|
|
5
|
+
import {
|
|
6
|
+
type FetchResponse,
|
|
7
|
+
getDefaultsFromConfigSchema,
|
|
8
|
+
showSnackbar,
|
|
9
|
+
useConfig,
|
|
10
|
+
useLocations,
|
|
11
|
+
useSession,
|
|
12
|
+
} from '@openmrs/esm-framework';
|
|
13
|
+
import { configSchema, type ConfigObject } from '../config-schema';
|
|
6
14
|
import { updateQueueEntry } from './active-visits-table.resource';
|
|
7
15
|
import ChangeStatus from './change-status-dialog.component';
|
|
8
16
|
|
|
9
|
-
const
|
|
10
|
-
const mockShowSnackbar =
|
|
11
|
-
const mockUpdateQueueEntry =
|
|
17
|
+
const mockUseConfig = jest.mocked(useConfig<ConfigObject>);
|
|
18
|
+
const mockShowSnackbar = jest.mocked(showSnackbar);
|
|
19
|
+
const mockUpdateQueueEntry = jest.mocked(updateQueueEntry);
|
|
20
|
+
const mockUseSession = jest.mocked(useSession);
|
|
21
|
+
const mockUseLocations = jest.mocked(useLocations);
|
|
12
22
|
|
|
13
|
-
jest.mock('./active-visits-table.resource', () => {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
...originalModule,
|
|
18
|
-
updateQueueEntry: jest.fn(),
|
|
19
|
-
};
|
|
20
|
-
});
|
|
23
|
+
jest.mock('./active-visits-table.resource', () => ({
|
|
24
|
+
...jest.requireActual('./active-visits-table.resource'),
|
|
25
|
+
updateQueueEntry: jest.fn(),
|
|
26
|
+
}));
|
|
21
27
|
|
|
22
28
|
jest.mock('../patient-search/hooks/useQueueLocations', () => {
|
|
23
29
|
return {
|
|
@@ -33,29 +39,24 @@ jest.mock('../hooks/useQueues', () => {
|
|
|
33
39
|
};
|
|
34
40
|
});
|
|
35
41
|
|
|
36
|
-
jest.mock('@openmrs/esm-framework', () => {
|
|
37
|
-
const originalModule = jest.requireActual('@openmrs/esm-framework');
|
|
38
|
-
return {
|
|
39
|
-
...originalModule,
|
|
40
|
-
openmrsFetch: jest.fn(),
|
|
41
|
-
toOmrsIsoString: jest.fn(),
|
|
42
|
-
toDateObjectStrict: jest.fn(),
|
|
43
|
-
useLocations: jest.fn().mockImplementation(() => mockLocations.data),
|
|
44
|
-
useSession: jest.fn().mockImplementation(() => mockSession.data),
|
|
45
|
-
};
|
|
46
|
-
});
|
|
47
|
-
|
|
48
42
|
describe('Queue entry details', () => {
|
|
49
|
-
beforeEach(() =>
|
|
50
|
-
|
|
43
|
+
beforeEach(() => {
|
|
44
|
+
mockUseConfig.mockReturnValue({
|
|
45
|
+
...getDefaultsFromConfigSchema(configSchema),
|
|
51
46
|
concepts: {},
|
|
52
|
-
} as ConfigObject)
|
|
53
|
-
|
|
47
|
+
} as ConfigObject);
|
|
48
|
+
mockUseLocations.mockReturnValue(mockLocations.data.results);
|
|
49
|
+
mockUseSession.mockReturnValue(mockSession.data);
|
|
50
|
+
});
|
|
54
51
|
|
|
55
52
|
it('should update a queue entry and display toast message', async () => {
|
|
56
53
|
const user = userEvent.setup();
|
|
57
54
|
|
|
58
|
-
mockUpdateQueueEntry.mockResolvedValueOnce({
|
|
55
|
+
mockUpdateQueueEntry.mockResolvedValueOnce({
|
|
56
|
+
data: mockMappedQueueEntry,
|
|
57
|
+
status: 201,
|
|
58
|
+
statusText: 'Updated',
|
|
59
|
+
} as FetchResponse);
|
|
59
60
|
|
|
60
61
|
renderUpdateQueueEntryDialog();
|
|
61
62
|
expect(screen.getByText(/queue service/i)).toBeInTheDocument();
|
|
@@ -138,7 +139,11 @@ describe('Queue entry details', () => {
|
|
|
138
139
|
|
|
139
140
|
test('should show error message when user tries to update queue entry without selecting required fields', async () => {
|
|
140
141
|
const user = userEvent.setup();
|
|
141
|
-
mockUpdateQueueEntry.mockResolvedValueOnce({
|
|
142
|
+
mockUpdateQueueEntry.mockResolvedValueOnce({
|
|
143
|
+
data: mockMappedQueueEntry,
|
|
144
|
+
status: 201,
|
|
145
|
+
statusText: 'Updated',
|
|
146
|
+
} as FetchResponse);
|
|
142
147
|
|
|
143
148
|
renderUpdateQueueEntryDialog();
|
|
144
149
|
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
@use '@carbon/
|
|
2
|
-
@use '@carbon/
|
|
3
|
-
@
|
|
1
|
+
@use '@carbon/layout';
|
|
2
|
+
@use '@carbon/type';
|
|
3
|
+
@use '@openmrs/esm-styleguide/src/vars' as *;
|
|
4
4
|
|
|
5
5
|
.radioButtonGroup {
|
|
6
6
|
display: flex;
|
|
7
7
|
flex-direction: column;
|
|
8
8
|
align-items: flex-start;
|
|
9
|
-
margin-top:
|
|
10
|
-
min-height:
|
|
9
|
+
margin-top: layout.$spacing-03;
|
|
10
|
+
min-height: layout.$spacing-10;
|
|
11
11
|
width: 100%;
|
|
12
12
|
@include type.type-style('body-compact-01');
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
.radioButton {
|
|
16
|
-
padding:
|
|
17
|
-
margin:
|
|
16
|
+
padding: layout.$spacing-02 layout.$spacing-02;
|
|
17
|
+
margin: layout.$spacing-03 0;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
section {
|
|
21
|
-
margin:
|
|
21
|
+
margin: layout.$spacing-03;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
.sectionTitle {
|
|
25
25
|
@include type.type-style('heading-compact-02');
|
|
26
26
|
color: $text-02;
|
|
27
|
-
margin-bottom:
|
|
27
|
+
margin-bottom: layout.$spacing-04;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
.modalBody {
|
|
31
|
-
padding-bottom:
|
|
31
|
+
padding-bottom: layout.$spacing-05;
|
|
32
32
|
}
|
|
@@ -31,8 +31,8 @@ import {
|
|
|
31
31
|
useSelectedQueueLocationUuid,
|
|
32
32
|
useSelectedService,
|
|
33
33
|
} from '../helpers/helpers';
|
|
34
|
-
import styles from './add-provider-queue-room.scss';
|
|
35
34
|
import useQueueServices from '../hooks/useQueueService';
|
|
35
|
+
import styles from './add-provider-queue-room.scss';
|
|
36
36
|
|
|
37
37
|
interface AddProviderQueueRoomProps {
|
|
38
38
|
providerUuid: string;
|
|
@@ -46,7 +46,7 @@ const AddProviderQueueRoom: React.FC<AddProviderQueueRoomProps> = ({ providerUui
|
|
|
46
46
|
const currentLocationUuid = useSelectedQueueLocationUuid();
|
|
47
47
|
const currentService = useSelectedService();
|
|
48
48
|
const currentIsPermanentProviderQueueRoom = useIsPermanentProviderQueueRoom();
|
|
49
|
-
const { providerRoom
|
|
49
|
+
const { providerRoom } = useProvidersQueueRoom(providerUuid);
|
|
50
50
|
const [queueRoomUuid, setQueueRoomUuid] = useState('');
|
|
51
51
|
const [queueProviderMapUuid, setQueueProviderMapUuid] = useState('');
|
|
52
52
|
|
|
@@ -148,11 +148,11 @@ const AddProviderQueueRoom: React.FC<AddProviderQueueRoomProps> = ({ providerUui
|
|
|
148
148
|
<ModalBody>
|
|
149
149
|
<Form onSubmit={onSubmit}>
|
|
150
150
|
<section className={styles.section}>
|
|
151
|
-
<div className={styles.sectionTitle}>{t('queueLocation', 'Queue location')}</div>
|
|
152
151
|
<Dropdown
|
|
153
152
|
id="queueLocation"
|
|
154
153
|
aria-label={t('selectQueueLocation', 'Select a queue location')}
|
|
155
154
|
label=""
|
|
155
|
+
titleText={t('queueLocation', 'Queue location')}
|
|
156
156
|
type="default"
|
|
157
157
|
items={queueLocations}
|
|
158
158
|
itemToString={(item) => (item ? item.name : '')}
|
|
@@ -163,12 +163,12 @@ const AddProviderQueueRoom: React.FC<AddProviderQueueRoomProps> = ({ providerUui
|
|
|
163
163
|
</section>
|
|
164
164
|
|
|
165
165
|
<section className={styles.section}>
|
|
166
|
-
<div className={styles.sectionTitle}>{t('queueService', 'Queue service')}</div>
|
|
167
166
|
<Dropdown
|
|
168
167
|
id="service"
|
|
169
168
|
aria-label={t('selectService', 'Select a service')}
|
|
170
169
|
type="default"
|
|
171
170
|
label=""
|
|
171
|
+
titleText={t('queueService', 'Queue service')}
|
|
172
172
|
items={services ?? []}
|
|
173
173
|
itemToString={(item) => (item ? item.display : '')}
|
|
174
174
|
onChange={handleServiceChange}
|
|
@@ -14,7 +14,7 @@ export function useQueueRooms(location: string, queueUuid: string) {
|
|
|
14
14
|
|
|
15
15
|
return {
|
|
16
16
|
rooms: data ? data?.data?.results : [],
|
|
17
|
-
|
|
17
|
+
error,
|
|
18
18
|
isLoading,
|
|
19
19
|
};
|
|
20
20
|
}
|
|
@@ -69,7 +69,7 @@ export function useProvidersQueueRoom(providerUuid: string) {
|
|
|
69
69
|
|
|
70
70
|
return {
|
|
71
71
|
providerRoom: data ? data?.data?.results : [],
|
|
72
|
-
|
|
72
|
+
error,
|
|
73
73
|
isLoading,
|
|
74
74
|
mutate,
|
|
75
75
|
};
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
@use '@carbon/
|
|
2
|
-
@use '@carbon/
|
|
3
|
-
@
|
|
1
|
+
@use '@carbon/layout';
|
|
2
|
+
@use '@carbon/type';
|
|
3
|
+
@use '@openmrs/esm-styleguide/src/vars' as *;
|
|
4
4
|
|
|
5
5
|
.section {
|
|
6
|
-
margin:
|
|
6
|
+
margin: layout.$spacing-03;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
.sectionTitle {
|
|
10
10
|
@include type.type-style('heading-compact-02');
|
|
11
11
|
color: $text-02;
|
|
12
|
-
margin-bottom:
|
|
12
|
+
margin-bottom: layout.$spacing-04;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
.checkbox {
|
|
16
|
-
padding-top:
|
|
16
|
+
padding-top: layout.$spacing-04;
|
|
17
17
|
}
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import userEvent from '@testing-library/user-event';
|
|
3
3
|
import { render, screen } from '@testing-library/react';
|
|
4
|
+
import { showSnackbar } from '@openmrs/esm-framework';
|
|
4
5
|
import AddProviderQueueRoom from './add-provider-queue-room.component';
|
|
5
6
|
|
|
6
|
-
jest.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
currentProvider: { uuid: 'provider-uuid-1' },
|
|
10
|
-
})),
|
|
11
|
-
showSnackbar: jest.fn(),
|
|
12
|
-
}));
|
|
7
|
+
const mockCloseModal = jest.fn();
|
|
8
|
+
const mockShowSnackbar = jest.mocked(showSnackbar);
|
|
9
|
+
|
|
13
10
|
jest.mock('./add-provider-queue-room.resource', () => ({
|
|
14
|
-
|
|
11
|
+
addProviderToQueueRoom: jest.fn(),
|
|
12
|
+
updateProviderToQueueRoom: jest.fn().mockResolvedValue({ status: 200 }),
|
|
13
|
+
useProvidersQueueRoom: jest.fn().mockReturnValue({
|
|
15
14
|
providerRoom: [
|
|
16
15
|
{
|
|
17
16
|
queueRoom: { uuid: 'c187d78b-5c54-49bf-a0f8-b7fb6034d36d' },
|
|
@@ -20,15 +19,13 @@ jest.mock('./add-provider-queue-room.resource', () => ({
|
|
|
20
19
|
],
|
|
21
20
|
isLoading: false,
|
|
22
21
|
mutate: jest.fn(),
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
addProviderToQueueRoom: jest.fn(),
|
|
26
|
-
useQueueRooms: jest.fn(() => ({
|
|
22
|
+
}),
|
|
23
|
+
useQueueRooms: jest.fn().mockReturnValue({
|
|
27
24
|
rooms: [
|
|
28
25
|
{ uuid: '6b3e233d-2b44-40ca-b0c8-c5a57a8c51b6', display: 'Room 1' },
|
|
29
26
|
{ uuid: 'e7786ac0-ab62-11ec-b909-0242ac120002', display: 'Room 2' },
|
|
30
27
|
],
|
|
31
|
-
})
|
|
28
|
+
}),
|
|
32
29
|
}));
|
|
33
30
|
|
|
34
31
|
jest.mock('../hooks/useQueues', () => {
|
|
@@ -43,19 +40,23 @@ jest.mock('../hooks/useQueues', () => {
|
|
|
43
40
|
});
|
|
44
41
|
|
|
45
42
|
jest.mock('../patient-search/hooks/useQueueLocations', () => ({
|
|
46
|
-
useQueueLocations: jest.fn(
|
|
43
|
+
useQueueLocations: jest.fn().mockReturnValue({
|
|
47
44
|
queueLocations: [
|
|
48
45
|
{ id: '1GHI12', name: 'Location 1' },
|
|
49
46
|
{ id: '1GHI45', name: 'Location 2' },
|
|
50
47
|
],
|
|
51
|
-
})
|
|
48
|
+
}),
|
|
52
49
|
}));
|
|
53
50
|
|
|
54
51
|
const providerUuid = 'cc75ad73-c24b-499c-8db9-a7ef4fc0b36d';
|
|
52
|
+
const defaultProps = {
|
|
53
|
+
providerUuid,
|
|
54
|
+
closeModal: mockCloseModal,
|
|
55
|
+
};
|
|
55
56
|
|
|
56
57
|
describe('AddProviderQueueRoom', () => {
|
|
57
58
|
it('renders the form fields', () => {
|
|
58
|
-
|
|
59
|
+
renderAddProviderQueueRoom();
|
|
59
60
|
|
|
60
61
|
expect(screen.getByText('Select a room')).toBeInTheDocument();
|
|
61
62
|
expect(screen.getByLabelText('Retain location')).toBeInTheDocument();
|
|
@@ -65,41 +66,46 @@ describe('AddProviderQueueRoom', () => {
|
|
|
65
66
|
|
|
66
67
|
it('updates the queue room selection', async () => {
|
|
67
68
|
const user = userEvent.setup();
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
// TODO: Fix missing dropdown labels in the form
|
|
69
|
+
renderAddProviderQueueRoom();
|
|
71
70
|
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
const queueLocationDropdown = screen.getByRole('combobox', { name: /queue location/i });
|
|
72
|
+
await user.click(queueLocationDropdown);
|
|
73
|
+
await user.click(screen.getByText('Room 1'));
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
expect(screen.getByText('Room 1')).toBeInTheDocument();
|
|
76
76
|
});
|
|
77
77
|
|
|
78
78
|
it('should update the retain location checkbox', async () => {
|
|
79
79
|
const user = userEvent.setup();
|
|
80
|
-
|
|
80
|
+
renderAddProviderQueueRoom();
|
|
81
81
|
|
|
82
82
|
const retainLocationCheckbox: HTMLInputElement = screen.getByRole('checkbox');
|
|
83
83
|
await user.click(retainLocationCheckbox);
|
|
84
84
|
|
|
85
|
-
expect(retainLocationCheckbox
|
|
85
|
+
expect(retainLocationCheckbox).toBeChecked();
|
|
86
86
|
});
|
|
87
87
|
|
|
88
88
|
it('should submit the form and add provider to queue room when all fields are filled', async () => {
|
|
89
89
|
const user = userEvent.setup();
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
90
|
+
renderAddProviderQueueRoom();
|
|
91
|
+
|
|
92
|
+
const submitButton = screen.getByText('Save');
|
|
93
|
+
const queueLocationDropdown = screen.getByRole('combobox', { name: /queue location/i });
|
|
94
|
+
await user.click(queueLocationDropdown);
|
|
95
|
+
await user.click(screen.getByText('Room 1'));
|
|
96
|
+
await user.click(submitButton);
|
|
97
|
+
|
|
98
|
+
expect(mockCloseModal).toHaveBeenCalledTimes(1);
|
|
99
|
+
expect(mockShowSnackbar).toHaveBeenCalledTimes(1);
|
|
100
|
+
expect(mockShowSnackbar).toHaveBeenCalledWith({
|
|
101
|
+
isLowContrast: true,
|
|
102
|
+
kind: 'success',
|
|
103
|
+
subtitle: 'Queue room updated successfully',
|
|
104
|
+
title: 'Update room',
|
|
105
|
+
});
|
|
104
106
|
});
|
|
105
107
|
});
|
|
108
|
+
|
|
109
|
+
function renderAddProviderQueueRoom(props = {}) {
|
|
110
|
+
render(<AddProviderQueueRoom {...defaultProps} {...props} />);
|
|
111
|
+
}
|
|
@@ -20,7 +20,7 @@ const ClearQueueEntriesDialog: React.FC<ClearQueueEntriesDialogProps> = ({ queue
|
|
|
20
20
|
const handleClearQueueBatchRequest = useCallback(() => {
|
|
21
21
|
setIsSubmitting(true);
|
|
22
22
|
batchClearQueueEntries(queueEntries).then(
|
|
23
|
-
(
|
|
23
|
+
() => {
|
|
24
24
|
closeModal();
|
|
25
25
|
showSnackbar({
|
|
26
26
|
isLowContrast: true,
|
|
@@ -4,24 +4,22 @@ import { render, screen } from '@testing-library/react';
|
|
|
4
4
|
import { batchClearQueueEntries } from './clear-queue-entries-dialog.resource';
|
|
5
5
|
import ClearQueueEntriesDialog from './clear-queue-entries-dialog.component';
|
|
6
6
|
|
|
7
|
-
const mockBatchClearQueueEntries =
|
|
7
|
+
const mockBatchClearQueueEntries = jest.mocked(batchClearQueueEntries);
|
|
8
|
+
const mockCloseModal = jest.fn();
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
10
|
+
const defaultProps = {
|
|
11
|
+
queueEntries: [],
|
|
12
|
+
closeModal: mockCloseModal,
|
|
13
|
+
};
|
|
13
14
|
|
|
14
15
|
jest.mock('./clear-queue-entries-dialog.resource');
|
|
15
|
-
|
|
16
16
|
jest.mock('../hooks/useQueueEntries', () => ({
|
|
17
17
|
useMutateQueueEntries: () => ({ mutateQueueEntries: jest.fn() }),
|
|
18
18
|
}));
|
|
19
19
|
|
|
20
20
|
describe('ClearQueueEntriesDialog Component', () => {
|
|
21
|
-
const visitQueueEntriesMock = [];
|
|
22
|
-
|
|
23
21
|
it('renders the component with warning message', () => {
|
|
24
|
-
|
|
22
|
+
renderClearQueueEntriesDialog();
|
|
25
23
|
|
|
26
24
|
expect(screen.getByRole('heading', { name: 'Service queue' })).toBeInTheDocument();
|
|
27
25
|
expect(screen.getByText('Clear all queue entries?')).toBeInTheDocument();
|
|
@@ -29,15 +27,17 @@ describe('ClearQueueEntriesDialog Component', () => {
|
|
|
29
27
|
expect(screen.getByText('Clear queue')).toBeInTheDocument();
|
|
30
28
|
});
|
|
31
29
|
|
|
32
|
-
it('should close modal when
|
|
30
|
+
it('should close modal when the cancel button is clicked', async () => {
|
|
33
31
|
const user = userEvent.setup();
|
|
34
|
-
const closeModalMock = jest.fn();
|
|
35
32
|
|
|
36
|
-
mockBatchClearQueueEntries.
|
|
37
|
-
|
|
33
|
+
mockBatchClearQueueEntries.mockResolvedValue(undefined);
|
|
34
|
+
renderClearQueueEntriesDialog();
|
|
38
35
|
|
|
39
36
|
await user.click(screen.getByText('Cancel'));
|
|
40
|
-
|
|
41
|
-
expect(closeModalMock).toHaveBeenCalled();
|
|
37
|
+
expect(mockCloseModal).toHaveBeenCalledTimes(1);
|
|
42
38
|
});
|
|
43
39
|
});
|
|
40
|
+
|
|
41
|
+
function renderClearQueueEntriesDialog(props = {}) {
|
|
42
|
+
render(<ClearQueueEntriesDialog {...defaultProps} {...props} />);
|
|
43
|
+
}
|