import { useCallback, useMemo } from 'react'; import { Button as AriaButton } from 'react-aria-components'; type PaginationProps = { totalPages: number; currentPage: number; pageCount?: number; onPageChange: (page: number) => void; }; // https://design-system.w3.org/components/pagination.html export const Pagination = ({ totalPages, currentPage, pageCount = 10, onPageChange }: PaginationProps) => { const start = useMemo(() => { return Math.floor(currentPage / pageCount) * pageCount; }, [currentPage, pageCount]); const handlePageClick = useCallback( (page: number) => () => { if (typeof onPageChange === 'function' && page >= 0 && page < totalPages) { onPageChange(page); } }, [totalPages, onPageChange], ); const pageArray = useMemo(() => { const arr: number[] = []; // totalPage가 0이면 아무것도 안나와서 최소 1이 되도록 수정 const _totalPages = totalPages > 0 ? totalPages : 1; if (Number.isNaN(start)) { return arr; } for (let i = 0; i < pageCount; i++) { const pageNumber = start + i; if (pageNumber >= _totalPages) { continue; } arr.push(pageNumber); } return arr; }, [start, pageCount, totalPages]); const noPrev = start === 0; const noNext = start + pageCount >= totalPages; return ( ); };