linkmore-design
Version:
🌈 🚀lm组件库。🚀
103 lines (99 loc) • 3.99 kB
JavaScript
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
var _excluded = ["defaultPageSize", "defaultCurrent", "refreshDeps"];
import _regeneratorRuntime from "@babel/runtime/regenerator";
import { useState, useCallback, useEffect, useMemo } from 'react';
var usePagination = function usePagination(service) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var _options$defaultPageS = options.defaultPageSize,
defaultPageSize = _options$defaultPageS === void 0 ? 20 : _options$defaultPageS,
_options$defaultCurre = options.defaultCurrent,
defaultCurrent = _options$defaultCurre === void 0 ? 1 : _options$defaultCurre,
_options$refreshDeps = options.refreshDeps,
refreshDeps = _options$refreshDeps === void 0 ? [] : _options$refreshDeps,
rest = _objectWithoutProperties(options, _excluded);
var _useState = useState({
loading: false,
data: {
pageIndex: defaultCurrent,
pageSize: defaultPageSize
}
}),
_useState2 = _slicedToArray(_useState, 2),
result = _useState2[0],
setResult = _useState2[1];
var getRequest = useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
var c,
p,
res,
_args = arguments;
return _regeneratorRuntime.wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
c = _args.length > 0 && _args[0] !== undefined ? _args[0] : defaultCurrent;
p = _args.length > 1 && _args[1] !== undefined ? _args[1] : defaultPageSize;
setResult(function (old) {
return _objectSpread(_objectSpread({}, old), {}, {
loading: true
});
});
_context.next = 5;
return service(_objectSpread({
current: c,
pageSize: p
}, rest));
case 5:
res = _context.sent;
setResult(function (old) {
return _objectSpread(_objectSpread(_objectSpread({}, old), res), {}, {
loading: false
});
});
case 7:
case "end":
return _context.stop();
}
}, _callee);
})), [service].concat(_toConsumableArray(refreshDeps)));
var _ref2 = (result === null || result === void 0 ? void 0 : result.data) || {},
_ref2$pageIndex = _ref2.pageIndex,
pageIndex = _ref2$pageIndex === void 0 ? 1 : _ref2$pageIndex,
_ref2$pageSize = _ref2.pageSize,
pageSize = _ref2$pageSize === void 0 ? defaultPageSize : _ref2$pageSize,
_ref2$totalCount = _ref2.totalCount,
totalCount = _ref2$totalCount === void 0 ? 0 : _ref2$totalCount;
// 总页数
var totalPage = useMemo(function () {
return Math.ceil(totalCount / pageSize);
}, [pageSize, totalCount]);
// 分页改变触发
var onChange = function onChange(c, p) {
return getRequest(c, p);
};
// 手动重取数据, 不传入数据则触发刷新
var refetch = function refetch(_ref3) {
var _ref3$current = _ref3.current,
c = _ref3$current === void 0 ? pageIndex : _ref3$current,
_ref3$pageSize = _ref3.pageSize,
p = _ref3$pageSize === void 0 ? pageSize : _ref3$pageSize;
return getRequest(c, p);
};
// 初始化获取数据
useEffect(function () {
getRequest(defaultCurrent, defaultPageSize);
}, [getRequest]);
return _objectSpread(_objectSpread({}, result), {}, {
refetch: refetch,
pagination: {
current: pageIndex,
pageSize: pageSize,
total: totalCount,
totalPage: totalPage,
onChange: onChange
}
});
};
export default usePagination;