@openmrs/esm-stock-management-app 1.0.1-pre.788 → 1.0.1-pre.790

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 (44) hide show
  1. package/dist/493.js +1 -1
  2. package/dist/493.js.map +1 -1
  3. package/dist/880.js +1 -0
  4. package/dist/880.js.map +1 -0
  5. package/dist/942.js +1 -0
  6. package/dist/942.js.map +1 -0
  7. package/dist/main.js +1 -1
  8. package/dist/main.js.map +1 -1
  9. package/dist/openmrs-esm-stock-management-app.js +1 -1
  10. package/dist/openmrs-esm-stock-management-app.js.buildmanifest.json +41 -41
  11. package/dist/routes.json +1 -1
  12. package/package.json +1 -1
  13. package/src/index.ts +15 -21
  14. package/src/routes.json +5 -4
  15. package/src/stock-operations/add-stock-operation/stock-operations-expanded-row/stock-operation-expanded-row.component.tsx +32 -3
  16. package/src/stock-operations/edit-stock-operation/edit-stock-operation-action-menu.component.tsx +2 -2
  17. package/src/stock-operations/stock-operation-actions.component.tsx +81 -0
  18. package/src/stock-operations/stock-operation-links.component.tsx +82 -0
  19. package/src/stock-operations/stock-operation-reference.component.tsx +2 -2
  20. package/src/stock-operations/stock-operation-types-selector/stock-operation-types-selector.component.tsx +2 -2
  21. package/src/stock-operations/stock-operation.utils.tsx +8 -13
  22. package/src/stock-operations/stock-operations-dialog/stock-operations-issue-stock-button.component.tsx +2 -2
  23. package/src/stock-operations/stock-operations-forms/step1.test.tsx +158 -17
  24. package/src/stock-operations/stock-operations-forms/step2.test.tsx +53 -8
  25. package/src/stock-operations/stock-operations-forms/step3.test.tsx +63 -10
  26. package/src/stock-operations/stock-operations-forms/steps/base-operation-details-form-step.tsx +11 -9
  27. package/src/stock-operations/stock-operations-forms/steps/received-items.component.tsx +8 -7
  28. package/src/stock-operations/stock-operations-forms/steps/stock-operation-item-cell.component.tsx +8 -9
  29. package/src/stock-operations/stock-operations-forms/steps/stock-operation-items-form-step.component.tsx +21 -46
  30. package/src/stock-operations/stock-operations-forms/steps/stock-operation-items-form-step.scc.scss +4 -18
  31. package/src/stock-operations/stock-operations-forms/steps/stock-operation-submission-form-step.component.tsx +20 -15
  32. package/src/stock-operations/stock-operations-forms/stock-issue-form-initializer-with-related-requisition-operation.component.tsx +20 -3
  33. package/src/stock-operations/stock-operations-forms/stock-item-form/stock-item-form.workspace.tsx +3 -5
  34. package/src/stock-operations/stock-operations-forms/stock-operation-form.component.tsx +99 -57
  35. package/src/stock-operations/stock-operations-forms/stock-operation-form.scss +5 -24
  36. package/src/stock-operations/stock-operations-forms/stock-operation-related-link.component.tsx +2 -2
  37. package/src/stock-operations/stock-operations-forms/stock-operation-stepper/stepper.scss +14 -11
  38. package/src/stock-operations/stock-operations-forms/stock-operation-stepper/stock-operation-stepper.component.tsx +2 -6
  39. package/src/stock-operations/stock-operations-table.scss +20 -0
  40. package/dist/155.js +0 -1
  41. package/dist/155.js.map +0 -1
  42. package/dist/922.js +0 -1
  43. package/dist/922.js.map +0 -1
  44. package/src/stock-operations/stock-operations-forms/stock-operation-form-header.component.tsx +0 -166
@@ -14,6 +14,7 @@ import {
14
14
  Button,
15
15
  } from '@carbon/react';
16
16
  import styles from './stock-operation-items-form-step.scc.scss';
17
+ import { ArrowLeft } from '@carbon/react/icons';
17
18
 
18
19
  const formatDate = (date: Date | string | null) => {
19
20
  if (!date) return ' ';
@@ -68,13 +69,6 @@ const ReceivedItems: React.FC<ReceivedItemsProps> = ({ stockOperation, onPreviou
68
69
  <div className={styles.tableContainer}>
69
70
  <div className={styles.heading}>
70
71
  <h4>{headerTitle}</h4>
71
- <div className={styles.btnSet}>
72
- {typeof onPrevious === 'function' && (
73
- <Button kind="secondary" onClick={onPrevious}>
74
- {t('previous', 'Previous')}
75
- </Button>
76
- )}
77
- </div>
78
72
  </div>
79
73
  <DataTable rows={rows} headers={headers}>
80
74
  {({ rows, headers, getHeaderProps, getTableProps, getRowProps }) => (
@@ -102,6 +96,13 @@ const ReceivedItems: React.FC<ReceivedItemsProps> = ({ stockOperation, onPreviou
102
96
  </TableContainer>
103
97
  )}
104
98
  </DataTable>
99
+ <div className={styles.btnSet}>
100
+ {typeof onPrevious === 'function' && (
101
+ <Button kind="secondary" onClick={onPrevious} renderIcon={ArrowLeft} hasIconOnly data-testid="previous-btn">
102
+ {/* {t('previous', 'Previous')} */}
103
+ </Button>
104
+ )}
105
+ </div>
105
106
  </div>
106
107
  </div>
107
108
  );
@@ -1,12 +1,10 @@
1
- import React, { useCallback, useEffect, useMemo } from 'react';
2
- import { useStockItem } from '../../../stock-items/stock-items.resource';
3
- import { useTranslation } from 'react-i18next';
4
- import { showSnackbar, useConfig } from '@openmrs/esm-framework';
5
1
  import { InlineLoading } from '@carbon/react';
6
- import { StockItemDTO } from '../../../core/api/types/stockItem/StockItem';
7
- import { URL_STOCK_ITEM } from '../../../constants';
8
- import { Link } from 'react-router-dom';
2
+ import { ConfigurableLink, showSnackbar, useConfig } from '@openmrs/esm-framework';
3
+ import React, { useEffect, useMemo } from 'react';
4
+ import { useTranslation } from 'react-i18next';
9
5
  import { ConfigObject } from '../../../config-schema';
6
+ import { URL_STOCK_ITEM } from '../../../constants';
7
+ import { useStockItem } from '../../../stock-items/stock-items.resource';
10
8
 
11
9
  type StockOperationItemCellProps = {
12
10
  stockItemUuid: string;
@@ -16,6 +14,7 @@ const StockOperationItemCell: React.FC<StockOperationItemCellProps> = ({ stockIt
16
14
  const { isLoading, error, item } = useStockItem(stockItemUuid);
17
15
  const { t } = useTranslation();
18
16
  const { useItemCommonNameAsDisplay } = useConfig<ConfigObject>();
17
+
19
18
  const commonName = useMemo(() => {
20
19
  if (!useItemCommonNameAsDisplay) return;
21
20
  const drugName = item?.drugName ? `(Drug name: ${item.drugName})` : undefined;
@@ -41,9 +40,9 @@ const StockOperationItemCell: React.FC<StockOperationItemCellProps> = ({ stockIt
41
40
  if (error) return <>--</>;
42
41
 
43
42
  return (
44
- <Link target={'_blank'} to={URL_STOCK_ITEM(stockItemUuid)}>
43
+ <ConfigurableLink target={'_blank'} to={window.spaBase + URL_STOCK_ITEM(stockItemUuid)}>
45
44
  {useItemCommonNameAsDisplay ? commonName : drugName}
46
- </Link>
45
+ </ConfigurableLink>
47
46
  );
48
47
  };
49
48
 
@@ -9,8 +9,7 @@ import {
9
9
  TableHeader,
10
10
  TableRow,
11
11
  } from '@carbon/react';
12
- import { Edit, TrashCan } from '@carbon/react/icons';
13
- import { isDesktop, launchWorkspace } from '@openmrs/esm-framework';
12
+ import { ArrowLeft, ArrowRight, Edit, TrashCan } from '@carbon/react/icons';
14
13
  import React, { useCallback, useMemo } from 'react';
15
14
  import { useFormContext } from 'react-hook-form';
16
15
  import { useTranslation } from 'react-i18next';
@@ -20,7 +19,6 @@ import { getStockOperationUniqueId } from '../../stock-operation.utils';
20
19
  import { BaseStockOperationItemFormData, StockOperationItemDtoSchema } from '../../validation-schema';
21
20
  import useOperationTypePermisions from '../hooks/useOperationTypePermisions';
22
21
  import StockItemSearch from '../input-components/stock-item-search.component';
23
- import { StockItemFormProps } from '../stock-item-form/stock-item-form.workspace';
24
22
  import QuantityUomCell from './quantity-uom-cell.component';
25
23
  import StockAvailability from './stock-availability-cell.component';
26
24
  import StockOperationItemBatchNoCell from './stock-operation-item-batch-no-cell.component';
@@ -33,12 +31,14 @@ type StockOperationItemsFormStepProps = {
33
31
  stockOperationType: StockOperationType;
34
32
  onNext?: () => void;
35
33
  onPrevious?: () => void;
34
+ onLaunchItemsForm?: (stockOperationItem?: BaseStockOperationItemFormData) => void;
36
35
  };
37
36
  const StockOperationItemsFormStep: React.FC<StockOperationItemsFormStepProps> = ({
38
37
  stockOperationType,
39
38
  stockOperation,
40
39
  onNext,
41
40
  onPrevious,
41
+ onLaunchItemsForm,
42
42
  }) => {
43
43
  const { t } = useTranslation();
44
44
  const operationTypePermision = useOperationTypePermisions(stockOperationType);
@@ -103,29 +103,6 @@ const StockOperationItemsFormStep: React.FC<StockOperationItemsFormStepProps> =
103
103
  ];
104
104
  }, [operationTypePermision, t]);
105
105
 
106
- const handleLaunchStockItem = useCallback(
107
- (stockOperationItem?: BaseStockOperationItemFormData) => {
108
- launchWorkspace('stock-operation-stock-items-form', {
109
- workspaceTitle: t('stockItem', 'StockItem'),
110
- ...({
111
- stockOperationType,
112
- stockOperationItem,
113
- onSave: (data) => {
114
- const items = (form.getValues('stockOperationItems') ?? []) as Array<BaseStockOperationItemFormData>;
115
- const index = items.findIndex((i) => i.uuid === data.uuid);
116
- if (index === -1) {
117
- items.push(data);
118
- } else {
119
- items[index] = data;
120
- }
121
- form.setValue('stockOperationItems', items as any);
122
- },
123
- } as StockItemFormProps),
124
- });
125
- },
126
- [stockOperationType, t, form],
127
- );
128
-
129
106
  const handleDeleteStockOperationItem = useCallback(
130
107
  (item: BaseStockOperationItemFormData) => {
131
108
  form.setValue('stockOperationItems', observableOperationItems.filter((i) => i.uuid !== item.uuid) as any);
@@ -183,7 +160,7 @@ const StockOperationItemsFormStep: React.FC<StockOperationItemsFormStepProps> =
183
160
  kind="ghost"
184
161
  renderIcon={Edit}
185
162
  onClick={() => {
186
- handleLaunchStockItem(item);
163
+ onLaunchItemsForm?.(item);
187
164
  }}
188
165
  />
189
166
  <Button
@@ -194,14 +171,14 @@ const StockOperationItemsFormStep: React.FC<StockOperationItemsFormStepProps> =
194
171
  kind="ghost"
195
172
  renderIcon={TrashCan}
196
173
  onClick={() => {
197
- handleDeleteStockOperationItem(item);
174
+ onLaunchItemsForm?.(item);
198
175
  }}
199
176
  />
200
177
  </>
201
178
  ),
202
179
  };
203
180
  });
204
- }, [observableOperationItems, handleLaunchStockItem, handleDeleteStockOperationItem, stockOperationType]);
181
+ }, [observableOperationItems, onLaunchItemsForm, stockOperationType]);
205
182
 
206
183
  const headerTitle = t('stockoperationItems', 'Stock operation items');
207
184
 
@@ -210,22 +187,10 @@ const StockOperationItemsFormStep: React.FC<StockOperationItemsFormStepProps> =
210
187
  <div className={styles.tableContainer}>
211
188
  <div className={styles.heading}>
212
189
  <h4>{headerTitle}</h4>
213
- <div className={styles.btnSet}>
214
- {typeof onPrevious === 'function' && (
215
- <Button kind="secondary" onClick={onPrevious}>
216
- {t('previous', 'Previous')}
217
- </Button>
218
- )}
219
- {typeof onNext === 'function' && (
220
- <Button kind="primary" onClick={onNext}>
221
- {t('next', 'Next')}
222
- </Button>
223
- )}
224
- </div>
225
190
  </div>
226
191
  <StockItemSearch
227
192
  onSelectedItem={(stockItem) =>
228
- handleLaunchStockItem({
193
+ onLaunchItemsForm({
229
194
  uuid: `new-item-${getStockOperationUniqueId()}`,
230
195
  stockItemUuid: stockItem.uuid,
231
196
  hasExpiration: stockItem.hasExpiration,
@@ -233,7 +198,6 @@ const StockOperationItemsFormStep: React.FC<StockOperationItemsFormStepProps> =
233
198
  })
234
199
  }
235
200
  />
236
-
237
201
  <DataTable
238
202
  rows={tableRows ?? []}
239
203
  headers={headers}
@@ -245,13 +209,12 @@ const StockOperationItemsFormStep: React.FC<StockOperationItemsFormStepProps> =
245
209
  <Table {...getTableProps()}>
246
210
  <TableHead>
247
211
  <TableRow>
248
- {headers.map((header: any) => (
212
+ {headers.map((header) => (
249
213
  <TableHeader
250
214
  {...getHeaderProps({
251
215
  header,
252
216
  isSortable: false,
253
217
  })}
254
- className={isDesktop ? styles.desktopHeader : styles.tabletHeader}
255
218
  style={header?.styles}
256
219
  key={`${header.key}`}
257
220
  >
@@ -272,7 +235,19 @@ const StockOperationItemsFormStep: React.FC<StockOperationItemsFormStepProps> =
272
235
  </Table>
273
236
  </TableContainer>
274
237
  )}
275
- ></DataTable>
238
+ />
239
+ <div className={styles.btnSet}>
240
+ {typeof onNext === 'function' && (
241
+ <Button kind="primary" onClick={onNext} renderIcon={ArrowRight}>
242
+ {t('next', 'Next')}
243
+ </Button>
244
+ )}
245
+ {typeof onPrevious === 'function' && (
246
+ <Button kind="secondary" onClick={onPrevious} renderIcon={ArrowLeft} hasIconOnly data-testid="previous-btn">
247
+ {/* {t('previous', 'Previous')} */}
248
+ </Button>
249
+ )}
250
+ </div>
276
251
  </div>
277
252
  </div>
278
253
  );
@@ -3,23 +3,6 @@
3
3
  @use '@carbon/type';
4
4
  @import '~@openmrs/esm-styleguide/src/vars';
5
5
 
6
- .tableContainer {
7
- :global(.cds--data-table-content) {
8
- height: calc(100vh - 150px);
9
- }
10
- }
11
-
12
- .tableHeader {
13
- width: 3% !important;
14
- }
15
-
16
- .tableBody {
17
- display: flex;
18
- flex-direction: row;
19
- width: 3% !important;
20
- gap: 8px;
21
- }
22
-
23
6
  .dataTable {
24
7
  width: 100%;
25
8
  }
@@ -57,8 +40,11 @@
57
40
  }
58
41
 
59
42
  .btnSet {
43
+ width: 100%;
44
+ flex: 1;
60
45
  display: flex;
61
- flex-direction: row;
46
+ flex-direction: row-reverse;
62
47
  gap: layout.$spacing-03;
63
48
  align-items: center;
49
+ margin-top: layout.$spacing-03;
64
50
  }
@@ -1,5 +1,5 @@
1
1
  import { Button, Column, InlineLoading, RadioButton, RadioButtonGroup, Stack } from '@carbon/react';
2
- import { Departure, ListChecked, Save, SendFilled } from '@carbon/react/icons';
2
+ import { ArrowLeft, ArrowRight, Departure, ListChecked, Save, SendFilled } from '@carbon/react/icons';
3
3
  import { restBaseUrl, showSnackbar } from '@openmrs/esm-framework';
4
4
  import React, { useCallback, useMemo, useState } from 'react';
5
5
  import { useFormContext } from 'react-hook-form';
@@ -21,12 +21,14 @@ type StockOperationSubmissionFormStepProps = {
21
21
  stockOperation?: StockOperationDTO;
22
22
  stockOperationType: StockOperationType;
23
23
  onNext?: () => void;
24
+ dismissWorkspace?: () => void;
24
25
  };
25
26
  const StockOperationSubmissionFormStep: React.FC<StockOperationSubmissionFormStepProps> = ({
26
27
  onPrevious,
27
28
  stockOperationType,
28
29
  stockOperation,
29
30
  onNext,
31
+ dismissWorkspace,
30
32
  }) => {
31
33
  const { t } = useTranslation();
32
34
  const operationTypePermision = useOperationTypePermisions(stockOperationType);
@@ -95,6 +97,7 @@ const StockOperationSubmissionFormStep: React.FC<StockOperationSubmissionFormSte
95
97
  : createStockOperation(payload as any));
96
98
  result = resp.data; // Store the response data
97
99
  handleMutate(`${restBaseUrl}/stockmanagement/stockoperation`);
100
+ dismissWorkspace?.();
98
101
  showSnackbar({
99
102
  isLowContrast: true,
100
103
  title: stockOperation
@@ -117,7 +120,7 @@ const StockOperationSubmissionFormStep: React.FC<StockOperationSubmissionFormSte
117
120
  }
118
121
  })(); // Call handleSubmit to trigger validation and submission
119
122
  return result; // Return the result after handleSubmit completes
120
- }, [form, stockOperation, t, approvalRequired, isStockIssueOperation]);
123
+ }, [form, stockOperation, t, approvalRequired, isStockIssueOperation, dismissWorkspace]);
121
124
 
122
125
  const handleComplete = useCallback(() => {
123
126
  handleSave().then((operation) => {
@@ -143,18 +146,6 @@ const StockOperationSubmissionFormStep: React.FC<StockOperationSubmissionFormSte
143
146
  ? t('submitAndDispatch', 'Submit/Dispatch')
144
147
  : t('submitAndComplete', 'Submit/Complete')}
145
148
  </h4>
146
- <div className={styles.btnSet}>
147
- {typeof onPrevious === 'function' && (
148
- <Button kind="secondary" onClick={onPrevious}>
149
- Previous
150
- </Button>
151
- )}
152
- {typeof onNext === 'function' && (
153
- <Button kind="primary" onClick={onNext}>
154
- Next
155
- </Button>
156
- )}
157
- </div>
158
149
  </div>
159
150
 
160
151
  <Column>
@@ -163,7 +154,7 @@ const StockOperationSubmissionFormStep: React.FC<StockOperationSubmissionFormSte
163
154
  legendText={t('doesThisTransactionRequireApproval', 'Does the transaction require approval ?')}
164
155
  onChange={handleRadioButtonChange}
165
156
  readOnly={!editable}
166
- valueSelected={approvalRequired === true}
157
+ valueSelected={approvalRequired === true ? true : approvalRequired === false ? false : null}
167
158
  >
168
159
  <RadioButton value={true} id="rbgApprovelRequired-true" labelText={t('yes', 'Yes')} />
169
160
  <RadioButton value={false} id="rbgApprovelRequired-false" labelText={t('no', 'No')} />
@@ -176,6 +167,7 @@ const StockOperationSubmissionFormStep: React.FC<StockOperationSubmissionFormSte
176
167
  {!operationTypePermision.requiresDispatchAcknowledgement && !approvalRequired && (
177
168
  <Button
178
169
  name="complete"
170
+ data-testid="complete-button"
179
171
  type="button"
180
172
  style={{ margin: '4px' }}
181
173
  className="submitButton"
@@ -191,6 +183,7 @@ const StockOperationSubmissionFormStep: React.FC<StockOperationSubmissionFormSte
191
183
  name="dispatch"
192
184
  type="button"
193
185
  style={{ margin: '4px' }}
186
+ data-testid="dipatch-button"
194
187
  className="submitButton"
195
188
  kind="primary"
196
189
  onClick={handleDispatch}
@@ -236,6 +229,18 @@ const StockOperationSubmissionFormStep: React.FC<StockOperationSubmissionFormSte
236
229
  </Button>
237
230
  </Column>
238
231
  )}
232
+ <div className={styles.btnSet}>
233
+ {typeof onNext === 'function' && (
234
+ <Button kind="tertiary" onClick={onNext} renderIcon={ArrowRight}>
235
+ {t('next', 'Next')}
236
+ </Button>
237
+ )}
238
+ {typeof onPrevious === 'function' && (
239
+ <Button kind="tertiary" onClick={onPrevious} renderIcon={ArrowLeft} hasIconOnly data-testid="previous-btn">
240
+ {/* {t('previous', 'Previous')} */}
241
+ </Button>
242
+ )}
243
+ </div>
239
244
  </Stack>
240
245
  );
241
246
  };
@@ -1,10 +1,12 @@
1
- import { showSnackbar } from '@openmrs/esm-framework';
1
+ import { parseDate, showSnackbar } from '@openmrs/esm-framework';
2
2
  import React, { useEffect, useMemo } from 'react';
3
3
  import { useFormContext } from 'react-hook-form';
4
4
  import { useTranslation } from 'react-i18next';
5
5
  import { OperationType, StockOperationType } from '../../core/api/types/stockOperation/StockOperationType';
6
- import { useStockOperation } from '../stock-operations.resource';
6
+ import { useStockOperationAndItems } from '../stock-operations.resource';
7
7
  import { getStockOperationItemFormSchema, StockOperationItemDtoSchema } from '../validation-schema';
8
+ import { pick } from '../../core/utils/utils';
9
+ import { Loading } from '@carbon/react';
8
10
 
9
11
  type StockIssueFormInitializerWithRelatedRequisitionOperationProps = {
10
12
  stockRequisitionUuid: string;
@@ -16,11 +18,12 @@ const StockIssueFormInitializerWithRelatedRequisitionOperation: React.FC<
16
18
  > = ({ stockRequisitionUuid, stockOperationType }) => {
17
19
  const form = useFormContext<StockOperationItemDtoSchema>();
18
20
  const { t } = useTranslation();
19
- const { error, items: stockOperation, isLoading } = useStockOperation(stockRequisitionUuid);
21
+ const { error, items: stockOperation, isLoading } = useStockOperationAndItems(stockRequisitionUuid);
20
22
  const { setValue } = form;
21
23
  const stockOperationItemFormSchema = useMemo(() => {
22
24
  return getStockOperationItemFormSchema(OperationType.STOCK_ISSUE_OPERATION_TYPE);
23
25
  }, []);
26
+
24
27
  const items = form.watch('stockOperationItems');
25
28
  // initialize form values with requisition values for Stock issue operation type
26
29
  useEffect(() => {
@@ -30,6 +33,17 @@ const StockIssueFormInitializerWithRelatedRequisitionOperation: React.FC<
30
33
  setValue('destinationUuid', stockOperation.destinationUuid);
31
34
  setValue('requisitionStockOperationUuid', stockRequisitionUuid);
32
35
  setValue('operationTypeUuid', stockOperationType.uuid);
36
+ setValue('responsiblePersonUuid', stockOperation.responsiblePersonUuid);
37
+ setValue('responsiblePersonOther', stockOperation.responsiblePersonOther);
38
+ setValue(
39
+ 'stockOperationItems',
40
+ (stockOperation?.stockOperationItems?.map((item) =>
41
+ pick(
42
+ { ...item, expiration: item.expiration ? parseDate(item.expiration as any) : undefined },
43
+ stockOperationItemFormSchema.keyof().options,
44
+ ),
45
+ ) ?? []) as any,
46
+ );
33
47
  }
34
48
  }, [stockOperation, stockOperationItemFormSchema, setValue, items, stockOperationType, stockRequisitionUuid]);
35
49
 
@@ -49,6 +63,9 @@ const StockIssueFormInitializerWithRelatedRequisitionOperation: React.FC<
49
63
  });
50
64
  }
51
65
  }, [stockRequisitionUuid, error, t]);
66
+
67
+ if (isLoading) return <Loading active description="Loading" />;
68
+
52
69
  return <React.Fragment />;
53
70
  };
54
71
 
@@ -30,10 +30,10 @@ export interface StockItemFormProps {
30
30
  stockOperationType: StockOperationType;
31
31
  stockOperationItem: BaseStockOperationItemFormData;
32
32
  onSave?: (data: BaseStockOperationItemFormData) => void;
33
+ onBack?: () => void;
33
34
  }
34
35
 
35
- interface Props extends DefaultWorkspaceProps, StockItemFormProps {}
36
- const StockItemForm: React.FC<Props> = ({ closeWorkspace, stockOperationType, stockOperationItem, onSave }) => {
36
+ const StockItemForm: React.FC<StockItemFormProps> = ({ stockOperationType, stockOperationItem, onSave, onBack }) => {
37
37
  const operationType = useMemo(() => {
38
38
  return operationFromString(stockOperationType.operationType);
39
39
  }, [stockOperationType]);
@@ -65,8 +65,6 @@ const StockItemForm: React.FC<Props> = ({ closeWorkspace, stockOperationType, st
65
65
 
66
66
  const onSubmit = (data: z.infer<typeof formschema>) => {
67
67
  onSave?.(data);
68
- closeWorkspace();
69
- // Implementation of adding or updating itsms in items table
70
68
  };
71
69
  return (
72
70
  <Form onSubmit={form.handleSubmit(onSubmit)} className={styles.form}>
@@ -197,7 +195,7 @@ const StockItemForm: React.FC<Props> = ({ closeWorkspace, stockOperationType, st
197
195
  </Stack>
198
196
 
199
197
  <ButtonSet className={styles.buttonSet}>
200
- <Button className={styles.button} kind="secondary" onClick={closeWorkspace}>
198
+ <Button className={styles.button} kind="secondary" onClick={onBack}>
201
199
  {t('discard', 'Discard')}
202
200
  </Button>
203
201
  <Button className={styles.button} kind="primary" type="submit" disabled={form.formState.isSubmitting}>