usePagination.js 3.3 KB

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