-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathusePagination.ts
36 lines (33 loc) · 1 KB
/
usePagination.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import { useMemo } from 'react';
import { Pagination } from './core';
import { UsePagination } from './types';
const MIDDLE_PAGES_SIBLING_COUNT = 2;
const EDGE_PAGE_COUNT = 2;
export const usePagination: UsePagination = ({
totalPage,
currentPage,
middlePagesSiblingCount = MIDDLE_PAGES_SIBLING_COUNT,
edgePageCount = EDGE_PAGE_COUNT,
}) => {
const pagination = useMemo(
() =>
new Pagination({
totalPage,
currentPage,
middlePagesSiblingCount: middlePagesSiblingCount,
edgePageCount: edgePageCount,
}),
[totalPage, currentPage, middlePagesSiblingCount, edgePageCount]
);
return {
getMiddlePages: pagination.getMiddlePages,
hasPreviousPage: pagination.hasPreviousPage,
hasNextPage: pagination.hasNextPage,
getPreviousPages: pagination.getPreviousPages,
getNextPages: pagination.getNextPages,
isPreviousTruncable: pagination.isPreviousTruncable,
isNextTruncable: pagination.isNextTruncable,
totalPage,
currentPage,
};
};