import React from 'react'; import PropTypes from 'prop-types'; import Pagination from '@/components/Pagination'; // Correction du chemin d'importation const Table = ({ data, columns, renderCell, itemsPerPage = 0, currentPage, totalPages, onPageChange, onRowClick, selectedRows, isSelectable = false, defaultTheme = 'bg-emerald-50', }) => { const handlePageChange = (newPage) => { onPageChange(newPage); }; return (
{columns.map((column, index) => ( ))} {data?.map((row, rowIndex) => ( { if (isSelectable && onRowClick) { // Si la ligne est déjà sélectionnée, transmettre une indication explicite de désélection if (selectedRows?.includes(row.id)) { onRowClick({ deselected: true, row }); // Désélectionner } else { onRowClick(row); // Sélectionner } } }} > {columns.map((column, colIndex) => ( ))} ))}
{column.name}
{renderCell ? renderCell(row, column.name) : column.transform(row)}
{itemsPerPage > 0 && ( )}
); }; Table.propTypes = { data: PropTypes.arrayOf(PropTypes.object).isRequired, columns: PropTypes.arrayOf( PropTypes.shape({ name: PropTypes.string.isRequired, transform: PropTypes.func.isRequired, }) ).isRequired, renderCell: PropTypes.func, itemsPerPage: PropTypes.number, currentPage: PropTypes.number.isRequired, totalPages: PropTypes.number.isRequired, onPageChange: PropTypes.func.isRequired, onRowClick: PropTypes.func, selectedRows: PropTypes.arrayOf(PropTypes.any), isSelectable: PropTypes.bool, defaultTheme: PropTypes.string, }; export default Table;