/** * Component: Pagination Component * Documentation: documentation/frontend/components.md */ 'use client'; import React from 'react'; interface PaginationProps { currentPage: number; totalPages: number; onPageChange: (page: number) => void; className?: string; } export function Pagination({ currentPage, totalPages, onPageChange, className = '' }: PaginationProps) { if (totalPages <= 1) { return null; } const generatePageNumbers = () => { const pages: (number | string)[] = []; const maxVisible = 7; // Show max 7 page buttons if (totalPages <= maxVisible) { // Show all pages if total is less than max for (let i = 1; i <= totalPages; i++) { pages.push(i); } } else { // Always show first page pages.push(1); if (currentPage > 3) { pages.push('...'); } // Show pages around current page 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('...'); } // Always show last page pages.push(totalPages); } return pages; }; const pageNumbers = generatePageNumbers(); return (
{/* Previous Button */} {/* Page Numbers */}
{pageNumbers.map((page, index) => { if (page === '...') { return ( ... ); } const pageNum = page as number; const isActive = pageNum === currentPage; return ( ); })}
{/* Next Button */}
); }