interface PaginationProps {
totalItems: number;
itemsPerPage: number;
currentPage: number;
onPageChange: (page: number) => void;
}
export default function Pagination({ totalItems, itemsPerPage, currentPage, onPageChange }: PaginationProps) {
const totalPages = Math.ceil(totalItems / itemsPerPage);
if (totalPages <= 1) return null;
const pageNumbers = [];
const maxVisiblePages = 5;
let startPage = Math.max(1, currentPage - Math.floor(maxVisiblePages / 2));
let endPage = Math.min(totalPages, startPage + maxVisiblePages - 1);
if (endPage - startPage + 1 < maxVisiblePages) {
startPage = Math.max(1, endPage - maxVisiblePages + 1);
}
for (let i = startPage; i <= endPage; i++) {
pageNumbers.push(i);
}
return (
{startPage > 1 && (
<>
{startPage > 2 && ...}
>
)}
{pageNumbers.map((number) => (
))}
{endPage < totalPages && (
<>
{endPage < totalPages - 1 && ...}
>
)}
);
}