UNPKG

3.63 kBJavaScriptView Raw
1import _extends from "@babel/runtime/helpers/esm/extends";
2import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3import _typeof from "@babel/runtime/helpers/esm/typeof";
4
5var __rest = this && this.__rest || function (s, e) {
6 var t = {};
7
8 for (var p in s) {
9 if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
10 }
11
12 if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
13 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
14 }
15 return t;
16};
17
18import { useState } from 'react';
19export var DEFAULT_PAGE_SIZE = 10;
20export function getPaginationParam(pagination, mergedPagination) {
21 var param = {
22 current: mergedPagination.current,
23 pageSize: mergedPagination.pageSize
24 };
25 var paginationObj = pagination && _typeof(pagination) === 'object' ? pagination : {};
26 Object.keys(paginationObj).forEach(function (pageProp) {
27 var value = mergedPagination[pageProp];
28
29 if (typeof value !== 'function') {
30 param[pageProp] = value;
31 }
32 });
33 return param;
34}
35
36function extendsObject() {
37 var result = {};
38
39 for (var _len = arguments.length, list = new Array(_len), _key = 0; _key < _len; _key++) {
40 list[_key] = arguments[_key];
41 }
42
43 list.forEach(function (obj) {
44 if (obj) {
45 Object.keys(obj).forEach(function (key) {
46 var val = obj[key];
47
48 if (val !== undefined) {
49 result[key] = val;
50 }
51 });
52 }
53 });
54 return result;
55}
56
57export default function usePagination(total, pagination, onChange) {
58 var _a = pagination && _typeof(pagination) === 'object' ? pagination : {},
59 _a$total = _a.total,
60 paginationTotal = _a$total === void 0 ? 0 : _a$total,
61 paginationObj = __rest(_a, ["total"]);
62
63 var _useState = useState(function () {
64 return {
65 current: 'defaultCurrent' in paginationObj ? paginationObj.defaultCurrent : 1,
66 pageSize: 'defaultPageSize' in paginationObj ? paginationObj.defaultPageSize : DEFAULT_PAGE_SIZE
67 };
68 }),
69 _useState2 = _slicedToArray(_useState, 2),
70 innerPagination = _useState2[0],
71 setInnerPagination = _useState2[1]; // ============ Basic Pagination Config ============
72
73
74 var mergedPagination = extendsObject(innerPagination, paginationObj, {
75 total: paginationTotal > 0 ? paginationTotal : total
76 }); // Reset `current` if data length or pageSize changed
77
78 var maxPage = Math.ceil((paginationTotal || total) / mergedPagination.pageSize);
79
80 if (mergedPagination.current > maxPage) {
81 // Prevent a maximum page count of 0
82 mergedPagination.current = maxPage || 1;
83 }
84
85 var refreshPagination = function refreshPagination() {
86 var current = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
87 var pageSize = arguments.length > 1 ? arguments[1] : undefined;
88 setInnerPagination({
89 current: current,
90 pageSize: pageSize || mergedPagination.pageSize
91 });
92 };
93
94 var onInternalChange = function onInternalChange(current, pageSize) {
95 var _a;
96
97 if (pagination) {
98 (_a = pagination.onChange) === null || _a === void 0 ? void 0 : _a.call(pagination, current, pageSize);
99 }
100
101 refreshPagination(current, pageSize);
102 onChange(current, pageSize || (mergedPagination === null || mergedPagination === void 0 ? void 0 : mergedPagination.pageSize));
103 };
104
105 if (pagination === false) {
106 return [{}, function () {}];
107 }
108
109 return [_extends(_extends({}, mergedPagination), {
110 onChange: onInternalChange
111 }), refreshPagination];
112}
\No newline at end of file