'use client'; import { ChangeEventHandler, ReactNode } from 'react'; import { Icon } from '@iconify/react'; import Button from '@/components/Button'; 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, }: { startPage: number; endPage: number; onPageItemClick: (a: number) => void; }) => { const pages = range(startPage, endPage); return ( <> {startPage > 0 && endPage >= startPage && (
)} {(startPage === 0 || endPage < startPage) && ( )} ); }; const Pagination = ({ currentPage = 1, totalItems = 0, itemsPerPage = 10, rowOptions = [10, 20, 50, 100], onPageChange, onPrevPage = () => {}, onNextPage = () => {}, onRowChange, }: { currentPage: number; totalItems: number; itemsPerPage: number; rowOptions?: number[]; onPageChange: (pageNumber: number) => void; onPrevPage: () => void; onNextPage: () => void; onRowChange?: (row: number) => void; }) => { const totalPages = Math.ceil(totalItems / itemsPerPage) === 0 ? 1 : Math.ceil(totalItems / itemsPerPage); const pageChangeHandler = (pageNumber: number) => onPageChange(pageNumber); const firstPageClickHandler = () => onPageChange(1); const lastPageClickHandler = () => onPageChange(totalPages); const rowChangeHandler: ChangeEventHandler = (e) => { onRowChange?.(Number(e.target.value)); }; const DisplayedRowCountSelect = () => (
Showing
); const GoToFirstPageButton = () => ( ); const PrevPageButton = () => ( ); const GoToLastPageButton = () => ( ); const NextPageButton = () => ( ); const PageInfo = () => ( Total Item: {totalItems} | Page {currentPage} of {totalPages} ); 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;