usePagination.js 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.DEFAULT_PAGE_SIZE = void 0;
  7. exports.default = usePagination;
  8. exports.getPaginationParam = getPaginationParam;
  9. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  10. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
  11. var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
  12. var _useState3 = _interopRequireDefault(require("../../_util/hooks/useState"));
  13. var _vue = require("vue");
  14. var DEFAULT_PAGE_SIZE = 10;
  15. exports.DEFAULT_PAGE_SIZE = DEFAULT_PAGE_SIZE;
  16. function getPaginationParam(pagination, mergedPagination) {
  17. var param = {
  18. current: mergedPagination.current,
  19. pageSize: mergedPagination.pageSize
  20. };
  21. var paginationObj = pagination && (0, _typeof2.default)(pagination) === 'object' ? pagination : {};
  22. Object.keys(paginationObj).forEach(function (pageProp) {
  23. var value = mergedPagination[pageProp];
  24. if (typeof value !== 'function') {
  25. param[pageProp] = value;
  26. }
  27. });
  28. return param;
  29. }
  30. function extendsObject() {
  31. var result = {};
  32. for (var _len = arguments.length, list = new Array(_len), _key = 0; _key < _len; _key++) {
  33. list[_key] = arguments[_key];
  34. }
  35. list.forEach(function (obj) {
  36. if (obj) {
  37. Object.keys(obj).forEach(function (key) {
  38. var val = obj[key];
  39. if (val !== undefined) {
  40. result[key] = val;
  41. }
  42. });
  43. }
  44. });
  45. return result;
  46. }
  47. function usePagination(totalRef, paginationRef, onChange) {
  48. var pagination = (0, _vue.computed)(function () {
  49. return paginationRef.value && (0, _typeof2.default)(paginationRef.value) === 'object' ? paginationRef.value : {};
  50. });
  51. var paginationTotal = (0, _vue.computed)(function () {
  52. return pagination.value.total || 0;
  53. });
  54. var _useState = (0, _useState3.default)(function () {
  55. return {
  56. current: 'defaultCurrent' in pagination.value ? pagination.value.defaultCurrent : 1,
  57. pageSize: 'defaultPageSize' in pagination.value ? pagination.value.defaultPageSize : DEFAULT_PAGE_SIZE
  58. };
  59. }),
  60. _useState2 = (0, _slicedToArray2.default)(_useState, 2),
  61. innerPagination = _useState2[0],
  62. setInnerPagination = _useState2[1];
  63. // ============ Basic Pagination Config ============
  64. var mergedPagination = (0, _vue.computed)(function () {
  65. var mP = extendsObject(innerPagination.value, pagination.value, {
  66. total: paginationTotal.value > 0 ? paginationTotal.value : totalRef.value
  67. });
  68. // Reset `current` if data length or pageSize changed
  69. var maxPage = Math.ceil((paginationTotal.value || totalRef.value) / mP.pageSize);
  70. if (mP.current > maxPage) {
  71. // Prevent a maximum page count of 0
  72. mP.current = maxPage || 1;
  73. }
  74. return mP;
  75. });
  76. var refreshPagination = function refreshPagination(current, pageSize) {
  77. if (pagination.value === false) return;
  78. setInnerPagination({
  79. current: current !== null && current !== void 0 ? current : 1,
  80. pageSize: pageSize || mergedPagination.value.pageSize
  81. });
  82. };
  83. var onInternalChange = function onInternalChange(current, pageSize) {
  84. if (pagination.value) {
  85. var _pagination$value$onC, _pagination$value;
  86. (_pagination$value$onC = (_pagination$value = pagination.value).onChange) === null || _pagination$value$onC === void 0 ? void 0 : _pagination$value$onC.call(_pagination$value, current, pageSize);
  87. }
  88. refreshPagination(current, pageSize);
  89. onChange(current, pageSize || mergedPagination.value.pageSize);
  90. };
  91. return [(0, _vue.computed)(function () {
  92. return pagination.value === false ? {} : (0, _objectSpread2.default)((0, _objectSpread2.default)({}, mergedPagination.value), {}, {
  93. onChange: onInternalChange
  94. });
  95. }), refreshPagination];
  96. }