import clsx from 'clsx'; import classes from './MRT_Table.module.css'; import { useMemo } from 'react'; import { darken, lighten, Table, type TableProps, useMantineColorScheme, } from '@mantine/core'; 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 { Memo_MRT_TableBody, MRT_TableBody } from '../body/MRT_TableBody'; import { MRT_TableFooter } from '../footer/MRT_TableFooter'; import { MRT_TableHead } from '../head/MRT_TableHead'; interface Props extends TableProps { table: MRT_TableInstance; } export const MRT_Table = ({ table, ...rest }: Props) => { 'use no memo'; const { getFlatHeaders, getState, options: { columns, enableTableFooter, enableTableHead, layoutMode, mantineTableProps, memoMode, }, } = table; const { columnSizing, columnSizingInfo, columnVisibility, density } = getState(); const tableProps = { highlightOnHover: true, horizontalSpacing: density, verticalSpacing: density, ...parseFromValuesOrFunc(mantineTableProps, { table }), ...rest, }; 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, }; const { colorScheme } = useMantineColorScheme(); const { stripedColor } = tableProps; return ( {enableTableHead && } {memoMode === 'table-body' || columnSizingInfo.isResizingColumn ? ( ) : ( )} {enableTableFooter && }
); };