import { useState, type ReactElement, type ReactNode } from "react"; export interface DataTableColumn { key: string; header: string; render?: (row: T) => ReactNode; className?: string; } export interface DataTableProps> { columns: DataTableColumn[]; data: T[]; className?: string; onRowClick?: (row: T) => void; } export function DataTable>({ columns, data, className = "", onRowClick, }: DataTableProps): ReactElement { const [hoveredRow, setHoveredRow] = useState(null); return ( {columns.map((col) => ( ))} {data.map((row, rowIndex) => { const isLast = rowIndex === data.length - 1; const isHovered = hoveredRow === rowIndex; return ( { onRowClick(row); } : undefined } onMouseEnter={(): void => { setHoveredRow(rowIndex); }} onMouseLeave={(): void => { setHoveredRow(null); }} > {columns.map((col) => ( ))} ); })}
{col.header}
{col.render !== undefined ? col.render(row) : (row[col.key] as ReactNode)}
); }