@openmrs/esm-patient-medications-app 11.3.1-pre.9447 → 11.3.1-pre.9455

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 (56) hide show
  1. package/.turbo/turbo-build.log +13 -13
  2. package/dist/1022.js +1 -1
  3. package/dist/1022.js.map +1 -1
  4. package/dist/1918.js +1 -0
  5. package/dist/1918.js.map +1 -0
  6. package/dist/2102.js +1 -0
  7. package/dist/2102.js.map +1 -0
  8. package/dist/3099.js +1 -1
  9. package/dist/4138.js +1 -0
  10. package/dist/4138.js.map +1 -0
  11. package/dist/4300.js +1 -1
  12. package/dist/4341.js +1 -0
  13. package/dist/4341.js.map +1 -0
  14. package/dist/4953.js +1 -1
  15. package/dist/4953.js.map +1 -1
  16. package/dist/8437.js +1 -1
  17. package/dist/8437.js.map +1 -1
  18. package/dist/8812.js +1 -1
  19. package/dist/8812.js.map +1 -1
  20. package/dist/main.js +1 -1
  21. package/dist/main.js.map +1 -1
  22. package/dist/openmrs-esm-patient-medications-app.js +1 -1
  23. package/dist/openmrs-esm-patient-medications-app.js.buildmanifest.json +120 -71
  24. package/dist/routes.json +1 -1
  25. package/package.json +2 -2
  26. package/src/active-medications/active-medications.component.tsx +8 -2
  27. package/src/active-medications/active-medications.test.tsx +6 -9
  28. package/src/add-drug-order/add-drug-order.component.tsx +165 -0
  29. package/src/add-drug-order/add-drug-order.test.tsx +23 -15
  30. package/src/add-drug-order/add-drug-order.workspace.tsx +25 -118
  31. package/src/add-drug-order/drug-order-form.component.tsx +389 -387
  32. package/src/add-drug-order/drug-order-form.resource.ts +1 -2
  33. package/src/add-drug-order/drug-search/drug-search-combobox.component.tsx +7 -6
  34. package/src/add-drug-order/drug-search/drug-search-combobox.test.tsx +1 -1
  35. package/src/add-drug-order/drug-search/drug-search.component.tsx +9 -11
  36. package/src/add-drug-order/drug-search/drug-search.resource.tsx +10 -3
  37. package/src/add-drug-order/drug-search/helpers.ts +1 -1
  38. package/src/add-drug-order/drug-search/order-basket-search-results.component.tsx +32 -17
  39. package/src/add-drug-order/exported-add-drug-order.workspace.tsx +28 -0
  40. package/src/add-drug-order/fill-prescription-form.workspace.tsx +4 -5
  41. package/src/api/api.ts +7 -3
  42. package/src/api/order-config.ts +3 -3
  43. package/src/components/medications-details-table.component.tsx +55 -16
  44. package/src/drug-order-basket-panel/drug-order-basket-panel.extension.tsx +16 -42
  45. package/src/drug-order-basket-panel/drug-order-basket-panel.test.tsx +6 -6
  46. package/src/drug-order-basket-panel/order-basket-item-tile.component.tsx +1 -1
  47. package/src/index.ts +5 -1
  48. package/src/medications-summary/medications-summary.component.tsx +2 -2
  49. package/src/routes.json +7 -7
  50. package/translations/en.json +2 -0
  51. package/translations/es.json +22 -22
  52. package/dist/7151.js +0 -1
  53. package/dist/7151.js.map +0 -1
  54. package/dist/8803.js +0 -1
  55. package/dist/8803.js.map +0 -1
  56. package/src/types.ts +0 -75
@@ -10,19 +10,18 @@ import {
10
10
  mockSessionDataResponse,
11
11
  } from '__mocks__';
12
12
  import { getTemplateOrderBasketItem, useDrugSearch, useDrugTemplate } from './drug-search/drug-search.resource';
13
- import { closeWorkspace, launchWorkspace, useSession } from '@openmrs/esm-framework';
13
+ import { launchWorkspace2, useSession } from '@openmrs/esm-framework';
14
14
  import { type PostDataPrepFunction, useOrderBasket } from '@openmrs/esm-patient-common-lib';
15
15
  import { _resetOrderBasketStore } from '@openmrs/esm-patient-common-lib/src/orders/store';
16
16
  import AddDrugOrderWorkspace from './add-drug-order.workspace';
17
17
 
18
- const mockCloseWorkspace = closeWorkspace as jest.Mock;
19
- const mockLaunchWorkspace = jest.mocked(launchWorkspace);
18
+ const mockCloseWorkspace = jest.fn();
19
+ const mockLaunchWorkspace = jest.mocked(launchWorkspace2);
20
20
  const mockUseSession = jest.mocked(useSession);
21
21
  const mockUseDrugSearch = jest.mocked(useDrugSearch);
22
22
  const mockUseDrugTemplate = jest.mocked(useDrugTemplate);
23
23
  const usePatientOrdersMock = jest.fn();
24
24
 
25
- mockCloseWorkspace.mockImplementation((name, { onWorkspaceClose }) => onWorkspaceClose());
26
25
  mockUseSession.mockReturnValue(mockSessionDataResponse.data);
27
26
 
28
27
  /** This is needed to render the order form */
@@ -124,12 +123,12 @@ describe('AddDrugOrderWorkspace drug search', () => {
124
123
 
125
124
  expect(hookResult.current.orders).toEqual([
126
125
  expect.objectContaining({
127
- ...getTemplateOrderBasketItem(mockDrugSearchResultApiData[2]),
126
+ ...getTemplateOrderBasketItem(mockDrugSearchResultApiData[2], null),
128
127
  isOrderIncomplete: true,
129
128
  startDate: expect.any(Date),
130
129
  }),
131
130
  ]);
132
- expect(mockLaunchWorkspace).toHaveBeenCalledWith('order-basket');
131
+ expect(mockCloseWorkspace).toHaveBeenCalled();
133
132
  });
134
133
 
135
134
  test('can open the drug form ', async () => {
@@ -172,6 +171,7 @@ describe('AddDrugOrderWorkspace drug search', () => {
172
171
  expect.objectContaining({
173
172
  ...getTemplateOrderBasketItem(
174
173
  mockDrugSearchResultApiData[0],
174
+ null,
175
175
  undefined,
176
176
  mockDrugOrderTemplateApiData[mockDrugSearchResultApiData[0].uuid][0],
177
177
  ),
@@ -188,15 +188,23 @@ describe('AddDrugOrderWorkspace drug search', () => {
188
188
  function renderAddDrugOrderWorkspace() {
189
189
  render(
190
190
  <AddDrugOrderWorkspace
191
- order={undefined as any}
192
- closeWorkspace={({ onWorkspaceClose }) => onWorkspaceClose()}
193
- closeWorkspaceWithSavedChanges={({ onWorkspaceClose }) => onWorkspaceClose()}
194
- promptBeforeClosing={() => false}
195
- patientUuid={mockPatient.id}
196
- patient={mockPatient}
197
- setTitle={jest.fn()}
198
- visitContext={null}
199
- mutateVisitContext={null}
191
+ workspaceProps={{
192
+ order: undefined as any,
193
+ }}
194
+ groupProps={{
195
+ patientUuid: mockPatient.id,
196
+ patient: mockPatient,
197
+ visitContext: null,
198
+ mutateVisitContext: null,
199
+ }}
200
+ workspaceName={''}
201
+ launchChildWorkspace={jest.fn()}
202
+ closeWorkspace={mockCloseWorkspace}
203
+ windowProps={{
204
+ encounterUuid: '',
205
+ }}
206
+ windowName={''}
207
+ isRootWorkspace={false}
200
208
  />,
201
209
  );
202
210
  }
@@ -1,129 +1,36 @@
1
- import React, { type ComponentProps, useCallback, useState } from 'react';
2
- import { useTranslation } from 'react-i18next';
3
- import { Button } from '@carbon/react';
4
- import { ArrowLeftIcon, launchWorkspace, useLayoutType } from '@openmrs/esm-framework';
5
- import { type DefaultPatientWorkspaceProps, useOrderBasket } from '@openmrs/esm-patient-common-lib';
6
- import { prepMedicationOrderPostData } from '../api/api';
7
- import { ordersEqual } from './drug-search/helpers';
8
- import type { DrugOrderBasketItem } from '../types';
9
- import { DrugOrderForm } from './drug-order-form.component';
10
- import DrugSearch from './drug-search/drug-search.component';
11
- import styles from './add-drug-order.scss';
1
+ import React from 'react';
2
+ import {
3
+ type DrugOrderBasketItem,
4
+ type OrderBasketWindowProps,
5
+ type PatientWorkspace2DefinitionProps,
6
+ } from '@openmrs/esm-patient-common-lib';
7
+ import AddDrugOrder from './add-drug-order.component';
12
8
 
13
- export interface AddDrugOrderWorkspaceAdditionalProps {
9
+ export interface AddDrugOrderWorkspaceProps {
14
10
  order: DrugOrderBasketItem;
15
11
  }
16
12
 
17
- export interface AddDrugOrderWorkspace extends DefaultPatientWorkspaceProps, AddDrugOrderWorkspaceAdditionalProps {}
18
-
19
13
  /**
20
- * This workspace displays the drug order form. On form submission, it saves the drug order
21
- * to the (frontend) order basket. For a form that submits the drug order directly on submit,
14
+ * This workspace displays the drug order form for adding or editing a drug order.
15
+ * On form submission, it saves the drug order to the (frontend) order basket.
16
+ * For a form that submits the drug order directly on submit,
22
17
  * see fill-prescription-form.workspace.tsx
18
+ *
19
+ * This workspace must only be used within the patient chart.
20
+ * @see exported-add-drug-order.workspace.tsx
23
21
  */
24
22
  export default function AddDrugOrderWorkspace({
25
- order: initialOrder,
23
+ workspaceProps: { order: initialOrder },
24
+ groupProps: { patient, patientUuid, visitContext },
26
25
  closeWorkspace,
27
- closeWorkspaceWithSavedChanges,
28
- promptBeforeClosing,
29
- patient,
30
- }: AddDrugOrderWorkspace) {
31
- const { t } = useTranslation();
32
- const isTablet = useLayoutType() === 'tablet';
33
- const { orders, setOrders } = useOrderBasket<DrugOrderBasketItem>(
34
- patient,
35
- 'medications',
36
- prepMedicationOrderPostData,
37
- );
38
- const [currentOrder, setCurrentOrder] = useState(initialOrder);
39
-
40
- const cancelDrugOrder = useCallback(() => {
41
- closeWorkspace({
42
- onWorkspaceClose: () => launchWorkspace('order-basket'),
43
- closeWorkspaceGroup: false,
44
- });
45
- }, [closeWorkspace]);
46
-
47
- const openOrderForm = useCallback(
48
- (searchResult: DrugOrderBasketItem) => {
49
- const existingOrder = orders.find((order) => ordersEqual(order, searchResult));
50
- if (existingOrder) {
51
- setCurrentOrder(existingOrder);
52
- } else {
53
- setCurrentOrder(searchResult);
54
- }
55
- },
56
- [orders],
26
+ }: PatientWorkspace2DefinitionProps<AddDrugOrderWorkspaceProps, OrderBasketWindowProps>) {
27
+ return (
28
+ <AddDrugOrder
29
+ initialOrder={initialOrder}
30
+ patient={patient}
31
+ patientUuid={patientUuid}
32
+ visitContext={visitContext}
33
+ closeWorkspace={closeWorkspace}
34
+ />
57
35
  );
58
-
59
- const saveDrugOrder = useCallback(
60
- async (finalizedOrder: DrugOrderBasketItem) => {
61
- const newOrders = [...orders];
62
- const existingOrder = orders.find((order) => ordersEqual(order, finalizedOrder));
63
- if (existingOrder) {
64
- newOrders[orders.indexOf(existingOrder)] = {
65
- ...finalizedOrder,
66
- // Incomplete orders should be marked completed on saving the form
67
- isOrderIncomplete: false,
68
- };
69
- } else {
70
- newOrders.push(finalizedOrder);
71
- }
72
- setOrders(newOrders);
73
- closeWorkspaceWithSavedChanges({
74
- onWorkspaceClose: () => launchWorkspace('order-basket'),
75
- });
76
- },
77
- [orders, setOrders, closeWorkspaceWithSavedChanges],
78
- );
79
-
80
- if (!currentOrder) {
81
- return (
82
- <>
83
- {!isTablet && (
84
- <div className={styles.backButton}>
85
- <Button
86
- iconDescription="Return to order basket"
87
- kind="ghost"
88
- onClick={cancelDrugOrder}
89
- renderIcon={(props: ComponentProps<typeof ArrowLeftIcon>) => <ArrowLeftIcon size={24} {...props} />}
90
- size="sm"
91
- >
92
- <span>{t('backToOrderBasket', 'Back to order basket')}</span>
93
- </Button>
94
- </div>
95
- )}
96
- <DrugSearch patient={patient} openOrderForm={openOrderForm} />
97
- </>
98
- );
99
- } else {
100
- return (
101
- <div className={styles.container}>
102
- {!isTablet && (
103
- <div className={styles.backButton}>
104
- <Button
105
- iconDescription="Return to order basket"
106
- kind="ghost"
107
- onClick={cancelDrugOrder}
108
- renderIcon={(props: ComponentProps<typeof ArrowLeftIcon>) => <ArrowLeftIcon size={24} {...props} />}
109
- size="sm"
110
- >
111
- <span>{t('backToOrderBasket', 'Back to order basket')}</span>
112
- </Button>
113
- </div>
114
- )}
115
- <DrugOrderForm
116
- patientUuid={patient.id}
117
- initialOrderBasketItem={currentOrder}
118
- patient={patient}
119
- onSave={saveDrugOrder}
120
- saveButtonText={t('saveOrder', 'Save order')}
121
- onCancel={cancelDrugOrder}
122
- promptBeforeClosing={promptBeforeClosing}
123
- allowSelectingPrescribingClinician={false}
124
- allowSelectingDrug={false} // In this workspace, the drug is selected in <DrugSearch>, not in <DrugOrderForm>
125
- />
126
- </div>
127
- );
128
- }
129
36
  }