react-native-ultimate-paginator
Version:
A comprehensive pagination library supporting various pagination scenarios including server-side, client-side, infinite scroll, and load-more functionality
36 lines (31 loc) • 1.06 kB
text/typescript
import { useState, useEffect, useCallback } from 'react';
import { PaginationOptions, PaginationResult } from '../types';
import { calculatePagination } from '../utils/pagination';
export function usePagination(options: PaginationOptions): PaginationResult & {
setPage: (page: number) => void;
setPageSize: (size: number) => void;
} {
const [currentPage, setCurrentPage] = useState(options.currentPage);
const [pageSize, setPageSize] = useState(options.pageSize);
const paginationResult = calculatePagination({
...options,
currentPage,
pageSize,
});
const setPage = useCallback((page: number) => {
const totalPages = Math.ceil(options.totalItems / pageSize);
if (page >= 1 && page <= totalPages) {
setCurrentPage(page);
}
}, [options.totalItems, pageSize]);
useEffect(() => {
if (currentPage > Math.ceil(options.totalItems / pageSize)) {
setCurrentPage(1);
}
}, [options.totalItems, pageSize, currentPage]);
return {
...paginationResult,
setPage,
setPageSize,
};
}