123456789101112131415161718192021222324252627282930 |
- import { useEffect, useState } from 'react';
- function usePagination(data: any[], itemsPerPage: number) {
- const [currentPage, setCurrentPage] = useState(1);
- const [maxPage, setMaxPage] = useState(Math.ceil(data.length / itemsPerPage));
- useEffect(() => setMaxPage(Math.ceil(data.length / itemsPerPage)), [data, itemsPerPage]);
- function currentData() {
- const begin = (currentPage - 1) * itemsPerPage;
- const end = begin + itemsPerPage;
- return data.slice(begin, end);
- }
- function next() {
- setCurrentPage((currentPage) => Math.min(currentPage + 1, maxPage));
- }
- function prev() {
- setCurrentPage((currentPage) => Math.max(currentPage - 1, 1));
- }
- function jump(page: number) {
- const pageNumber = Math.max(1, page);
- setCurrentPage((currentPage) => Math.min(pageNumber, maxPage));
- }
- return { next, prev, jump, currentData, currentPage, maxPage };
- }
- export default usePagination;
|