import { capitalizeFirstLetter } from '~/lib/util' import classNames from '~/lib/classNames' import LoadingSpinner from '~/components/LoadingSpinner' interface StyledTableProps> { loading?: boolean tableProps?: React.HTMLAttributes data?: T[] noDataText?: string onRowClick?: (record: T) => void columns?: { accessor: keyof T title?: React.ReactNode render?: (record: T, index: number) => React.ReactNode className?: string }[] className?: string rowLines?: boolean } function StyledTable({ loading = false, tableProps = {}, data = [], noDataText = 'No records found', onRowClick, columns = [], className = '', }: StyledTableProps) { const { className: tableClassName, ...restTableProps } = tableProps return (
{columns.map((column, index) => ( ))} {!loading && data.length !== 0 && data.map((record, recordIdx) => ( onRowClick?.(record)} className={onRowClick ? `cursor-pointer hover:bg-gray-100 ` : ''} > {columns.map((column, index) => ( ))} ))} {!loading && data.length === 0 && ( )} {loading && ( )}
{column.title ?? capitalizeFirstLetter(column.accessor.toString())}
{column.render ? column.render(record, index) : (record[column.accessor] as React.ReactNode)}
{noDataText}
) } export default StyledTable