import React, { useId, useMemo } from 'react'; import { ArrowLeft, ArrowRight, Edit, TrashCan } from '@carbon/react/icons'; import { Button, DataTable, Table, TableBody, TableCell, TableContainer, TableHead, TableHeader, TableRow, } from '@carbon/react'; import { useFormContext } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { showSnackbar } from '@openmrs/esm-framework'; import { type StockOperationDTO } from '../../../core/api/types/stockOperation/StockOperationDTO'; import { type StockOperationType } from '../../../core/api/types/stockOperation/StockOperationType'; import { getStockOperationUniqueId } from '../../stock-operation.utils'; import { type BaseStockOperationItemFormData, type StockOperationItemDtoSchema } from '../../validation-schema'; import useOperationTypePermisions from '../hooks/useOperationTypePermisions'; import StockItemSearch from '../input-components/stock-item-search.component'; import QuantityUomCell from './quantity-uom-cell.component'; import StockAvailability from './stock-availability-cell.component'; import StockOperationItemBatchNoCell from './stock-operation-item-batch-no-cell.component'; import StockOperationItemCell from './stock-operation-item-cell.component'; import StockoperationItemExpiryCell from './stock-operation-item-expiry-cell.component'; import { type CustomTableHeader } from '../../../core/components/table/types'; import styles from './stock-operation-items-form-step.scc.scss'; type StockOperationItemsFormStepProps = { stockOperation?: StockOperationDTO; stockOperationType: StockOperationType; onNext?: () => void; onPrevious?: () => void; onLaunchItemsForm?: (stockOperationItem?: BaseStockOperationItemFormData) => void; }; const StockOperationItemsFormStep: React.FC = ({ stockOperationType, stockOperation, onNext, onPrevious, onLaunchItemsForm, }) => { const { t } = useTranslation(); const operationTypePermision = useOperationTypePermisions(stockOperationType); const uniqueId = useId(); const form = useFormContext(); const observableOperationItems = form.watch('stockOperationItems'); const headers = useMemo(() => { return [ { key: 'item', header: t('item', 'Item'), styles: { width: '40% !important' }, }, { key: 'itemDetails', header: t('itemDetails', 'Item Details'), styles: { width: '20% !important' }, }, ...(operationTypePermision.requiresBatchUuid || operationTypePermision.requiresActualBatchInfo ? [ { key: 'batch', header: t('batchNo', 'Batch number'), styles: { width: '15% !important' }, }, ] : []), ...(operationTypePermision.requiresActualBatchInfo ? [ { key: 'expiry', header: t('expiry', 'Expiry'), }, ] : []), ...(operationTypePermision.requiresBatchUuid ? [ { key: 'expiry', header: t('expiry', 'Expiry'), }, ] : []), { key: 'quantity', header: t('quantity', 'Quantity'), }, { key: 'quantityuom', header: t('quantityUom', 'Quantity unit of measurement'), }, ...(operationTypePermision.canCaptureQuantityPrice ? [ { key: 'purchasePrice', header: t('purchasePrice', 'Purchase Price'), }, ] : []), { key: 'actions', header: t('actions', 'Actions') }, ]; }, [operationTypePermision, t]); const tableRows = useMemo(() => { return observableOperationItems?.map((item, index) => { const { batchNo, expiration, quantity, purchasePrice, uuid, stockItemUuid, stockItemPackagingUOMUuid, stockBatchUuid, } = item; return { id: uuid || `${uniqueId}-${index}`, item: stockItemUuid ? : '--', itemDetails: stockItemUuid ? : '--', batch: ( ), expiry: ( ), quantity: quantity?.toLocaleString(), quantityuom: stockItemPackagingUOMUuid ? ( ) : ( '--' ), purchasePrice: purchasePrice, actions: ( <> )} {typeof onPrevious === 'function' && (