@openmrs/esm-stock-management-app 1.0.1-pre.785 → 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.
- package/dist/493.js +1 -1
- package/dist/493.js.map +1 -1
- package/dist/880.js +1 -0
- package/dist/880.js.map +1 -0
- package/dist/942.js +1 -0
- package/dist/942.js.map +1 -0
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/openmrs-esm-stock-management-app.js +1 -1
- package/dist/openmrs-esm-stock-management-app.js.buildmanifest.json +41 -41
- package/dist/routes.json +1 -1
- package/package.json +1 -1
- package/src/config-schema.ts +6 -0
- package/src/index.ts +15 -21
- package/src/routes.json +5 -4
- package/src/stock-operations/add-stock-operation/stock-operations-expanded-row/stock-items-table.scss +34 -0
- package/src/stock-operations/add-stock-operation/stock-operations-expanded-row/stock-items-table.tsx +111 -0
- package/src/stock-operations/add-stock-operation/stock-operations-expanded-row/stock-operation-expanded-row.component.tsx +116 -0
- package/src/stock-operations/add-stock-operation/stock-operations-expanded-row/stock-operation-expanded-row.scss +31 -0
- package/src/stock-operations/add-stock-operation/stock-operations-expanded-row/stock-operations-status.tsx +45 -0
- package/src/stock-operations/edit-stock-operation/edit-stock-operation-action-menu.component.tsx +2 -2
- package/src/stock-operations/stock-operation-actions.component.tsx +81 -0
- package/src/stock-operations/stock-operation-links.component.tsx +82 -0
- package/src/stock-operations/stock-operation-reference.component.tsx +2 -2
- package/src/stock-operations/stock-operation-types-selector/stock-operation-types-selector.component.tsx +2 -2
- package/src/stock-operations/stock-operation.utils.tsx +8 -13
- package/src/stock-operations/stock-operations-dialog/stock-operations-issue-stock-button.component.tsx +2 -2
- package/src/stock-operations/stock-operations-forms/input-components/stock-item-search.component.tsx +30 -7
- package/src/stock-operations/stock-operations-forms/step1.test.tsx +158 -17
- package/src/stock-operations/stock-operations-forms/step2.test.tsx +59 -10
- package/src/stock-operations/stock-operations-forms/step3.test.tsx +63 -10
- package/src/stock-operations/stock-operations-forms/steps/base-operation-details-form-step.tsx +11 -9
- package/src/stock-operations/stock-operations-forms/steps/received-items.component.tsx +111 -0
- package/src/stock-operations/stock-operations-forms/steps/stock-operation-item-cell.component.tsx +20 -9
- package/src/stock-operations/stock-operations-forms/steps/stock-operation-items-form-step.component.tsx +21 -46
- package/src/stock-operations/stock-operations-forms/steps/stock-operation-items-form-step.scc.scss +4 -18
- package/src/stock-operations/stock-operations-forms/steps/stock-operation-submission-form-step.component.tsx +22 -10
- package/src/stock-operations/stock-operations-forms/stock-issue-form-initializer-with-related-requisition-operation.component.tsx +20 -3
- package/src/stock-operations/stock-operations-forms/stock-item-form/stock-item-form.workspace.tsx +19 -7
- package/src/stock-operations/stock-operations-forms/stock-operation-form.component.tsx +114 -67
- package/src/stock-operations/stock-operations-forms/stock-operation-form.scss +5 -24
- package/src/stock-operations/stock-operations-forms/stock-operation-related-link.component.tsx +2 -2
- package/src/stock-operations/stock-operations-forms/stock-operation-stepper/stepper.scss +14 -11
- package/src/stock-operations/stock-operations-forms/stock-operation-stepper/stock-operation-stepper.component.tsx +2 -6
- package/src/stock-operations/stock-operations-table.component.tsx +39 -38
- package/src/stock-operations/stock-operations-table.scss +20 -0
- package/dist/155.js +0 -1
- package/dist/155.js.map +0 -1
- package/dist/914.js +0 -1
- package/dist/914.js.map +0 -1
- package/src/stock-operations/received-items.component.tsx +0 -93
- package/src/stock-operations/stock-operations-forms/stock-operation-form-header.component.tsx +0 -166
@@ -0,0 +1,45 @@
|
|
1
|
+
import { formatDate, parseDate } from '@openmrs/esm-framework';
|
2
|
+
import React from 'react';
|
3
|
+
import { useTranslation } from 'react-i18next';
|
4
|
+
import styles from './stock-operation-expanded-row.scss';
|
5
|
+
|
6
|
+
type Props = {
|
7
|
+
status: string;
|
8
|
+
statusFilledDate: string;
|
9
|
+
statusFillerGivenName?: string;
|
10
|
+
statusFillerFamilyName?: string;
|
11
|
+
extraStatusinfo?: React.ReactNode;
|
12
|
+
};
|
13
|
+
|
14
|
+
const StockOpertationStatus: React.FC<Props> = ({
|
15
|
+
status,
|
16
|
+
statusFillerFamilyName,
|
17
|
+
statusFillerGivenName,
|
18
|
+
statusFilledDate,
|
19
|
+
extraStatusinfo,
|
20
|
+
}) => {
|
21
|
+
const { t } = useTranslation();
|
22
|
+
return (
|
23
|
+
<div>
|
24
|
+
<span className={styles.textHeading}>{status}:</span>
|
25
|
+
<div className={styles.statusDescriptions}>
|
26
|
+
<span className={styles.text}>
|
27
|
+
{formatDate(parseDate(statusFilledDate), {
|
28
|
+
time: true,
|
29
|
+
mode: 'standard',
|
30
|
+
})}
|
31
|
+
</span>
|
32
|
+
|
33
|
+
<span className={styles.text}>{t('by', 'By')}</span>
|
34
|
+
|
35
|
+
<span className={styles.text}>
|
36
|
+
{statusFillerFamilyName}
|
37
|
+
{statusFillerGivenName}
|
38
|
+
</span>
|
39
|
+
{extraStatusinfo}
|
40
|
+
</div>
|
41
|
+
</div>
|
42
|
+
);
|
43
|
+
};
|
44
|
+
|
45
|
+
export default StockOpertationStatus;
|
package/src/stock-operations/edit-stock-operation/edit-stock-operation-action-menu.component.tsx
CHANGED
@@ -4,7 +4,7 @@ import { showSnackbar } from '@openmrs/esm-framework';
|
|
4
4
|
import React, { useCallback, useEffect, useMemo } from 'react';
|
5
5
|
import { useTranslation } from 'react-i18next';
|
6
6
|
import { StockOperationDTO } from '../../core/api/types/stockOperation/StockOperationDTO';
|
7
|
-
import {
|
7
|
+
import { launchStockoperationAddOrEditWorkSpace } from '../stock-operation.utils';
|
8
8
|
import useFilteredOperationTypesByRoles from '../stock-operations-forms/hooks/useFilteredOperationTypesByRoles';
|
9
9
|
import { useStockOperationAndItems } from '../stock-operations.resource';
|
10
10
|
|
@@ -32,7 +32,7 @@ const EditStockOperationActionMenu: React.FC<EditStockOperationActionMenuProps>
|
|
32
32
|
);
|
33
33
|
|
34
34
|
const handleEdit = useCallback(() => {
|
35
|
-
|
35
|
+
launchStockoperationAddOrEditWorkSpace(
|
36
36
|
t,
|
37
37
|
activeOperationType,
|
38
38
|
stockOperation,
|
@@ -0,0 +1,81 @@
|
|
1
|
+
import React, { useMemo } from 'react';
|
2
|
+
import { StockOperationDTO } from '../core/api/types/stockOperation/StockOperationDTO';
|
3
|
+
import {
|
4
|
+
operationFromString,
|
5
|
+
OperationType,
|
6
|
+
StockOperationType,
|
7
|
+
StockOperationTypeHasPrint,
|
8
|
+
} from '../core/api/types/stockOperation/StockOperationType';
|
9
|
+
import StockOperationApprovalButton from './stock-operations-dialog/stock-operations-approve-button.component';
|
10
|
+
import StockOperationApproveDispatchButton from './stock-operations-dialog/stock-operations-approve-dispatch-button.component';
|
11
|
+
import StockOperationCancelButton from './stock-operations-dialog/stock-operations-cancel-button.component';
|
12
|
+
import StockOperationCompleteDispatchButton from './stock-operations-dialog/stock-operations-completed-dispatch-button.component';
|
13
|
+
import StockOperationIssueStockButton from './stock-operations-dialog/stock-operations-issue-stock-button.component';
|
14
|
+
import StockOperationPrintButton from './stock-operations-dialog/stock-operations-print-button.component';
|
15
|
+
import StockOperationRejectButton from './stock-operations-dialog/stock-operations-reject-button.component';
|
16
|
+
import StockOperationReturnButton from './stock-operations-dialog/stock-operations-return-button.component';
|
17
|
+
import useOperationTypePermisions from './stock-operations-forms/hooks/useOperationTypePermisions';
|
18
|
+
import styles from './stock-operations-table.scss';
|
19
|
+
|
20
|
+
type Props = {
|
21
|
+
stockOperation: StockOperationDTO;
|
22
|
+
stockOperationType: StockOperationType;
|
23
|
+
};
|
24
|
+
|
25
|
+
const StockoperationActions: React.FC<Props> = ({ stockOperation, stockOperationType }) => {
|
26
|
+
const operationTypePermision = useOperationTypePermisions(stockOperationType);
|
27
|
+
const operationType = useMemo(() => {
|
28
|
+
return operationFromString(stockOperationType.operationType);
|
29
|
+
}, [stockOperationType]);
|
30
|
+
return (
|
31
|
+
<>
|
32
|
+
{((!stockOperation.permission?.canEdit &&
|
33
|
+
(stockOperation.permission?.canApprove || stockOperation.permission?.canReceiveItems)) ||
|
34
|
+
stockOperation.permission?.canEdit ||
|
35
|
+
StockOperationTypeHasPrint(operationType) ||
|
36
|
+
(stockOperation?.permission?.isRequisitionAndCanIssueStock ?? false) ||
|
37
|
+
stockOperation.permission?.isRequisitionAndCanIssueStock) && (
|
38
|
+
<div className={styles.actionBtns}>
|
39
|
+
<>
|
40
|
+
{!stockOperation.permission?.canEdit && stockOperation.permission?.canApprove && (
|
41
|
+
<>
|
42
|
+
{!operationTypePermision.requiresDispatchAcknowledgement && (
|
43
|
+
<StockOperationApprovalButton operation={stockOperation} />
|
44
|
+
)}
|
45
|
+
|
46
|
+
{operationTypePermision.requiresDispatchAcknowledgement && (
|
47
|
+
<StockOperationApproveDispatchButton operation={stockOperation} />
|
48
|
+
)}
|
49
|
+
|
50
|
+
<StockOperationRejectButton operation={stockOperation} />
|
51
|
+
<StockOperationReturnButton operation={stockOperation} />
|
52
|
+
<StockOperationCancelButton operation={stockOperation} />
|
53
|
+
</>
|
54
|
+
)}
|
55
|
+
|
56
|
+
{!stockOperation.permission?.canEdit && stockOperation.permission?.canReceiveItems && (
|
57
|
+
<>
|
58
|
+
<StockOperationCompleteDispatchButton operation={stockOperation} reason={false} />
|
59
|
+
<StockOperationReturnButton operation={stockOperation} />
|
60
|
+
</>
|
61
|
+
)}
|
62
|
+
|
63
|
+
{stockOperation.permission?.canEdit && <StockOperationCancelButton operation={stockOperation} />}
|
64
|
+
{stockOperation.permission?.isRequisitionAndCanIssueStock && (
|
65
|
+
<StockOperationIssueStockButton operation={stockOperation} />
|
66
|
+
)}
|
67
|
+
{(stockOperation.permission?.isRequisitionAndCanIssueStock ||
|
68
|
+
stockOperation.operationType === OperationType.STOCK_ISSUE_OPERATION_TYPE ||
|
69
|
+
stockOperation.operationType === OperationType.REQUISITION_OPERATION_TYPE ||
|
70
|
+
stockOperation.operationType === OperationType.RECEIPT_OPERATION_TYPE ||
|
71
|
+
stockOperation.operationType === OperationType.TRANSFER_OUT_OPERATION_TYPE) && (
|
72
|
+
<StockOperationPrintButton operation={stockOperation} />
|
73
|
+
)}
|
74
|
+
</>
|
75
|
+
</div>
|
76
|
+
)}
|
77
|
+
</>
|
78
|
+
);
|
79
|
+
};
|
80
|
+
|
81
|
+
export default StockoperationActions;
|
@@ -0,0 +1,82 @@
|
|
1
|
+
import React, { useMemo } from 'react';
|
2
|
+
import { StockOperationDTO } from '../core/api/types/stockOperation/StockOperationDTO';
|
3
|
+
import { OperationType, StockOperationType } from '../core/api/types/stockOperation/StockOperationType';
|
4
|
+
import useStockOperationLinks from './stock-operations-forms/hooks/useStockOperationLinks';
|
5
|
+
import styles from './stock-operations-table.scss';
|
6
|
+
import StockOperationRelatedLink from './stock-operations-forms/stock-operation-related-link.component';
|
7
|
+
|
8
|
+
type Props = {
|
9
|
+
stockOperation: StockOperationDTO;
|
10
|
+
stockOperationType: StockOperationType;
|
11
|
+
};
|
12
|
+
|
13
|
+
const StockOperationLinks: React.FC<Props> = ({ stockOperation, stockOperationType }) => {
|
14
|
+
const requisitionOperationUuid = useMemo(() => {
|
15
|
+
if (
|
16
|
+
stockOperationType?.operationType === OperationType.REQUISITION_OPERATION_TYPE ||
|
17
|
+
stockOperation?.operationType === OperationType.REQUISITION_OPERATION_TYPE ||
|
18
|
+
stockOperationType?.operationType === OperationType.STOCK_ISSUE_OPERATION_TYPE ||
|
19
|
+
stockOperation?.operationType === OperationType.STOCK_ISSUE_OPERATION_TYPE
|
20
|
+
) {
|
21
|
+
return stockOperation.uuid;
|
22
|
+
}
|
23
|
+
return null;
|
24
|
+
}, [stockOperationType, stockOperation]);
|
25
|
+
const { error, isLoading, operationLinks } = useStockOperationLinks(requisitionOperationUuid);
|
26
|
+
if (isLoading || error) return null;
|
27
|
+
return (
|
28
|
+
<div>
|
29
|
+
{' '}
|
30
|
+
{operationLinks && operationLinks.length > 0 && (
|
31
|
+
<div>
|
32
|
+
<h6 className={styles.relatedTransactionHeader}>Related Transactions:</h6>
|
33
|
+
{operationLinks.map(
|
34
|
+
(item) =>
|
35
|
+
(stockOperation.uuid === item?.parentUuid || stockOperationType?.uuid === item?.parentUuid) && (
|
36
|
+
<React.Fragment key={item.uuid}>
|
37
|
+
<span>{item?.childOperationTypeName}</span>
|
38
|
+
<span className={item?.childVoided ? 'voided' : ''}>
|
39
|
+
{' '}
|
40
|
+
{item?.childVoided && item?.childOperationNumber}
|
41
|
+
{!item?.childVoided && (
|
42
|
+
<span className={styles.relatedLink}>
|
43
|
+
<StockOperationRelatedLink
|
44
|
+
stockOperationUuid={item?.childUuid}
|
45
|
+
operationNumber={item?.childOperationNumber}
|
46
|
+
/>
|
47
|
+
</span>
|
48
|
+
)}
|
49
|
+
</span>{' '}
|
50
|
+
<span>[{item?.childStatus}]</span>
|
51
|
+
</React.Fragment>
|
52
|
+
),
|
53
|
+
)}
|
54
|
+
<span> </span>
|
55
|
+
{operationLinks.map(
|
56
|
+
(item) =>
|
57
|
+
(stockOperation.uuid === item?.childUuid || stockOperationType.uuid === item?.childUuid) && (
|
58
|
+
<React.Fragment key={item.uuid}>
|
59
|
+
<span>{item?.parentOperationTypeName}</span>
|
60
|
+
<span className={item?.parentVoided ? 'voided' : ''}>
|
61
|
+
{' '}
|
62
|
+
{item?.parentVoided && item?.parentOperationNumber}
|
63
|
+
{!item?.parentVoided && (
|
64
|
+
<span className={styles.relatedLink}>
|
65
|
+
<StockOperationRelatedLink
|
66
|
+
stockOperationUuid={item?.parentUuid}
|
67
|
+
operationNumber={item?.parentOperationNumber}
|
68
|
+
/>
|
69
|
+
</span>
|
70
|
+
)}
|
71
|
+
</span>{' '}
|
72
|
+
<span>[{item?.parentStatus}]</span>
|
73
|
+
</React.Fragment>
|
74
|
+
),
|
75
|
+
)}
|
76
|
+
</div>
|
77
|
+
)}
|
78
|
+
</div>
|
79
|
+
);
|
80
|
+
};
|
81
|
+
|
82
|
+
export default StockOperationLinks;
|
@@ -3,7 +3,7 @@ import { showSnackbar } from '@openmrs/esm-framework';
|
|
3
3
|
import React, { useCallback, useEffect } from 'react';
|
4
4
|
import { useTranslation } from 'react-i18next';
|
5
5
|
import { useStockOperationTypes } from '../stock-lookups/stock-lookups.resource';
|
6
|
-
import {
|
6
|
+
import { launchStockoperationAddOrEditWorkSpace } from './stock-operation.utils';
|
7
7
|
import { useStockOperationAndItems } from './stock-operations.resource';
|
8
8
|
|
9
9
|
interface StockOperationReferenceProps {
|
@@ -25,7 +25,7 @@ const StockOperationReference = ({ operationNumber, operationUuid }: StockOperat
|
|
25
25
|
if (!operationType) {
|
26
26
|
return;
|
27
27
|
}
|
28
|
-
|
28
|
+
launchStockoperationAddOrEditWorkSpace(
|
29
29
|
t,
|
30
30
|
operationType,
|
31
31
|
stockOperation,
|
@@ -4,7 +4,7 @@ import { showSnackbar } from '@openmrs/esm-framework';
|
|
4
4
|
import React, { useCallback, useEffect } from 'react';
|
5
5
|
import { useTranslation } from 'react-i18next';
|
6
6
|
import { OperationType, StockOperationType } from '../../core/api/types/stockOperation/StockOperationType';
|
7
|
-
import {
|
7
|
+
import { launchStockoperationAddOrEditWorkSpace } from '../stock-operation.utils';
|
8
8
|
import useFilteredOperationTypesByRoles from '../stock-operations-forms/hooks/useFilteredOperationTypesByRoles';
|
9
9
|
|
10
10
|
const StockOperationTypesSelector = () => {
|
@@ -15,7 +15,7 @@ const StockOperationTypesSelector = () => {
|
|
15
15
|
(stockOperationType: StockOperationType) => {
|
16
16
|
const isStockIssueOperation = stockOperationType.operationType === OperationType.STOCK_ISSUE_OPERATION_TYPE;
|
17
17
|
|
18
|
-
|
18
|
+
launchStockoperationAddOrEditWorkSpace(t, stockOperationType, undefined);
|
19
19
|
},
|
20
20
|
[t],
|
21
21
|
);
|
@@ -1,32 +1,27 @@
|
|
1
|
-
import { showModal } from '@openmrs/esm-framework';
|
2
|
-
import React from 'react';
|
1
|
+
import { launchWorkspace, showModal } from '@openmrs/esm-framework';
|
3
2
|
import { TFunction } from 'react-i18next';
|
4
3
|
import { useLocation } from 'react-router-dom';
|
5
4
|
import { StockOperationDTO } from '../core/api/types/stockOperation/StockOperationDTO';
|
6
5
|
import { StockOperationType } from '../core/api/types/stockOperation/StockOperationType';
|
7
|
-
import { launchOverlay } from '../core/components/overlay/hook';
|
8
|
-
import StockOperationForm from './stock-operations-forms/stock-operation-form.component';
|
9
6
|
|
10
|
-
export const
|
7
|
+
export const launchStockoperationAddOrEditWorkSpace = (
|
11
8
|
t: TFunction,
|
12
9
|
operationType: StockOperationType,
|
13
10
|
stockOperation?: StockOperationDTO,
|
14
11
|
stockRequisitionUuid?: string, // Only suplied on stock issue (when overlay is launched for stock issue)
|
15
12
|
) => {
|
16
|
-
|
17
|
-
stockOperation
|
13
|
+
launchWorkspace('stock-operation-form-workspace', {
|
14
|
+
workspaceTitle: stockOperation
|
18
15
|
? t('editOperationTitle', 'Edit {{operationType}}', {
|
19
16
|
operationType: stockOperation?.operationTypeName,
|
20
17
|
})
|
21
18
|
: t('newOperationTitle', 'New: {{operationName}}', {
|
22
19
|
operationName: operationType?.name,
|
23
20
|
}),
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
/>,
|
29
|
-
);
|
21
|
+
stockOperationType: operationType,
|
22
|
+
stockOperation: stockOperation,
|
23
|
+
stockRequisitionUuid: stockRequisitionUuid,
|
24
|
+
});
|
30
25
|
};
|
31
26
|
|
32
27
|
export const useUrlQueryParams = () => {
|
@@ -6,7 +6,7 @@ import { useTranslation } from 'react-i18next';
|
|
6
6
|
import { StockOperationDTO } from '../../core/api/types/stockOperation/StockOperationDTO';
|
7
7
|
import { OperationType } from '../../core/api/types/stockOperation/StockOperationType';
|
8
8
|
import { useStockOperationTypes } from '../../stock-lookups/stock-lookups.resource';
|
9
|
-
import {
|
9
|
+
import { launchStockoperationAddOrEditWorkSpace } from '../stock-operation.utils';
|
10
10
|
import { showSnackbar } from '@openmrs/esm-framework';
|
11
11
|
|
12
12
|
interface StockOperationIssueStockButtonProps {
|
@@ -22,7 +22,7 @@ const StockOperationIssueStockButton: React.FC<StockOperationIssueStockButtonPro
|
|
22
22
|
);
|
23
23
|
|
24
24
|
const handleButtonClick = () => {
|
25
|
-
|
25
|
+
launchStockoperationAddOrEditWorkSpace(t, stockIssueOperationType, undefined, operation.uuid);
|
26
26
|
};
|
27
27
|
|
28
28
|
useEffect(() => {
|
package/src/stock-operations/stock-operations-forms/input-components/stock-item-search.component.tsx
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
import { ClickableTile, Search } from '@carbon/react';
|
2
|
-
import { useDebounce } from '@openmrs/esm-framework';
|
3
|
-
import React, { useEffect, useState } from 'react';
|
2
|
+
import { useConfig, useDebounce } from '@openmrs/esm-framework';
|
3
|
+
import React, { useCallback, useEffect, useState } from 'react';
|
4
4
|
import { useTranslation } from 'react-i18next';
|
5
5
|
import { StockItemDTO } from '../../../core/api/types/stockItem/StockItem';
|
6
6
|
import { useFilterableStockItems } from '../hooks/useFilterableStockItems';
|
7
7
|
import styles from './input-components-styles.scss';
|
8
|
+
import { ConfigObject } from '../../../config-schema';
|
8
9
|
|
9
10
|
type StockItemSearchProps = {
|
10
11
|
onSelectedItem?: (stockItem: StockItemDTO) => void;
|
@@ -15,7 +16,24 @@ const StockItemSearch: React.FC<StockItemSearchProps> = ({ onSelectedItem }) =>
|
|
15
16
|
const { isLoading, stockItemsList, setSearchString } = useFilterableStockItems({});
|
16
17
|
const [searchTerm, setSearchTerm] = useState('');
|
17
18
|
const debouncedSearchTerm = useDebounce(searchTerm);
|
19
|
+
const { useItemCommonNameAsDisplay } = useConfig<ConfigObject>();
|
20
|
+
const getDrugName = useCallback(
|
21
|
+
(item: StockItemDTO) => {
|
22
|
+
if (useItemCommonNameAsDisplay) return;
|
23
|
+
const commonName = item?.commonName ? `(Common name: ${item.commonName})` : undefined;
|
24
|
+
return `${item?.drugName || t('noDrugNameAvailable', 'No drug name available') + (commonName ?? '')}`;
|
25
|
+
},
|
26
|
+
[useItemCommonNameAsDisplay, t],
|
27
|
+
);
|
18
28
|
|
29
|
+
const getCommonName = useCallback(
|
30
|
+
(item: StockItemDTO) => {
|
31
|
+
if (!useItemCommonNameAsDisplay) return;
|
32
|
+
const drugName = item?.drugName ? `(Drug name: ${item.drugName})` : undefined;
|
33
|
+
return `${item?.commonName || t('noCommonNameAvailable', 'No common name available') + (drugName ?? '')}`;
|
34
|
+
},
|
35
|
+
[useItemCommonNameAsDisplay, t],
|
36
|
+
);
|
19
37
|
useEffect(() => {
|
20
38
|
if (debouncedSearchTerm?.length !== 0) {
|
21
39
|
setSearchString(debouncedSearchTerm);
|
@@ -26,6 +44,7 @@ const StockItemSearch: React.FC<StockItemSearchProps> = ({ onSelectedItem }) =>
|
|
26
44
|
onSelectedItem?.(stockItem);
|
27
45
|
setSearchTerm('');
|
28
46
|
};
|
47
|
+
|
29
48
|
return (
|
30
49
|
<div className={styles.stockItemSearchContainer}>
|
31
50
|
<div style={{ display: 'flex' }}>
|
@@ -42,11 +61,15 @@ const StockItemSearch: React.FC<StockItemSearchProps> = ({ onSelectedItem }) =>
|
|
42
61
|
</div>
|
43
62
|
{searchTerm && stockItemsList?.length > 0 && (
|
44
63
|
<div className={styles.searchResults}>
|
45
|
-
{stockItemsList?.slice(0, 5).map((stockItem) =>
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
64
|
+
{stockItemsList?.slice(0, 5).map((stockItem) => {
|
65
|
+
const commonName = getCommonName(stockItem);
|
66
|
+
const drugName = getDrugName(stockItem);
|
67
|
+
return (
|
68
|
+
<ClickableTile onClick={() => handleOnSearchResultClick(stockItem)} key={stockItem?.uuid}>
|
69
|
+
{useItemCommonNameAsDisplay ? commonName : drugName}
|
70
|
+
</ClickableTile>
|
71
|
+
);
|
72
|
+
})}
|
50
73
|
</div>
|
51
74
|
)}
|
52
75
|
</div>
|