'use client' import { Button } from '@/components/ui/button' type PaginationProps = { page: number totalPages: number onPageChange: (page: number) => void } function PageButton({ page, isActive, onClick, }: { page: number isActive: boolean onClick: () => void }) { return ( ) } // Numbered pagination with first/last anchors and ellipsis for long ranges. export default function Pagination({ page, totalPages, onPageChange, }: PaginationProps) { if (totalPages <= 1) return null // Middle window: up to 6 pages between the pinned first and last buttons. const middlePages: number[] = [] for (let i = 0; i < Math.min(6, totalPages - 2); i++) { let pageToShow: number if (totalPages <= 8) { pageToShow = i + 2 } else if (page <= 4) { pageToShow = i + 2 } else if (page >= totalPages - 3) { pageToShow = totalPages - 7 + i } else { pageToShow = page - 2 + i } if (pageToShow > 1 && pageToShow < totalPages) { middlePages.push(pageToShow) } } return (
onPageChange(1)} /> {page > 4 && totalPages > 7 && ...} {middlePages.map((p) => ( onPageChange(p)} /> ))} {page < totalPages - 3 && totalPages > 7 && ( ... )} onPageChange(totalPages)} />
) }