ListBody.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. "use strict";
  2. "use client";
  3. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
  4. var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
  5. Object.defineProperty(exports, "__esModule", {
  6. value: true
  7. });
  8. exports.default = exports.OmitProps = void 0;
  9. var React = _interopRequireWildcard(require("react"));
  10. var _classnames = _interopRequireDefault(require("classnames"));
  11. var _useMergedState = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState"));
  12. var _pagination = _interopRequireDefault(require("../pagination"));
  13. var _ListItem = _interopRequireDefault(require("./ListItem"));
  14. const OmitProps = exports.OmitProps = ['handleFilter', 'handleClear', 'checkedKeys'];
  15. const parsePagination = pagination => {
  16. const defaultPagination = {
  17. simple: true,
  18. showSizeChanger: false,
  19. showLessItems: false
  20. };
  21. return Object.assign(Object.assign({}, defaultPagination), pagination);
  22. };
  23. const TransferListBody = (props, ref) => {
  24. const {
  25. prefixCls,
  26. filteredRenderItems,
  27. selectedKeys,
  28. disabled: globalDisabled,
  29. showRemove,
  30. pagination,
  31. onScroll,
  32. onItemSelect,
  33. onItemRemove
  34. } = props;
  35. const [current, setCurrent] = React.useState(1);
  36. const mergedPagination = React.useMemo(() => {
  37. if (!pagination) {
  38. return null;
  39. }
  40. const convertPagination = typeof pagination === 'object' ? pagination : {};
  41. return parsePagination(convertPagination);
  42. }, [pagination]);
  43. const [pageSize, setPageSize] = (0, _useMergedState.default)(10, {
  44. value: mergedPagination === null || mergedPagination === void 0 ? void 0 : mergedPagination.pageSize
  45. });
  46. React.useEffect(() => {
  47. if (mergedPagination) {
  48. const maxPageCount = Math.ceil(filteredRenderItems.length / pageSize);
  49. setCurrent(Math.min(current, maxPageCount));
  50. }
  51. }, [filteredRenderItems, mergedPagination, pageSize]);
  52. const onInternalClick = (item, e) => {
  53. onItemSelect(item.key, !selectedKeys.includes(item.key), e);
  54. };
  55. const onRemove = item => {
  56. onItemRemove === null || onItemRemove === void 0 ? void 0 : onItemRemove([item.key]);
  57. };
  58. const onPageChange = cur => {
  59. setCurrent(cur);
  60. };
  61. const onSizeChange = (cur, size) => {
  62. setCurrent(cur);
  63. setPageSize(size);
  64. };
  65. const memoizedItems = React.useMemo(() => {
  66. const displayItems = mergedPagination ? filteredRenderItems.slice((current - 1) * pageSize, current * pageSize) : filteredRenderItems;
  67. return displayItems;
  68. }, [current, filteredRenderItems, mergedPagination, pageSize]);
  69. React.useImperativeHandle(ref, () => ({
  70. items: memoizedItems
  71. }));
  72. const paginationNode = mergedPagination ? (/*#__PURE__*/React.createElement(_pagination.default, {
  73. size: "small",
  74. disabled: globalDisabled,
  75. simple: mergedPagination.simple,
  76. pageSize: pageSize,
  77. showLessItems: mergedPagination.showLessItems,
  78. showSizeChanger: mergedPagination.showSizeChanger,
  79. className: `${prefixCls}-pagination`,
  80. total: filteredRenderItems.length,
  81. current: current,
  82. onChange: onPageChange,
  83. onShowSizeChange: onSizeChange
  84. })) : null;
  85. const cls = (0, _classnames.default)(`${prefixCls}-content`, {
  86. [`${prefixCls}-content-show-remove`]: showRemove
  87. });
  88. return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("ul", {
  89. className: cls,
  90. onScroll: onScroll
  91. }, (memoizedItems || []).map(({
  92. renderedEl,
  93. renderedText,
  94. item
  95. }) => (/*#__PURE__*/React.createElement(_ListItem.default, {
  96. key: item.key,
  97. item: item,
  98. renderedText: renderedText,
  99. renderedEl: renderedEl,
  100. prefixCls: prefixCls,
  101. showRemove: showRemove,
  102. onClick: onInternalClick,
  103. onRemove: onRemove,
  104. checked: selectedKeys.includes(item.key),
  105. disabled: globalDisabled || item.disabled
  106. })))), paginationNode);
  107. };
  108. if (process.env.NODE_ENV !== 'production') {
  109. TransferListBody.displayName = 'TransferListBody';
  110. }
  111. var _default = exports.default = /*#__PURE__*/React.forwardRef(TransferListBody);