@openmrs/esm-patient-tests-app 11.3.1-pre.9388 → 11.3.1-pre.9398

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.
@@ -11,6 +11,7 @@ import {
11
11
  useConfig,
12
12
  MaybeIcon,
13
13
  launchWorkspace,
14
+ useWorkspaces,
14
15
  type Visit,
15
16
  } from '@openmrs/esm-framework';
16
17
  import { type OrderBasketItem, useOrderBasket, useOrderType } from '@openmrs/esm-patient-common-lib';
@@ -53,6 +54,11 @@ const LabOrderBasketPanelExtension: React.FC<OrderBasketSlotProps> = ({ patient
53
54
  );
54
55
  };
55
56
 
57
+ export const WORKSPACES = {
58
+ TEST_RESULTS_FORM: 'test-results-form-workspace',
59
+ ORDER_BASKET: 'order-basket',
60
+ };
61
+
56
62
  type OrderTypeConfig = ConfigObject['additionalTestOrderTypes'][0];
57
63
 
58
64
  interface LabOrderBasketPanelProps extends OrderTypeConfig {
@@ -61,9 +67,14 @@ interface LabOrderBasketPanelProps extends OrderTypeConfig {
61
67
 
62
68
  function LabOrderBasketPanel({ orderTypeUuid, label, icon, patient }: LabOrderBasketPanelProps) {
63
69
  const { t } = useTranslation();
70
+ type WorkSpaceType = (typeof WORKSPACES)[keyof typeof WORKSPACES];
64
71
  const isTablet = useLayoutType() === 'tablet';
65
72
  const { orderType, isLoadingOrderType } = useOrderType(orderTypeUuid);
66
-
73
+ const { workspaces = [{ name: WORKSPACES.ORDER_BASKET, additionalProps: {} }] } = useWorkspaces();
74
+ const [prevWorkSpace, setPrevWorkSpace] = useState(workspaces[0]?.name);
75
+ const [prevOrder, setPrevOrder] = useState(
76
+ workspaces[0]?.name === WORKSPACES.TEST_RESULTS_FORM ? workspaces[0].additionalProps['order'] : null,
77
+ );
67
78
  const { orders, setOrders } = useOrderBasket<TestOrderBasketItem>(patient, orderTypeUuid, prepTestOrderPostData);
68
79
  const [isExpanded, setIsExpanded] = useState(orders.length > 0);
69
80
  const {
@@ -101,31 +112,40 @@ function LabOrderBasketPanel({ orderTypeUuid, label, icon, patient }: LabOrderBa
101
112
  discontinuedOrderBasketItems,
102
113
  };
103
114
  }, [orders]);
115
+ const isWorkSpaceType = useCallback((value: string): value is WorkSpaceType => {
116
+ return Object.values(WORKSPACES).includes(value as WorkSpaceType);
117
+ }, []);
104
118
 
105
119
  const openNewLabForm = useCallback(() => {
106
- closeWorkspace('order-basket', {
120
+ closeWorkspace(isWorkSpaceType(prevWorkSpace) ? prevWorkSpace : WORKSPACES.ORDER_BASKET, {
107
121
  ignoreChanges: true,
108
122
  onWorkspaceClose: () =>
109
123
  launchWorkspace('add-lab-order', {
110
124
  orderTypeUuid: orderTypeUuid,
125
+ prevWorkSpace: prevWorkSpace,
126
+ isWorkSpaceType: isWorkSpaceType,
127
+ prevOrder: prevOrder,
111
128
  }),
112
129
  closeWorkspaceGroup: false,
113
130
  });
114
- }, [orderTypeUuid]);
131
+ }, [orderTypeUuid, isWorkSpaceType, prevOrder, prevWorkSpace]);
115
132
 
116
133
  const openEditLabForm = useCallback(
117
134
  (order: OrderBasketItem) => {
118
- closeWorkspace('order-basket', {
135
+ closeWorkspace(isWorkSpaceType(prevWorkSpace) ? prevWorkSpace : WORKSPACES.ORDER_BASKET, {
119
136
  ignoreChanges: true,
120
137
  onWorkspaceClose: () =>
121
138
  launchWorkspace('add-lab-order', {
122
139
  order,
123
140
  orderTypeUuid: orderTypeUuid,
141
+ prevWorkSpace: prevWorkSpace,
142
+ isWorkSpaceType: isWorkSpaceType,
143
+ prevOrder: prevOrder,
124
144
  }),
125
145
  closeWorkspaceGroup: false,
126
146
  });
127
147
  },
128
- [orderTypeUuid],
148
+ [orderTypeUuid, isWorkSpaceType, prevOrder, prevWorkSpace],
129
149
  );
130
150
 
131
151
  const removeLabOrder = useCallback(
@@ -154,7 +174,13 @@ function LabOrderBasketPanel({ orderTypeUuid, label, icon, patient }: LabOrderBa
154
174
  <div className={styles.container}>
155
175
  <div className={styles.iconAndLabel}>
156
176
  <MaybeIcon icon={icon ? icon : 'omrs-icon-generic-order-type'} size={isTablet ? 40 : 24} />
157
- <h4 className={styles.heading}>{`${label ? t(label) : orderType?.display} (${orders.length})`}</h4>
177
+ <h4 className={styles.heading}>{`${
178
+ isWorkSpaceType(prevWorkSpace) && prevWorkSpace === WORKSPACES.ORDER_BASKET
179
+ ? label
180
+ ? t(label)
181
+ : orderType?.display
182
+ : t('tests', 'Tests')
183
+ } (${orders.length})`}</h4>
158
184
  </div>
159
185
  <div className={styles.buttonContainer}>
160
186
  <Button
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import userEvent from '@testing-library/user-event';
3
3
  import { screen, render } from '@testing-library/react';
4
4
  import { useOrderType } from '@openmrs/esm-patient-common-lib';
5
- import { getDefaultsFromConfigSchema, useConfig } from '@openmrs/esm-framework';
5
+ import { getDefaultsFromConfigSchema, useConfig, useWorkspaces, type WorkspacesInfo } from '@openmrs/esm-framework';
6
6
  import { type ConfigObject, configSchema } from '../../config-schema';
7
7
  import type { TestOrderBasketItem } from '../../types';
8
8
  import LabOrderBasketPanel from './lab-order-basket-panel.extension';
@@ -11,6 +11,8 @@ import { mockPatient } from 'tools';
11
11
  const mockUseOrderBasket = jest.fn();
12
12
  const mockUseConfig = jest.mocked(useConfig<ConfigObject>);
13
13
  const mockUseOrderType = jest.mocked(useOrderType);
14
+ const mockUseWorkSpaces = jest.mocked(useWorkspaces);
15
+ const mockWorkSpacesInfo = {} as WorkspacesInfo;
14
16
 
15
17
  jest.mock('@openmrs/esm-patient-common-lib', () => ({
16
18
  ...jest.requireActual('@openmrs/esm-patient-common-lib'),
@@ -45,6 +47,9 @@ const testProps = {
45
47
  };
46
48
 
47
49
  describe('LabOrderBasketPanel', () => {
50
+ beforeEach(() => {
51
+ mockUseWorkSpaces.mockReturnValue(mockWorkSpacesInfo);
52
+ });
48
53
  test('renders an empty state when no items are selected in the order basket', () => {
49
54
  mockUseOrderBasket.mockReturnValue({ orders: [] });
50
55
  render(<LabOrderBasketPanel {...testProps} />);
@@ -6,6 +6,7 @@
6
6
  "age": "Age",
7
7
  "back": "Back",
8
8
  "backToOrderBasket": "Back to order basket",
9
+ "backToTestResults": "Back to test Results",
9
10
  "backToTimeline": "Back to timeline",
10
11
  "cancel": "Cancel",
11
12
  "checkFilters": "Check the filters above",
@@ -80,6 +81,7 @@
80
81
  "returnToOrderBasket": "Return to order basket",
81
82
  "returnToTimeline": "Return to timeline",
82
83
  "saveOrder": "Save order",
84
+ "saveTest": "Save test",
83
85
  "scheduledDate": "Scheduled date",
84
86
  "scheduledDateRequired": "Scheduled date is required",
85
87
  "search": "Search",