"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 && (
...
)}
>
)}
)}
);
}