@openmrs/esm-patient-orders-app 11.3.1-patch.9310 → 11.3.1-patch.9508

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 (153) hide show
  1. package/.turbo/turbo-build.log +15 -18
  2. package/dist/1119.js +1 -1
  3. package/dist/1197.js +1 -1
  4. package/dist/1571.js +1 -0
  5. package/dist/1571.js.map +1 -0
  6. package/dist/2146.js +1 -1
  7. package/dist/2690.js +1 -1
  8. package/dist/2717.js +1 -0
  9. package/dist/2717.js.map +1 -0
  10. package/dist/3099.js +1 -1
  11. package/dist/3584.js +1 -1
  12. package/dist/4055.js +1 -1
  13. package/dist/4132.js +1 -1
  14. package/dist/4300.js +1 -1
  15. package/dist/4335.js +1 -1
  16. package/dist/439.js +1 -0
  17. package/dist/4618.js +1 -1
  18. package/dist/4652.js +1 -1
  19. package/dist/4937.js +1 -1
  20. package/dist/4937.js.map +1 -1
  21. package/dist/4944.js +1 -1
  22. package/dist/5134.js +2 -0
  23. package/dist/5134.js.map +1 -0
  24. package/dist/5173.js +1 -1
  25. package/dist/5241.js +1 -1
  26. package/dist/5442.js +1 -1
  27. package/dist/5661.js +1 -1
  28. package/dist/5670.js +1 -1
  29. package/dist/5670.js.map +1 -1
  30. package/dist/6022.js +1 -1
  31. package/dist/6468.js +1 -1
  32. package/dist/6589.js +1 -0
  33. package/dist/6679.js +1 -1
  34. package/dist/6840.js +1 -1
  35. package/dist/6859.js +1 -1
  36. package/dist/7097.js +1 -1
  37. package/dist/7159.js +1 -1
  38. package/dist/723.js +1 -1
  39. package/dist/7617.js +1 -1
  40. package/dist/795.js +1 -1
  41. package/dist/8163.js +1 -1
  42. package/dist/8349.js +1 -1
  43. package/dist/8371.js +1 -0
  44. package/dist/8618.js +1 -1
  45. package/dist/8625.js +1 -0
  46. package/dist/8625.js.map +1 -0
  47. package/dist/8803.js +1 -0
  48. package/dist/8803.js.map +1 -0
  49. package/dist/890.js +1 -1
  50. package/dist/8960.js +1 -0
  51. package/dist/8960.js.map +1 -0
  52. package/dist/9214.js +1 -1
  53. package/dist/9538.js +1 -1
  54. package/dist/9569.js +1 -1
  55. package/dist/986.js +1 -1
  56. package/dist/9879.js +1 -1
  57. package/dist/9895.js +1 -1
  58. package/dist/9900.js +1 -1
  59. package/dist/9913.js +1 -1
  60. package/dist/main.js +1 -1
  61. package/dist/main.js.map +1 -1
  62. package/dist/openmrs-esm-patient-orders-app.js +1 -1
  63. package/dist/openmrs-esm-patient-orders-app.js.buildmanifest.json +276 -259
  64. package/dist/openmrs-esm-patient-orders-app.js.map +1 -1
  65. package/dist/routes.json +1 -1
  66. package/package.json +2 -2
  67. package/src/api/api.ts +25 -0
  68. package/src/components/order-details-table.component.tsx +40 -53
  69. package/src/components/test-order.component.tsx +53 -49
  70. package/src/index.ts +9 -12
  71. package/src/lab-results/lab-results-form.component.tsx +343 -0
  72. package/src/lab-results/lab-results-form.test.tsx +455 -306
  73. package/src/lab-results/lab-results-schema.resource.tsx +13 -4
  74. package/src/lab-results/lab-results.resource.ts +113 -0
  75. package/src/order-basket/general-order-type/general-order-form/general-order-form.component.tsx +25 -71
  76. package/src/order-basket/general-order-type/{general-order-panel.component.tsx → general-order-type.component.tsx} +41 -23
  77. package/src/order-basket/general-order-type/{add-general-order/add-general-order.component.tsx → orderable-concept-search/orderable-concept-search.workspace.tsx} +83 -78
  78. package/src/order-basket/general-order-type/{add-general-order → orderable-concept-search}/search-results.component.tsx +14 -15
  79. package/src/order-basket/general-order-type/resources.ts +2 -3
  80. package/src/order-basket/order-basket.workspace.tsx +251 -35
  81. package/src/order-basket-action-button/order-basket-action-button.extension.tsx +31 -0
  82. package/src/order-basket-action-button/order-basket-action-button.test.tsx +36 -27
  83. package/src/order-cancellation-form/cancel-order-form.component.tsx +85 -82
  84. package/src/routes.json +25 -17
  85. package/src/utils/index.ts +3 -15
  86. package/translations/am.json +6 -20
  87. package/translations/ar.json +6 -20
  88. package/translations/ar_SY.json +6 -20
  89. package/translations/bn.json +6 -20
  90. package/translations/cs.json +114 -0
  91. package/translations/de.json +6 -20
  92. package/translations/en.json +12 -4
  93. package/translations/en_US.json +6 -20
  94. package/translations/es.json +6 -20
  95. package/translations/es_MX.json +6 -20
  96. package/translations/fr.json +7 -21
  97. package/translations/he.json +6 -20
  98. package/translations/hi.json +6 -20
  99. package/translations/hi_IN.json +6 -20
  100. package/translations/id.json +6 -20
  101. package/translations/it.json +6 -20
  102. package/translations/ka.json +6 -20
  103. package/translations/km.json +6 -20
  104. package/translations/ku.json +6 -20
  105. package/translations/ky.json +6 -20
  106. package/translations/lg.json +6 -20
  107. package/translations/ne.json +6 -20
  108. package/translations/pl.json +6 -20
  109. package/translations/pt.json +6 -20
  110. package/translations/pt_BR.json +6 -20
  111. package/translations/qu.json +6 -20
  112. package/translations/ro_RO.json +6 -20
  113. package/translations/ru_RU.json +6 -20
  114. package/translations/si.json +6 -20
  115. package/translations/sq.json +114 -0
  116. package/translations/sw.json +6 -20
  117. package/translations/sw_KE.json +6 -20
  118. package/translations/tr.json +6 -20
  119. package/translations/tr_TR.json +6 -20
  120. package/translations/uk.json +6 -20
  121. package/translations/uz.json +6 -20
  122. package/translations/uz@Latn.json +6 -20
  123. package/translations/uz_UZ.json +6 -20
  124. package/translations/vi.json +6 -20
  125. package/translations/zh.json +6 -20
  126. package/translations/zh_CN.json +6 -20
  127. package/translations/zh_TW.json +114 -0
  128. package/dist/1253.js +0 -1
  129. package/dist/1253.js.map +0 -1
  130. package/dist/1268.js +0 -2
  131. package/dist/1268.js.map +0 -1
  132. package/dist/375.js +0 -1
  133. package/dist/375.js.map +0 -1
  134. package/dist/4341.js +0 -1
  135. package/dist/4341.js.map +0 -1
  136. package/dist/4687.js +0 -1
  137. package/dist/4687.js.map +0 -1
  138. package/dist/6364.js +0 -1
  139. package/dist/6364.js.map +0 -1
  140. package/dist/6473.js +0 -1
  141. package/dist/6473.js.map +0 -1
  142. package/dist/8416.js +0 -1
  143. package/dist/8416.js.map +0 -1
  144. package/src/lab-results/exported-lab-results-form.workspace.tsx +0 -264
  145. package/src/lab-results/lab-results-form.workspace.tsx +0 -25
  146. package/src/order-basket/exported-order-basket.workspace.tsx +0 -54
  147. package/src/order-basket/general-order-type/add-general-order/add-general-order.workspace.tsx +0 -35
  148. package/src/order-basket/general-order-type/add-general-order/exported-add-general-order.workspace.tsx +0 -32
  149. package/src/order-basket/order-basket.component.tsx +0 -213
  150. package/src/order-basket-action-button/order-basket-action-button.component.tsx +0 -35
  151. /package/dist/{1268.js.LICENSE.txt → 5134.js.LICENSE.txt} +0 -0
  152. /package/src/order-basket/general-order-type/{add-general-order → orderable-concept-search}/orderable-concept-search.scss +0 -0
  153. /package/src/order-basket/general-order-type/{add-general-order → orderable-concept-search}/search-results.scss +0 -0
@@ -2,31 +2,34 @@ import React from 'react';
2
2
  import { render, screen, waitFor } from '@testing-library/react';
3
3
  import userEvent from '@testing-library/user-event';
4
4
  import {
5
- useOrderConceptByUuid,
5
+ useOrderConceptsByUuids,
6
6
  useLabEncounter,
7
7
  useObservation,
8
8
  type LabOrderConcept,
9
9
  updateOrderResult,
10
10
  type Datatype,
11
- useCompletedLabResults,
11
+ useCompletedLabResultsArray,
12
12
  } from './lab-results.resource';
13
- import LabResultsForm, { type LabResultsFormProps } from './lab-results-form.workspace';
14
- import { type PatientWorkspace2DefinitionProps, type Order } from '@openmrs/esm-patient-common-lib';
13
+ import { usePatient } from '@openmrs/esm-framework/src';
14
+ import LabResultsForm from './lab-results-form.component';
15
+ import { type Order } from '@openmrs/esm-patient-common-lib';
15
16
  import { type Encounter } from '../types/encounter';
16
17
  import { mockPatient } from 'tools';
17
18
 
18
- const mockUseOrderConceptByUuid = jest.mocked(useOrderConceptByUuid);
19
+ const mockUseOrderConceptByUuids = jest.mocked(useOrderConceptsByUuids);
19
20
  const mockUseLabEncounter = jest.mocked(useLabEncounter);
20
21
  const mockUseObservation = jest.mocked(useObservation);
21
- const mockUseCompletedLabResults = jest.mocked(useCompletedLabResults);
22
+ const mockUseCompletedLabResultsArray = jest.mocked(useCompletedLabResultsArray);
23
+ const mockUsePatient = jest.mocked(usePatient);
22
24
 
23
25
  jest.mock('./lab-results.resource', () => ({
24
26
  ...jest.requireActual('./lab-results.resource'),
25
27
  useOrderConceptByUuid: jest.fn(),
28
+ useOrderConceptsByUuids: jest.fn(),
26
29
  useLabEncounter: jest.fn(),
27
30
  useObservation: jest.fn(),
28
31
  updateOrderResult: jest.fn().mockResolvedValue({}),
29
- useCompletedLabResults: jest.fn(),
32
+ useCompletedLabResultsArray: jest.fn(),
30
33
  }));
31
34
 
32
35
  const mockOrder = {
@@ -39,43 +42,37 @@ const mockOrder = {
39
42
  orderer: { uuid: 'orderer-uuid' },
40
43
  };
41
44
 
42
- const mockCloseWorkspace = jest.fn();
43
-
44
- const testProps: PatientWorkspace2DefinitionProps<LabResultsFormProps, {}> = {
45
- closeWorkspace: mockCloseWorkspace,
46
- workspaceProps: {
47
- order: mockOrder as Order,
48
- },
49
- groupProps: {
50
- patientUuid: mockPatient.id,
51
- patient: mockPatient,
52
- visitContext: null,
53
- mutateVisitContext: null,
54
- },
55
- launchChildWorkspace: jest.fn(),
56
- windowProps: {},
57
- workspaceName: '',
58
- windowName: '',
59
- isRootWorkspace: false,
45
+ const testProps = {
46
+ closeWorkspace: jest.fn(),
47
+ closeWorkspaceWithSavedChanges: jest.fn(),
48
+ order: mockOrder as Order,
49
+ promptBeforeClosing: jest.fn(),
50
+ setTitle: jest.fn(),
51
+ patientUuid: mockPatient.id,
52
+ patient: mockPatient,
53
+ visitContext: null,
54
+ mutateVisitContext: null,
60
55
  };
61
56
 
62
57
  describe('LabResultsForm', () => {
63
58
  beforeEach(() => {
64
- mockUseOrderConceptByUuid.mockReturnValue({
65
- concept: {
66
- uuid: 'concept-uuid',
67
- display: 'Test Concept',
68
- setMembers: [],
69
- datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
70
- hiAbsolute: 100,
71
- hiCritical: 80,
72
- hiNormal: 70,
73
- lowAbsolute: 0,
74
- lowCritical: 40,
75
- lowNormal: 50,
76
- units: 'mg/dL',
77
- allowDecimal: false,
78
- } as LabOrderConcept,
59
+ mockUseOrderConceptByUuids.mockReturnValue({
60
+ concepts: [
61
+ {
62
+ uuid: 'concept-uuid',
63
+ display: 'Test Concept',
64
+ setMembers: [],
65
+ datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
66
+ hiAbsolute: 100,
67
+ hiCritical: 80,
68
+ hiNormal: 70,
69
+ lowAbsolute: 0,
70
+ lowCritical: 40,
71
+ lowNormal: 50,
72
+ units: 'mg/dL',
73
+ allowDecimal: false,
74
+ },
75
+ ] as LabOrderConcept[],
79
76
  isLoading: false,
80
77
  error: null,
81
78
  isValidating: false,
@@ -95,12 +92,18 @@ describe('LabResultsForm', () => {
95
92
  isValidating: false,
96
93
  mutate: jest.fn(),
97
94
  });
98
- mockUseCompletedLabResults.mockReturnValue({
99
- completeLabResult: null,
95
+ mockUseCompletedLabResultsArray.mockReturnValue({
96
+ completeLabResults: [],
100
97
  isLoading: false,
101
98
  error: null,
102
99
  mutate: jest.fn(),
103
100
  });
101
+ mockUsePatient.mockReturnValue({
102
+ isLoading: false,
103
+ patient: mockPatient,
104
+ patientUuid: '',
105
+ error: null,
106
+ });
104
107
  });
105
108
 
106
109
  test('validates numeric input correctly', async () => {
@@ -121,21 +124,23 @@ describe('LabResultsForm', () => {
121
124
  test('validate when we have a concept with allowDecimal set to true', async () => {
122
125
  const user = userEvent.setup();
123
126
  // if allowDecimal is true, we should allow decimal values
124
- mockUseOrderConceptByUuid.mockReturnValue({
125
- concept: {
126
- uuid: 'concept-uuid',
127
- display: 'Test Concept',
128
- setMembers: [],
129
- datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
130
- hiAbsolute: 100,
131
- lowAbsolute: null,
132
- lowCritical: null,
133
- lowNormal: null,
134
- hiCritical: null,
135
- hiNormal: null,
136
- units: 'mg/dL',
137
- allowDecimal: true,
138
- } as LabOrderConcept,
127
+ mockUseOrderConceptByUuids.mockReturnValue({
128
+ concepts: [
129
+ {
130
+ uuid: 'concept-uuid',
131
+ display: 'Test Concept',
132
+ setMembers: [],
133
+ datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
134
+ hiAbsolute: 100,
135
+ lowAbsolute: null,
136
+ lowCritical: null,
137
+ lowNormal: null,
138
+ hiCritical: null,
139
+ hiNormal: null,
140
+ units: 'mg/dL',
141
+ allowDecimal: true,
142
+ },
143
+ ] as LabOrderConcept[],
139
144
  isLoading: false,
140
145
  error: null,
141
146
  isValidating: false,
@@ -201,20 +206,22 @@ describe('LabResultsForm', () => {
201
206
 
202
207
  test('validate numeric input with concept having only hiAbsolute', async () => {
203
208
  const user = userEvent.setup();
204
- mockUseOrderConceptByUuid.mockReturnValue({
205
- concept: {
206
- uuid: 'concept-uuid',
207
- display: 'Test Concept',
208
- setMembers: [],
209
- datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
210
- hiAbsolute: 100,
211
- lowAbsolute: null,
212
- lowCritical: null,
213
- lowNormal: null,
214
- hiCritical: null,
215
- hiNormal: null,
216
- units: 'mg/dL',
217
- } as LabOrderConcept,
209
+ mockUseOrderConceptByUuids.mockReturnValue({
210
+ concepts: [
211
+ {
212
+ uuid: 'concept-uuid',
213
+ display: 'Test Concept',
214
+ setMembers: [],
215
+ datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
216
+ hiAbsolute: 100,
217
+ lowAbsolute: null,
218
+ lowCritical: null,
219
+ lowNormal: null,
220
+ hiCritical: null,
221
+ hiNormal: null,
222
+ units: 'mg/dL',
223
+ },
224
+ ] as LabOrderConcept[],
218
225
  isLoading: false,
219
226
  error: null,
220
227
  isValidating: false,
@@ -237,20 +244,22 @@ describe('LabResultsForm', () => {
237
244
 
238
245
  test('validate numeric input with concept having only lowAbsolute', async () => {
239
246
  const user = userEvent.setup();
240
- mockUseOrderConceptByUuid.mockReturnValue({
241
- concept: {
242
- uuid: 'concept-uuid',
243
- display: 'Test Concept',
244
- setMembers: [],
245
- datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
246
- lowAbsolute: 0,
247
- lowCritical: null,
248
- lowNormal: null,
249
- hiCritical: null,
250
- hiNormal: null,
251
- hiAbsolute: null,
252
- units: 'mg/dL',
253
- } as LabOrderConcept,
247
+ mockUseOrderConceptByUuids.mockReturnValue({
248
+ concepts: [
249
+ {
250
+ uuid: 'concept-uuid',
251
+ display: 'Test Concept',
252
+ setMembers: [],
253
+ datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
254
+ lowAbsolute: 0,
255
+ lowCritical: null,
256
+ lowNormal: null,
257
+ hiCritical: null,
258
+ hiNormal: null,
259
+ hiAbsolute: null,
260
+ units: 'mg/dL',
261
+ },
262
+ ] as LabOrderConcept[],
254
263
  isLoading: false,
255
264
  error: null,
256
265
  isValidating: false,
@@ -271,11 +280,76 @@ describe('LabResultsForm', () => {
271
280
  });
272
281
  });
273
282
 
274
- test('submits form with valid data', async () => {
283
+ test('validate numeric input for multiple fields', async () => {
275
284
  const user = userEvent.setup();
276
-
285
+ mockUseOrderConceptByUuids.mockReturnValue({
286
+ concepts: [
287
+ {
288
+ uuid: 'concept-uuid',
289
+ display: 'Test Concept',
290
+ setMembers: [],
291
+ datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
292
+ hiAbsolute: 60,
293
+ lowAbsolute: 0,
294
+ lowCritical: null,
295
+ lowNormal: null,
296
+ hiCritical: null,
297
+ hiNormal: null,
298
+ units: 'mg/dL',
299
+ allowDecimal: true,
300
+ },
301
+ {
302
+ uuid: 'concept-uuid2',
303
+ display: 'Test Concept Percentage',
304
+ setMembers: [],
305
+ datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
306
+ hiAbsolute: 100,
307
+ lowAbsolute: 0,
308
+ lowCritical: null,
309
+ lowNormal: null,
310
+ hiCritical: null,
311
+ hiNormal: null,
312
+ units: '%',
313
+ allowDecimal: true,
314
+ },
315
+ ] as LabOrderConcept[],
316
+ isLoading: false,
317
+ error: null,
318
+ isValidating: false,
319
+ mutate: jest.fn(),
320
+ });
277
321
  render(<LabResultsForm {...testProps} />);
278
322
 
323
+ const input = await screen.findByLabelText(`Test Concept (0 - 60 mg/dL)`);
324
+ await user.type(input, '80');
325
+
326
+ const input2 = await screen.findByLabelText(`Test Concept Percentage (0 - 100 %)`);
327
+ await user.type(input2, '120');
328
+
329
+ const saveButton = screen.getByRole('button', { name: /Save and close/i });
330
+ await user.click(saveButton);
331
+
332
+ await waitFor(() => {
333
+ expect(screen.getByText('Test Concept must be between 0 and 60')).toBeInTheDocument();
334
+ });
335
+ await waitFor(() => {
336
+ expect(screen.getByText('Test Concept Percentage must be between 0 and 100')).toBeInTheDocument();
337
+ });
338
+ });
339
+
340
+ test('submits form with valid data', async () => {
341
+ const user = userEvent.setup();
342
+ const mockCloseWorkspace = jest.fn();
343
+ const mockCloseWorkspaceWithSavedChanges = jest.fn();
344
+
345
+ render(
346
+ <LabResultsForm
347
+ {...testProps}
348
+ closeWorkspace={mockCloseWorkspace}
349
+ closeWorkspaceWithSavedChanges={mockCloseWorkspaceWithSavedChanges}
350
+ />,
351
+ );
352
+
279
353
  const input = await screen.findByLabelText(`Test Concept (0 - 100 mg/dL)`);
280
354
  await user.type(input, '50');
281
355
 
@@ -283,53 +357,118 @@ describe('LabResultsForm', () => {
283
357
  await user.click(saveButton);
284
358
 
285
359
  await waitFor(() => {
286
- expect(mockCloseWorkspace).toHaveBeenCalled();
360
+ expect(mockCloseWorkspaceWithSavedChanges).toHaveBeenCalled();
361
+ });
362
+ });
363
+
364
+ test('submits form with valid data for multiple Results', async () => {
365
+ const user = userEvent.setup();
366
+ mockUseOrderConceptByUuids.mockReturnValue({
367
+ concepts: [
368
+ {
369
+ uuid: 'concept-uuid',
370
+ display: 'Test Concept',
371
+ setMembers: [],
372
+ datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
373
+ hiAbsolute: 60,
374
+ lowAbsolute: 0,
375
+ lowCritical: null,
376
+ lowNormal: null,
377
+ hiCritical: null,
378
+ hiNormal: null,
379
+ units: 'mg/dL',
380
+ allowDecimal: true,
381
+ },
382
+ {
383
+ uuid: 'concept-uuid2',
384
+ display: 'Test Concept Percentage',
385
+ setMembers: [],
386
+ datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
387
+ hiAbsolute: 100,
388
+ lowAbsolute: 0,
389
+ lowCritical: null,
390
+ lowNormal: null,
391
+ hiCritical: null,
392
+ hiNormal: null,
393
+ units: '%',
394
+ allowDecimal: true,
395
+ },
396
+ ] as LabOrderConcept[],
397
+ isLoading: false,
398
+ error: null,
399
+ isValidating: false,
400
+ mutate: jest.fn(),
401
+ });
402
+ const mockCloseWorkspace = jest.fn();
403
+ const mockCloseWorkspaceWithSavedChanges = jest.fn();
404
+
405
+ render(
406
+ <LabResultsForm
407
+ {...testProps}
408
+ closeWorkspace={mockCloseWorkspace}
409
+ closeWorkspaceWithSavedChanges={mockCloseWorkspaceWithSavedChanges}
410
+ />,
411
+ );
412
+
413
+ const input = await screen.findByLabelText(`Test Concept (0 - 60 mg/dL)`);
414
+ await user.type(input, '50');
415
+
416
+ const input2 = await screen.findByLabelText(`Test Concept Percentage (0 - 100 %)`);
417
+ await user.type(input2, '90');
418
+
419
+ const saveButton = screen.getByRole('button', { name: /Save and close/i });
420
+ await user.click(saveButton);
421
+
422
+ await waitFor(() => {
423
+ expect(mockCloseWorkspaceWithSavedChanges).toHaveBeenCalled();
287
424
  });
288
425
  });
289
426
 
290
427
  test('validate numeric input where concept is a set', async () => {
291
428
  const user = userEvent.setup();
292
- mockUseOrderConceptByUuid.mockReturnValue({
293
- concept: {
294
- uuid: 'concept-uuid',
295
- display: 'Test Concept',
296
- datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
297
- lowAbsolute: 0,
298
- lowCritical: null,
299
- lowNormal: null,
300
- hiCritical: null,
301
- hiNormal: null,
302
- hiAbsolute: null,
303
- units: 'mg/dL',
304
- setMembers: [
305
- {
306
- uuid: 'set-member-uuid',
307
- display: 'Set Member',
308
- setMembers: [],
309
- datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
310
- lowAbsolute: 50,
311
- lowCritical: 70,
312
- lowNormal: 80,
313
- hiCritical: 140,
314
- hiNormal: 120,
315
- hiAbsolute: 150,
316
- units: 'mg/dL',
317
- },
318
- {
319
- uuid: 'set-member-uuid-2',
320
- display: 'Set Member 2',
321
- setMembers: [],
322
- datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
323
- lowAbsolute: 5,
324
- lowCritical: 10,
325
- lowNormal: 15,
326
- hiCritical: 20,
327
- hiNormal: 25,
328
- hiAbsolute: 30,
329
- units: 'mg/dL',
330
- },
331
- ],
332
- } as LabOrderConcept,
429
+ mockUseOrderConceptByUuids.mockReturnValue({
430
+ concepts: [
431
+ {
432
+ uuid: 'concept-uuid',
433
+ display: 'Test Concept',
434
+ datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
435
+ lowAbsolute: 0,
436
+ lowCritical: null,
437
+ lowNormal: null,
438
+ hiCritical: null,
439
+ hiNormal: null,
440
+ hiAbsolute: null,
441
+ units: 'mg/dL',
442
+ setMembers: [
443
+ {
444
+ uuid: 'set-member-uuid',
445
+ display: 'Set Member',
446
+ setMembers: [],
447
+ datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
448
+ lowAbsolute: 50,
449
+ lowCritical: 70,
450
+ lowNormal: 80,
451
+ hiCritical: 140,
452
+ hiNormal: 120,
453
+ hiAbsolute: 150,
454
+ units: 'mg/dL',
455
+ },
456
+ {
457
+ uuid: 'set-member-uuid-2',
458
+ display: 'Set Member 2',
459
+ setMembers: [],
460
+ datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
461
+ lowAbsolute: 5,
462
+ lowCritical: 10,
463
+ lowNormal: 15,
464
+ hiCritical: 20,
465
+ hiNormal: 25,
466
+ hiAbsolute: 30,
467
+ units: 'mg/dL',
468
+ },
469
+ ],
470
+ },
471
+ ] as LabOrderConcept[],
333
472
  isLoading: false,
334
473
  error: null,
335
474
  isValidating: false,
@@ -363,20 +502,22 @@ describe('LabResultsForm', () => {
363
502
 
364
503
  test('lab results form submits the correct lab result payload when the concept is not a set', async () => {
365
504
  const user = userEvent.setup();
366
- mockUseOrderConceptByUuid.mockReturnValue({
367
- concept: {
368
- uuid: 'concept-uuid',
369
- display: 'Test Concept',
370
- setMembers: [],
371
- datatype: { display: 'Text', hl7Abbreviation: 'ST' } as Datatype,
372
- hiAbsolute: 100,
373
- lowAbsolute: 0,
374
- lowCritical: null,
375
- lowNormal: null,
376
- hiCritical: null,
377
- hiNormal: null,
378
- units: 'mg/dL',
379
- } as LabOrderConcept,
505
+ mockUseOrderConceptByUuids.mockReturnValue({
506
+ concepts: [
507
+ {
508
+ uuid: 'concept-uuid',
509
+ display: 'Test Concept',
510
+ setMembers: [],
511
+ datatype: { display: 'Text', hl7Abbreviation: 'ST' } as Datatype,
512
+ hiAbsolute: 100,
513
+ lowAbsolute: 0,
514
+ lowCritical: null,
515
+ lowNormal: null,
516
+ hiCritical: null,
517
+ hiNormal: null,
518
+ units: 'mg/dL',
519
+ },
520
+ ] as LabOrderConcept[],
380
521
  isLoading: false,
381
522
  error: null,
382
523
  isValidating: false,
@@ -410,48 +551,50 @@ describe('LabResultsForm', () => {
410
551
 
411
552
  test('lab results forms submits correct payload when the concept is a set and one set member is keyed', async () => {
412
553
  const user = userEvent.setup();
413
- mockUseOrderConceptByUuid.mockReturnValue({
414
- concept: {
415
- uuid: 'concept-uuid',
416
- display: 'Test Concept',
417
- set: true,
418
- setMembers: [
419
- {
420
- uuid: 'set-member-uuid-1',
421
- display: 'Set Member 1',
422
- concept: { uuid: 'concept-uuid-1', display: 'Concept 1' },
423
- datatype: { display: 'Numeric', hl7Abbreviation: 'NM' } as Datatype,
424
- hiAbsolute: 100,
425
- lowAbsolute: 0,
426
- lowCritical: null,
427
- lowNormal: null,
428
- hiCritical: null,
429
- hiNormal: null,
430
- units: 'mg/dL',
431
- },
432
- {
433
- uuid: 'set-member-uuid-2',
434
- display: 'Set Member 2',
435
- concept: { uuid: 'concept-uuid-2', display: 'Concept 2' },
436
- datatype: { display: 'Numeric', hl7Abbreviation: 'NM' } as Datatype,
437
- hiAbsolute: 80,
438
- lowAbsolute: 0,
439
- lowCritical: null,
440
- lowNormal: null,
441
- hiCritical: null,
442
- hiNormal: null,
443
- units: 'mmol/L',
444
- },
445
- ],
446
- datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
447
- hiAbsolute: 100,
448
- lowAbsolute: 0,
449
- lowCritical: null,
450
- lowNormal: null,
451
- hiCritical: null,
452
- hiNormal: null,
453
- units: 'mg/dL',
454
- } as unknown as LabOrderConcept,
554
+ mockUseOrderConceptByUuids.mockReturnValue({
555
+ concepts: [
556
+ {
557
+ uuid: 'concept-uuid',
558
+ display: 'Test Concept',
559
+ set: true,
560
+ setMembers: [
561
+ {
562
+ uuid: 'set-member-uuid-1',
563
+ display: 'Set Member 1',
564
+ concept: { uuid: 'concept-uuid-1', display: 'Concept 1' },
565
+ datatype: { display: 'Numeric', hl7Abbreviation: 'NM' } as Datatype,
566
+ hiAbsolute: 100,
567
+ lowAbsolute: 0,
568
+ lowCritical: null,
569
+ lowNormal: null,
570
+ hiCritical: null,
571
+ hiNormal: null,
572
+ units: 'mg/dL',
573
+ },
574
+ {
575
+ uuid: 'set-member-uuid-2',
576
+ display: 'Set Member 2',
577
+ concept: { uuid: 'concept-uuid-2', display: 'Concept 2' },
578
+ datatype: { display: 'Numeric', hl7Abbreviation: 'NM' } as Datatype,
579
+ hiAbsolute: 80,
580
+ lowAbsolute: 0,
581
+ lowCritical: null,
582
+ lowNormal: null,
583
+ hiCritical: null,
584
+ hiNormal: null,
585
+ units: 'mmol/L',
586
+ },
587
+ ],
588
+ datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
589
+ hiAbsolute: 100,
590
+ lowAbsolute: 0,
591
+ lowCritical: null,
592
+ lowNormal: null,
593
+ hiCritical: null,
594
+ hiNormal: null,
595
+ units: 'mg/dL',
596
+ },
597
+ ] as unknown as LabOrderConcept[],
455
598
  isLoading: false,
456
599
  error: null,
457
600
  isValidating: false,
@@ -514,48 +657,50 @@ describe('LabResultsForm', () => {
514
657
 
515
658
  test('lab results form submits correct payload when the concept is a set and both set members are keyed', async () => {
516
659
  const user = userEvent.setup();
517
- mockUseOrderConceptByUuid.mockReturnValue({
518
- concept: {
519
- uuid: 'concept-uuid',
520
- display: 'Test Concept',
521
- set: true,
522
- setMembers: [
523
- {
524
- uuid: 'set-member-uuid-1',
525
- display: 'Set Member 1',
526
- concept: { uuid: 'concept-uuid-1', display: 'Concept 1' },
527
- datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
528
- hiAbsolute: 100,
529
- lowAbsolute: 0,
530
- lowCritical: null,
531
- lowNormal: null,
532
- hiCritical: null,
533
- hiNormal: null,
534
- units: 'mg/dL',
535
- },
536
- {
537
- uuid: 'set-member-uuid-2',
538
- display: 'Set Member 2',
539
- concept: { uuid: 'concept-uuid-2', display: 'Concept 2' },
540
- datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
541
- hiAbsolute: 80,
542
- lowAbsolute: 0,
543
- lowCritical: null,
544
- lowNormal: null,
545
- hiCritical: null,
546
- hiNormal: null,
547
- units: 'mmol/L',
548
- },
549
- ],
550
- datatype: { display: 'Numeric' },
551
- hiAbsolute: 100,
552
- lowAbsolute: 0,
553
- lowCritical: null,
554
- lowNormal: null,
555
- hiCritical: null,
556
- hiNormal: null,
557
- units: 'mg/dL',
558
- } as unknown as LabOrderConcept,
660
+ mockUseOrderConceptByUuids.mockReturnValue({
661
+ concepts: [
662
+ {
663
+ uuid: 'concept-uuid',
664
+ display: 'Test Concept',
665
+ set: true,
666
+ setMembers: [
667
+ {
668
+ uuid: 'set-member-uuid-1',
669
+ display: 'Set Member 1',
670
+ concept: { uuid: 'concept-uuid-1', display: 'Concept 1' },
671
+ datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
672
+ hiAbsolute: 100,
673
+ lowAbsolute: 0,
674
+ lowCritical: null,
675
+ lowNormal: null,
676
+ hiCritical: null,
677
+ hiNormal: null,
678
+ units: 'mg/dL',
679
+ },
680
+ {
681
+ uuid: 'set-member-uuid-2',
682
+ display: 'Set Member 2',
683
+ concept: { uuid: 'concept-uuid-2', display: 'Concept 2' },
684
+ datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
685
+ hiAbsolute: 80,
686
+ lowAbsolute: 0,
687
+ lowCritical: null,
688
+ lowNormal: null,
689
+ hiCritical: null,
690
+ hiNormal: null,
691
+ units: 'mmol/L',
692
+ },
693
+ ],
694
+ datatype: { display: 'Numeric' },
695
+ hiAbsolute: 100,
696
+ lowAbsolute: 0,
697
+ lowCritical: null,
698
+ lowNormal: null,
699
+ hiCritical: null,
700
+ hiNormal: null,
701
+ units: 'mg/dL',
702
+ },
703
+ ] as unknown as LabOrderConcept[],
559
704
  isLoading: false,
560
705
  error: null,
561
706
  isValidating: false,
@@ -630,13 +775,15 @@ describe('LabResultsForm', () => {
630
775
  });
631
776
 
632
777
  test('display error notification when the concept datatype is N/A', async () => {
633
- mockUseOrderConceptByUuid.mockReturnValue({
634
- concept: {
635
- uuid: 'concept-uuid',
636
- display: 'Test Concept',
637
- setMembers: [],
638
- datatype: { display: 'N/A' },
639
- } as LabOrderConcept,
778
+ mockUseOrderConceptByUuids.mockReturnValue({
779
+ concepts: [
780
+ {
781
+ uuid: 'concept-uuid',
782
+ display: 'Test Concept',
783
+ setMembers: [],
784
+ datatype: { display: 'N/A' },
785
+ },
786
+ ] as LabOrderConcept[],
640
787
  isLoading: false,
641
788
  error: null,
642
789
  isValidating: false,
@@ -655,78 +802,80 @@ describe('LabResultsForm', () => {
655
802
 
656
803
  test('should display second level of set members for a given concept, if present', () => {
657
804
  const user = userEvent.setup();
658
- mockUseOrderConceptByUuid.mockReturnValue({
659
- concept: {
660
- uuid: 'concept-uuid',
661
- display: 'Test Concept',
662
- set: true,
663
- setMembers: [
664
- {
665
- uuid: 'set-member-uuid-1',
666
- display: 'Set Member 1',
667
- concept: { uuid: 'concept-uuid-1', display: 'Concept 1' },
668
- datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
669
- hiAbsolute: 100,
670
- lowAbsolute: 0,
671
- lowCritical: null,
672
- lowNormal: null,
673
- hiCritical: null,
674
- hiNormal: null,
675
- units: 'mg/dL',
676
- },
677
- {
678
- uuid: 'set-member-uuid-2',
679
- display: 'Set Member 2',
680
- concept: { uuid: 'concept-uuid-2', display: 'Concept 2' },
681
- datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
682
- hiAbsolute: 80,
683
- lowAbsolute: 0,
684
- lowCritical: null,
685
- lowNormal: null,
686
- hiCritical: null,
687
- hiNormal: null,
688
- units: 'mmol/L',
689
- },
690
- {
691
- uuid: 'set-member-uuid-3',
692
- display: 'Set Member 3',
693
- concept: { uuid: 'concept-uuid-3', display: 'Concept 3' },
694
- datatype: { display: 'N/A', hl7Abbreviation: 'ZZ' },
695
- set: true,
696
- setMembers: [
697
- {
698
- uuid: 'set-member-uuid-3.1',
699
- display: 'Set Member 3.1',
700
- concept: { uuid: 'concept-uuid-3.1', display: 'Concept 3.1' },
701
- datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
702
- hiAbsolute: 80,
703
- lowAbsolute: 0,
704
- lowCritical: null,
705
- lowNormal: null,
706
- units: 'mg/dL',
707
- },
708
- {
709
- uuid: 'set-member-uuid-3.2',
710
- display: 'Set Member 3.2',
711
- concept: { uuid: 'concept-uuid-3.2', display: 'Concept 3.2' },
712
- datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
713
- hiAbsolute: 80,
714
- lowAbsolute: 0,
715
- lowCritical: null,
716
- units: 'mg/dL',
717
- },
718
- ],
719
- },
720
- ],
721
- datatype: { display: 'Numeric' },
722
- hiAbsolute: 100,
723
- lowAbsolute: 0,
724
- lowCritical: null,
725
- lowNormal: null,
726
- hiCritical: null,
727
- hiNormal: null,
728
- units: 'mg/dL',
729
- } as unknown as LabOrderConcept,
805
+ mockUseOrderConceptByUuids.mockReturnValue({
806
+ concepts: [
807
+ {
808
+ uuid: 'concept-uuid',
809
+ display: 'Test Concept',
810
+ set: true,
811
+ setMembers: [
812
+ {
813
+ uuid: 'set-member-uuid-1',
814
+ display: 'Set Member 1',
815
+ concept: { uuid: 'concept-uuid-1', display: 'Concept 1' },
816
+ datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
817
+ hiAbsolute: 100,
818
+ lowAbsolute: 0,
819
+ lowCritical: null,
820
+ lowNormal: null,
821
+ hiCritical: null,
822
+ hiNormal: null,
823
+ units: 'mg/dL',
824
+ },
825
+ {
826
+ uuid: 'set-member-uuid-2',
827
+ display: 'Set Member 2',
828
+ concept: { uuid: 'concept-uuid-2', display: 'Concept 2' },
829
+ datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
830
+ hiAbsolute: 80,
831
+ lowAbsolute: 0,
832
+ lowCritical: null,
833
+ lowNormal: null,
834
+ hiCritical: null,
835
+ hiNormal: null,
836
+ units: 'mmol/L',
837
+ },
838
+ {
839
+ uuid: 'set-member-uuid-3',
840
+ display: 'Set Member 3',
841
+ concept: { uuid: 'concept-uuid-3', display: 'Concept 3' },
842
+ datatype: { display: 'N/A', hl7Abbreviation: 'ZZ' },
843
+ set: true,
844
+ setMembers: [
845
+ {
846
+ uuid: 'set-member-uuid-3.1',
847
+ display: 'Set Member 3.1',
848
+ concept: { uuid: 'concept-uuid-3.1', display: 'Concept 3.1' },
849
+ datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
850
+ hiAbsolute: 80,
851
+ lowAbsolute: 0,
852
+ lowCritical: null,
853
+ lowNormal: null,
854
+ units: 'mg/dL',
855
+ },
856
+ {
857
+ uuid: 'set-member-uuid-3.2',
858
+ display: 'Set Member 3.2',
859
+ concept: { uuid: 'concept-uuid-3.2', display: 'Concept 3.2' },
860
+ datatype: { display: 'Numeric', hl7Abbreviation: 'NM' },
861
+ hiAbsolute: 80,
862
+ lowAbsolute: 0,
863
+ lowCritical: null,
864
+ units: 'mg/dL',
865
+ },
866
+ ],
867
+ },
868
+ ],
869
+ datatype: { display: 'Numeric' },
870
+ hiAbsolute: 100,
871
+ lowAbsolute: 0,
872
+ lowCritical: null,
873
+ lowNormal: null,
874
+ hiCritical: null,
875
+ hiNormal: null,
876
+ units: 'mg/dL',
877
+ },
878
+ ] as unknown as LabOrderConcept[],
730
879
  isLoading: false,
731
880
  error: null,
732
881
  isValidating: false,