import { Cell, flexRender, Row, Table } from '@tanstack/react-table'; import { IConditionalStyle } from '.'; import SelectRow from './SelectRow'; interface TableBodyProps { table: Table dense?: boolean enableRowSelection?: boolean conditionalRowStyles?: IConditionalStyle[] onRowClicked?: (rowData: TData, event: React.MouseEvent) => void onRowDoubleClicked?: (rowData: TData, event: React.MouseEvent) => void } function TableBody({ table, dense, enableRowSelection, conditionalRowStyles, onRowClicked, onRowDoubleClicked }: TableBodyProps) { function handleRowClicked(row: Row, event: React.MouseEvent) { if (onRowClicked) { onRowClicked(row.original, event); } if (enableRowSelection && row.getCanSelect()) { row.getToggleSelectedHandler()(!row.getIsSelected()); } } function getRowStyles(row: Row) { return ({...conditionalRowStyles! .filter(item => item.when(row.original)) .reduce((prev, item) => ({...prev, ...item.style}), {}) }); } return ( {table.getRowModel().rows.map( (row: Row, index) => ( {enableRowSelection ? : null} {row.getVisibleCells().map( (cell: Cell) => ( handleRowClicked(row, event)} onDoubleClick={event => onRowDoubleClicked ? onRowDoubleClicked(row.original, event) : undefined} > {flexRender(cell.column.columnDef.cell, cell.getContext())} ))} ))} ); } export default TableBody;