import React from 'react'; interface PaginationProps { currentPage: number; totalPages: number; onPageChange: (page: number) => void; className?: string; showPageInfo?: boolean; } const Pagination: React.FC = ({ currentPage, totalPages, onPageChange, className = "", showPageInfo = true }) => { const generatePageNumbers = () => { const pages: (number | string)[] = []; const delta = 2; // Количество страниц вокруг текущей if (totalPages <= 7) { // Если страниц мало, показываем все for (let i = 1; i <= totalPages; i++) { pages.push(i); } } else { // Всегда показываем первую страницу pages.push(1); if (currentPage > delta + 2) { pages.push('...'); } // Показываем страницы вокруг текущей const start = Math.max(2, currentPage - delta); const end = Math.min(totalPages - 1, currentPage + delta); for (let i = start; i <= end; i++) { pages.push(i); } if (currentPage < totalPages - delta - 1) { pages.push('...'); } // Всегда показываем последнюю страницу if (totalPages > 1) { pages.push(totalPages); } } return pages; }; const pageNumbers = generatePageNumbers(); if (totalPages <= 1) { return null; } return (
{/* Основные кнопки пагинации */}
{/* Предыдущая страница */} {/* Номера страниц */} {pageNumbers.map((page, index) => ( {page === '...' ? ( ) : ( )} ))} {/* Следующая страница */}
{/* Информация о страницах */} {showPageInfo && (
Страница {currentPage} из {totalPages}
)}
); }; export default Pagination;