import { useMemo } from 'react'; import Table, { type TableProps } from '@mui/material/Table'; import { useMRT_ColumnVirtualizer } from '../../hooks/useMRT_ColumnVirtualizer'; import { type MRT_RowData, type MRT_TableInstance } from '../../types'; import { parseCSSVarId } from '../../utils/style.utils'; import { parseFromValuesOrFunc } from '../../utils/utils'; import { MRT_TableBody, Memo_MRT_TableBody } from '../body/MRT_TableBody'; import { MRT_TableFooter } from '../footer/MRT_TableFooter'; import { MRT_TableHead } from '../head/MRT_TableHead'; export interface MRT_TableProps extends TableProps { table: MRT_TableInstance; } export const MRT_Table = ({ table, ...rest }: MRT_TableProps) => { const { getFlatHeaders, getState, options: { columns, enableStickyHeader, enableTableFooter, enableTableHead, layoutMode, memoMode, muiTableProps, renderCaption, }, } = table; const { columnSizing, columnSizingInfo, columnVisibility, isFullScreen } = getState(); const tableProps = { ...parseFromValuesOrFunc(muiTableProps, { table }), ...rest, }; const Caption = parseFromValuesOrFunc(renderCaption, { table }); const columnSizeVars = useMemo(() => { const headers = getFlatHeaders(); const colSizes: { [key: string]: number } = {}; for (let i = 0; i < headers.length; i++) { const header = headers[i]; const colSize = header.getSize(); colSizes[`--header-${parseCSSVarId(header.id)}-size`] = colSize; colSizes[`--col-${parseCSSVarId(header.column.id)}-size`] = colSize; } return colSizes; }, [columns, columnSizing, columnSizingInfo, columnVisibility]); const columnVirtualizer = useMRT_ColumnVirtualizer(table); const commonTableGroupProps = { columnVirtualizer, table, }; return ( ({ borderCollapse: 'separate', display: layoutMode?.startsWith('grid') ? 'grid' : undefined, position: 'relative', ...(parseFromValuesOrFunc(tableProps?.sx, theme) as any), })} > {!!Caption && } {enableTableHead && } {memoMode === 'table-body' || columnSizingInfo.isResizingColumn ? ( ) : ( )} {enableTableFooter && }
{Caption}
); };