import React, { useMemo } from 'react'; import { DataTable, DataTableSkeleton, SkeletonText, Table, TableBody, TableCell, TableContainer, TableHead, TableHeader, TableRow, } from '@carbon/react'; import { useTranslation } from 'react-i18next'; import { type Order } from '@openmrs/esm-patient-common-lib'; import { useLayoutType } from '@openmrs/esm-framework'; import { getObservationDisplayValue } from '../utils'; import { useLabEncounter, useOrderConceptByUuid } from '../lab-results/lab-results.resource'; import styles from './general-order-table.scss'; interface GeneralOrderProps { order: Order; } const GeneralOrderTable: React.FC = ({ order }) => { const { t } = useTranslation(); const isTablet = useLayoutType() === 'tablet'; const { concept, isLoading: isLoadingConcept } = useOrderConceptByUuid(order.concept.uuid); const { encounter, isLoading: isLoadingResult } = useLabEncounter(order.encounter.uuid); const tableHeaders: Array<{ key: string; header: string }> = [ { key: 'orderName', header: order?.orderType?.display, }, { key: 'instructions', header: t('instructions', 'Instructions'), }, { key: 'referenceNumber', header: t('referenceNumberTableHeader', '{{orderType}} reference number', { orderType: order?.orderType?.display, }), }, ]; const obs = useMemo(() => { if (encounter && concept) { return encounter.obs?.find((obs) => obs.concept.uuid === concept.uuid); } }, [concept, encounter]); const rows = useMemo(() => { if (concept && concept.setMembers.length > 0) { return concept?.setMembers.map((memberConcept) => ({ id: memberConcept.uuid, orderName:
{memberConcept.display}
, instructions: '--', result: isLoadingResult ? ( ) : ( getObservationDisplayValue( obs?.groupMembers?.find((obs) => obs.concept.uuid === memberConcept.uuid)?.value, ) ?? '--' ), normalRange: memberConcept.hiNormal && memberConcept.lowNormal ? `${memberConcept.lowNormal} - ${memberConcept.hiNormal}` : t('notApplicable', 'Not applicable'), referenceNumber: order?.accessionNumber, })); } else if (concept && concept.setMembers.length === 0) { return [ { id: concept.uuid, orderName:
{concept.display}
, instructions: order?.instructions ?? '--', result: isLoadingResult ? : getObservationDisplayValue(obs?.value) ?? '--', normalRange: concept.hiNormal && concept.lowNormal ? `${concept.lowNormal} - ${concept.hiNormal}` : t('notApplicable', 'Not applicable'), referenceNumber: order?.accessionNumber, }, ]; } else { return []; } }, [concept, isLoadingResult, obs?.groupMembers, obs?.value, order?.accessionNumber, order?.instructions, t]); return (
{isLoadingConcept ? ( ) : ( {({ rows, headers, getHeaderProps, getRowProps, getTableProps, getTableContainerProps }) => ( {headers.map((header) => ( {header.header} ))} {rows.map((row) => ( {row.cells.map((cell) => ( {cell.value} ))} ))}
)}
)}
); }; export default GeneralOrderTable;