'use client';
import { ReactNode } from 'react';
import { Icon } from '@iconify/react';
import { cn } from '@/lib/helper';
const range = (start: number, end: number) =>
Array.from({ length: end - start + 1 }, (_, i) => i + start);
const PaginationButton = ({
content = '',
disabled = false,
onClick = () => {},
}: {
content?: ReactNode;
disabled?: boolean;
onClick?: () => void;
}) => (
);
const EtcPaginationButton = ({
startPage = 0,
endPage = 0,
onPageItemClick = (pageNumber: number) => {},
}) => {
const pages = range(startPage, endPage);
return (
<>
{startPage > 0 && endPage >= startPage && (
{pages.map((pageNumber) => (
-
onPageItemClick(pageNumber)}
/>
))}
)}
{(startPage === 0 || endPage < startPage) && (
)}
>
);
};
const Pagination = ({
currentPage = 1,
totalItems = 0,
itemsPerPage = 10,
onPageChange = (pageNumber: number) => {},
onPrevPage = () => {},
onNextPage = () => {},
}) => {
const totalPages =
Math.ceil(totalItems / itemsPerPage) === 0
? 1
: Math.ceil(totalItems / itemsPerPage);
const pageChangeHandler = (pageNumber: number) => onPageChange(pageNumber);
return (
{totalPages <= 7 && (
{range(1, totalPages).map((pageNumber) => (
pageChangeHandler(pageNumber)}
/>
))}
)}
{totalPages > 7 && (
pageChangeHandler(1)}
/>
{totalPages >= 2 &&
(currentPage <= 3 || currentPage >= totalPages - 2) && (
pageChangeHandler(2)}
/>
)}
{totalPages >= 2 &&
currentPage > 3 &&
currentPage < totalPages - 2 && (
)}
{totalPages >= 3 &&
(currentPage <= 4 || currentPage >= totalPages - 2) &&
currentPage !== totalPages - 2 && (
pageChangeHandler(3)}
/>
)}
{totalPages >= 7 &&
(currentPage <= 2 || currentPage >= totalPages - 2) && (
= totalPages - 1
? 4
: 1
}
endPage={
currentPage <= 2 || currentPage >= totalPages - 1
? totalPages - 3
: currentPage === totalPages - 2
? totalPages - 4
: 2
}
onPageItemClick={pageChangeHandler}
/>
)}
{totalPages >= 3 &&
currentPage > 4 &&
currentPage < totalPages - 1 && (
pageChangeHandler(currentPage - 1)}
/>
)}
{totalPages >= 7 &&
currentPage > 3 &&
currentPage < totalPages - 2 && (
)}
{totalPages >= 5 &&
currentPage > 2 &&
currentPage < totalPages - 2 && (
pageChangeHandler(currentPage + 1)}
/>
)}
{totalPages >= 5 &&
(currentPage <= 2 || currentPage >= totalPages - 2) && (
pageChangeHandler(totalPages - 2)}
/>
)}
{totalPages >= 6 &&
currentPage > 2 &&
currentPage < totalPages - 3 && (
= 4
? currentPage + 2
: 1
}
endPage={
currentPage <= 3
? totalPages - 2
: currentPage >= 4
? totalPages - 1
: 0
}
onPageItemClick={pageChangeHandler}
/>
)}
{totalPages >= 6 &&
(currentPage <= 3 || currentPage >= totalPages - 3) && (
pageChangeHandler(totalPages - 1)}
/>
)}
{totalPages >= 7 && (
pageChangeHandler(totalPages)}
/>
)}
)}
);
};
export default Pagination;