UNPKG

linkmore-design

Version:

🌈 🚀lm组件库。🚀

103 lines (99 loc) 3.99 kB
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;