'use client'; import { Icons } from '@/components/icons/icons'; import { buttonVariants } from '@/components/ui/button'; import { Pagination, PaginationContent, PaginationItem, PaginationLink, } from '@/components/ui/pagination'; import { usePagination } from '@/hooks/use-pagination'; import { cn } from '@/lib/utils'; type NumberedPaginationProps = { currentPage: number; totalPages: number; paginationItemsToDisplay?: number; onPageChange: (page: number) => void; }; function NumberedPagination({ currentPage, totalPages, paginationItemsToDisplay = 5, onPageChange, }: NumberedPaginationProps) { const { pages, showLeftEllipsis, showRightEllipsis } = usePagination({ currentPage, totalPages, paginationItemsToDisplay, }); const handlePageChange = (page: number) => (e: React.MouseEvent) => { e.preventDefault(); if (page >= 1 && page <= totalPages) { onPageChange(page); } }; return ( svg]:opacity-50', )} href='#' onClick={handlePageChange(currentPage - 1)} aria-label='Go to previous page' aria-disabled={currentPage === 1} >
{showLeftEllipsis && ( ... )} {pages.map((page) => ( {page} ))} {showRightEllipsis && ( ... )}
svg]:opacity-50', )} href='#' onClick={handlePageChange(currentPage + 1)} aria-label='Go to next page' aria-disabled={currentPage === totalPages} >
); } export { NumberedPagination };