diff --git a/dashboard/15-final/app/ui/invoices/pagination.tsx b/dashboard/15-final/app/ui/invoices/pagination.tsx index 044a854..5af0925 100644 --- a/dashboard/15-final/app/ui/invoices/pagination.tsx +++ b/dashboard/15-final/app/ui/invoices/pagination.tsx @@ -19,18 +19,38 @@ export default function Pagination({ const PreviousPageTag = Link; const NextPageTag = Link; - const createPageUrl = (pageNumber: number) => { + const createPageUrl = (pageNumber: number | string) => { const params = new URLSearchParams(searchParams); params.set('page', pageNumber.toString()); return `${pathname}?${params.toString()}`; }; + let pagesToShow = []; + + if (totalPages <= 7) { + pagesToShow = allPages; + } else if (currentPage <= 3) { + pagesToShow = [1, 2, 3, '...', totalPages - 1, totalPages]; + } else if (currentPage >= totalPages - 2) { + pagesToShow = [1, 2, '...', totalPages - 2, totalPages - 1, totalPages]; + } else { + pagesToShow = [ + 1, + '...', + currentPage - 1, + currentPage, + currentPage + 1, + '...', + totalPages, + ]; + } + return (
- {allPages.map((page, i) => { - const PageTag = page === currentPage ? 'p' : Link; + {pagesToShow.map((page, i) => { + if (page === '...') { + return ( + + ... + + ); + } + + const PageTag = page === currentPage || page === '...' ? 'p' : Link; return (