import { type ReactNode } from 'react' export interface Column { header: string accessor: (row: T) => ReactNode className?: string } interface AdminTableProps { columns: Column[] data: T[] isLoading?: boolean emptyMessage?: string onRowClick?: (row: T) => void keyFn: (row: T) => string | number } export function AdminTable({ columns, data, isLoading, emptyMessage = 'No data found.', onRowClick, keyFn, }: AdminTableProps) { if (isLoading) { return (
Loading...
) } if (data.length === 0) { return (
{emptyMessage}
) } return (
{columns.map((col) => ( ))} {data.map((row) => ( onRowClick(row) : undefined} className={onRowClick ? 'cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800' : ''} > {columns.map((col) => ( ))} ))}
{col.header}
{col.accessor(row)}
) }