"use client"; import { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, } from "@/components/ui/pagination"; import { useEffect, useState } from "react"; export default function CustomPagination(props: { totalPage: number; onPageChange: (data: number) => void; }) { const { totalPage, onPageChange } = props; const [page, setPage] = useState(1); useEffect(() => { onPageChange(page); }, [page]); const renderPageNumbers = () => { const pageNumbers = []; const halfWindow = Math.floor(5 / 2); let startPage = Math.max(2, page - halfWindow); let endPage = Math.min(totalPage - 1, page + halfWindow); if (endPage - startPage + 1 < 5) { if (page <= halfWindow) { endPage = Math.min( totalPage - 1, endPage + (5 - (endPage - startPage + 1)) ); } else if (page + halfWindow >= totalPage) { startPage = Math.max(2, startPage - (5 - (endPage - startPage + 1))); } } for (let i = startPage; i <= endPage; i++) { pageNumbers.push( setPage(i)}> {i} ); } return pageNumbers; }; return ( (page > 10 ? setPage(page - 10) : "")} > {/* */} (page > 1 ? setPage(page - 1) : "")} /> setPage(1)} isActive={page === 1} > {1} {page > 4 && ( setPage(page - 1)} /> )} {renderPageNumbers()} {page < totalPage - 3 && ( setPage(page + 1)} /> )} {totalPage > 1 && ( setPage(totalPage)} isActive={page === totalPage} > {totalPage} )} (page < totalPage ? setPage(page + 1) : "")} /> (page < totalPage - 10 ? setPage(page + 10) : "")} > {/* */} ); }