import * as React from 'react'; import classNames from 'classnames'; import { DataTable, Table, TableContainer, TableHead, TableHeader, TableRow, TableCell, TableBody, } from '@carbon/react'; import { formatDate, parseDate, useLayoutType } from '@openmrs/esm-framework'; import { type OBSERVATION_INTERPRETATION } from '@openmrs/esm-patient-common-lib'; import { type OverviewPanelData as BaseOverviewPanelData } from './useOverviewData'; import styles from './common-datatable.scss'; interface OverviewPanelData extends BaseOverviewPanelData { dateTime?: string; } interface CommonDataTableProps { data: Array; tableHeaders: Array<{ key: string; header: string; }>; title?: string; toolbar?: React.ReactNode; description?: React.ReactNode; } const getColumnClass = (columnKey: string) => styles[`col-${columnKey}`]; const CommonDataTable: React.FC = ({ title, data, description, toolbar, tableHeaders }) => { const interpretationToCSS = { OFF_SCALE_HIGH: 'offScaleHigh', CRITICALLY_HIGH: 'criticallyHigh', HIGH: 'high', OFF_SCALE_LOW: 'offScaleLow', CRITICALLY_LOW: 'criticallyLow', LOW: 'low', NORMAL: '', }; const isTablet = useLayoutType() === 'tablet'; data = data.map((item) => ({ ...item, dateTime: formatDate(parseDate(item?.dateTime), { mode: 'standard', time: true }), })); return ( {({ rows, headers, getHeaderProps, getRowProps, getTableProps, getTableContainerProps }) => ( {toolbar} {headers.map((header) => ( {header.header} ))} {rows.map((row, i) => ( {row.cells.map((cell) => { return cell.value?.interpretation ? ( {cell.value?.value ?? cell.value} ) : ( {cell?.value} ); })} ))}
)}
); }; const TypedTableRow: React.FC< { interpretation: OBSERVATION_INTERPRETATION; } & React.ComponentProps > = ({ interpretation, ...props }) => { switch (interpretation) { case 'OFF_SCALE_HIGH': return ; case 'CRITICALLY_HIGH': return ; case 'HIGH': return ; case 'OFF_SCALE_LOW': return ; case 'CRITICALLY_LOW': return ; case 'LOW': return ; case 'NORMAL': default: return ; } }; export default CommonDataTable;