ListBody.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.transferListBodyProps = exports.default = void 0;
  7. var _vue = require("vue");
  8. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  9. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  10. var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
  11. var _classNames2 = _interopRequireDefault(require("../_util/classNames"));
  12. var _ListItem = _interopRequireDefault(require("./ListItem"));
  13. var _pagination = _interopRequireDefault(require("../pagination"));
  14. var _vueTypes = _interopRequireDefault(require("../_util/vue-types"));
  15. var transferListBodyProps = {
  16. prefixCls: String,
  17. filteredRenderItems: _vueTypes.default.array.def([]),
  18. selectedKeys: _vueTypes.default.array,
  19. disabled: {
  20. type: Boolean,
  21. default: undefined
  22. },
  23. showRemove: {
  24. type: Boolean,
  25. default: undefined
  26. },
  27. pagination: _vueTypes.default.any,
  28. onItemSelect: Function,
  29. onScroll: Function,
  30. onItemRemove: Function
  31. };
  32. exports.transferListBodyProps = transferListBodyProps;
  33. function parsePagination(pagination) {
  34. if (!pagination) {
  35. return null;
  36. }
  37. var defaultPagination = {
  38. pageSize: 10
  39. };
  40. if ((0, _typeof2.default)(pagination) === 'object') {
  41. return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, defaultPagination), pagination);
  42. }
  43. return defaultPagination;
  44. }
  45. var ListBody = (0, _vue.defineComponent)({
  46. compatConfig: {
  47. MODE: 3
  48. },
  49. name: 'ListBody',
  50. inheritAttrs: false,
  51. props: transferListBodyProps,
  52. emits: ['itemSelect', 'itemRemove', 'scroll'],
  53. setup: function setup(props, _ref) {
  54. var emit = _ref.emit,
  55. expose = _ref.expose;
  56. var current = (0, _vue.ref)(1);
  57. var handleItemSelect = function handleItemSelect(item) {
  58. var selectedKeys = props.selectedKeys;
  59. var checked = selectedKeys.indexOf(item.key) >= 0;
  60. emit('itemSelect', item.key, !checked);
  61. };
  62. var handleItemRemove = function handleItemRemove(item) {
  63. emit('itemRemove', [item.key]);
  64. };
  65. var handleScroll = function handleScroll(e) {
  66. emit('scroll', e);
  67. };
  68. var mergedPagination = (0, _vue.computed)(function () {
  69. return parsePagination(props.pagination);
  70. });
  71. (0, _vue.watch)([mergedPagination, function () {
  72. return props.filteredRenderItems;
  73. }], function () {
  74. if (mergedPagination.value) {
  75. // Calculate the page number
  76. var maxPageCount = Math.ceil(props.filteredRenderItems.length / mergedPagination.value.pageSize);
  77. if (current.value > maxPageCount) {
  78. current.value = maxPageCount;
  79. }
  80. }
  81. }, {
  82. immediate: true
  83. });
  84. var items = (0, _vue.computed)(function () {
  85. var filteredRenderItems = props.filteredRenderItems;
  86. var displayItems = filteredRenderItems;
  87. if (mergedPagination.value) {
  88. displayItems = filteredRenderItems.slice((current.value - 1) * mergedPagination.value.pageSize, current.value * mergedPagination.value.pageSize);
  89. }
  90. return displayItems;
  91. });
  92. var onPageChange = function onPageChange(cur) {
  93. current.value = cur;
  94. };
  95. expose({
  96. items: items
  97. });
  98. return function () {
  99. var prefixCls = props.prefixCls,
  100. filteredRenderItems = props.filteredRenderItems,
  101. selectedKeys = props.selectedKeys,
  102. globalDisabled = props.disabled,
  103. showRemove = props.showRemove;
  104. var paginationNode = null;
  105. if (mergedPagination.value) {
  106. paginationNode = (0, _vue.createVNode)(_pagination.default, {
  107. "simple": true,
  108. "size": "small",
  109. "disabled": globalDisabled,
  110. "class": "".concat(prefixCls, "-pagination"),
  111. "total": filteredRenderItems.length,
  112. "pageSize": mergedPagination.value.pageSize,
  113. "current": current.value,
  114. "onChange": onPageChange
  115. }, null);
  116. }
  117. var itemsList = items.value.map(function (_ref2) {
  118. var renderedEl = _ref2.renderedEl,
  119. renderedText = _ref2.renderedText,
  120. item = _ref2.item;
  121. var disabled = item.disabled;
  122. var checked = selectedKeys.indexOf(item.key) >= 0;
  123. return (0, _vue.createVNode)(_ListItem.default, {
  124. "disabled": globalDisabled || disabled,
  125. "key": item.key,
  126. "item": item,
  127. "renderedText": renderedText,
  128. "renderedEl": renderedEl,
  129. "checked": checked,
  130. "prefixCls": prefixCls,
  131. "onClick": handleItemSelect,
  132. "onRemove": handleItemRemove,
  133. "showRemove": showRemove
  134. }, null);
  135. });
  136. return (0, _vue.createVNode)(_vue.Fragment, null, [(0, _vue.createVNode)("ul", {
  137. "class": (0, _classNames2.default)("".concat(prefixCls, "-content"), (0, _defineProperty2.default)({}, "".concat(prefixCls, "-content-show-remove"), showRemove)),
  138. "onScroll": handleScroll
  139. }, [itemsList]), paginationNode]);
  140. };
  141. }
  142. });
  143. var _default = ListBody;
  144. exports.default = _default;