import React, { useState } from 'react'; import Pagination from './Pagination'; type TableProps = { data: T[]; columns: { key: keyof T; label: string; render?: (value: T[keyof T]) => React.ReactNode; }[]; orderBy?: keyof T; onOrderByChange?: (key: keyof T) => void; pageSize?: number; }; export default function Table({ data, columns, orderBy, onOrderByChange, pageSize = 100 }: TableProps) { const [currentPage, setCurrentPage] = useState(1); const totalPages = Math.ceil(data.length / pageSize); const paginatedData = data.slice( (currentPage - 1) * pageSize, currentPage * pageSize ); const handlePageChange = (page: number) => { setCurrentPage(page); }; return ( <> {columns.map((column) => ( ))} {paginatedData.map((item, index) => ( {columns.map((column) => ( ))} ))}
onOrderByChange && onOrderByChange(column.key)} > {column.label} {orderBy === column.key && '▼'}
{column.render ? column.render(item[column.key]) : String(item[column.key])}
); }