"use client"; import { cn } from "@/shared/utils/cn"; import Button from "./Button"; export default function Pagination({ currentPage, pageSize, totalItems, onPageChange, onPageSizeChange, className, }) { const totalPages = Math.ceil(totalItems / pageSize); const startItem = totalItems > 0 ? (currentPage - 1) * pageSize + 1 : 0; const endItem = Math.min(currentPage * pageSize, totalItems); const getPageNumbers = () => { const pages = []; const showMax = 5; let start = Math.max(1, currentPage - 2); let end = Math.min(totalPages, start + showMax - 1); if (end - start + 1 < showMax) { start = Math.max(1, end - showMax + 1); } for (let i = start; i <= end; i++) { pages.push(i); } return pages; }; const pageNumbers = getPageNumbers(); return (
{/* Info text */} {totalItems > 0 && (
Showing {startItem} to{" "} {endItem} of{" "} {totalItems} results
)}
{/* Page size selector */} {onPageSizeChange && (
Rows:
)} {totalPages > 1 && (
{pageNumbers[0] > 1 && ( <> {pageNumbers[0] > 2 && ( ... )} )} {pageNumbers.map((page) => ( ))} {pageNumbers[pageNumbers.length - 1] < totalPages && ( <> {pageNumbers[pageNumbers.length - 1] < totalPages - 1 && ( ... )} )}
)}
); }