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) => (
|
{column.name}
|
))}
{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) => (
|
{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;