import React from 'react'; import { useSearchParams } from 'react-router-dom'; import { ChevronLeft, ChevronRight } from 'lucide-react'; interface PaginationProps { currentPage: number; totalPages: number; onPageChange?: (page: number) => void; } const Pagination: React.FC = ({ currentPage, totalPages, onPageChange, }) => { const [searchParams, setSearchParams] = useSearchParams(); const handlePageChange = (page: number) => { if (page < 1 || page > totalPages) return; const newParams = new URLSearchParams(searchParams); newParams.set('page', String(page)); setSearchParams(newParams); onPageChange?.(page); window.scrollTo({ top: 0, behavior: 'smooth' }); }; const getPageNumbers = () => { const pages: (number | string)[] = []; const maxVisible = 7; if (totalPages <= maxVisible) { for (let i = 1; i <= totalPages; i++) { pages.push(i); } } else { pages.push(1); if (currentPage > 3) { pages.push('...'); } const start = Math.max(2, currentPage - 1); const end = Math.min(totalPages - 1, currentPage + 1); for (let i = start; i <= end; i++) { pages.push(i); } if (currentPage < totalPages - 2) { pages.push('...'); } pages.push(totalPages); } return pages; }; if (totalPages <= 1) { return null; } return (
{} {} {getPageNumbers().map((page, index) => { if (page === '...') { return ( ... ); } const pageNum = page as number; const isActive = pageNum === currentPage; return ( ); })} {}
); }; export default Pagination;