'use client'; import React from 'react'; import { ChevronLeft, ChevronRight } from 'lucide-react'; interface PaginationProps { currentPage: number; totalPages: number; onPageChange: (page: number) => void; showPageNumbers?: boolean; className?: string; } /** * Reusable pagination component */ export const Pagination: React.FC = ({ currentPage, totalPages, onPageChange, showPageNumbers = true, className = '', }) => { if (totalPages <= 1) return null; const handlePrevious = () => { if (currentPage > 1) { onPageChange(currentPage - 1); } }; const handleNext = () => { if (currentPage < totalPages) { onPageChange(currentPage + 1); } }; // Generate page numbers to show const getPageNumbers = () => { const pages: (number | string)[] = []; const maxVisible = 5; if (totalPages <= maxVisible) { for (let i = 1; i <= totalPages; i++) { pages.push(i); } } else { if (currentPage <= 3) { for (let i = 1; i <= 4; i++) pages.push(i); pages.push('...'); pages.push(totalPages); } else if (currentPage >= totalPages - 2) { pages.push(1); pages.push('...'); for (let i = totalPages - 3; i <= totalPages; i++) pages.push(i); } else { pages.push(1); pages.push('...'); for (let i = currentPage - 1; i <= currentPage + 1; i++) pages.push(i); pages.push('...'); pages.push(totalPages); } } return pages; }; return (
{showPageNumbers && (
{getPageNumbers().map((page, index) => page === '...' ? ( ... ) : ( ) )}
)} {!showPageNumbers && ( Page {currentPage} sur {totalPages} )}
); }; export default Pagination;