Pagination.js 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  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 = void 0;
  9. var React = _interopRequireWildcard(require("react"));
  10. var _DoubleLeftOutlined = _interopRequireDefault(require("@ant-design/icons/DoubleLeftOutlined"));
  11. var _DoubleRightOutlined = _interopRequireDefault(require("@ant-design/icons/DoubleRightOutlined"));
  12. var _LeftOutlined = _interopRequireDefault(require("@ant-design/icons/LeftOutlined"));
  13. var _RightOutlined = _interopRequireDefault(require("@ant-design/icons/RightOutlined"));
  14. var _classnames = _interopRequireDefault(require("classnames"));
  15. var _rcPagination = _interopRequireDefault(require("rc-pagination"));
  16. var _en_US = _interopRequireDefault(require("rc-pagination/lib/locale/en_US"));
  17. var _warning = require("../_util/warning");
  18. var _context = require("../config-provider/context");
  19. var _useSize = _interopRequireDefault(require("../config-provider/hooks/useSize"));
  20. var _useBreakpoint = _interopRequireDefault(require("../grid/hooks/useBreakpoint"));
  21. var _locale = require("../locale");
  22. var _select = _interopRequireDefault(require("../select"));
  23. var _internal = require("../theme/internal");
  24. var _style = _interopRequireDefault(require("./style"));
  25. var _bordered = _interopRequireDefault(require("./style/bordered"));
  26. var _useShowSizeChanger = _interopRequireDefault(require("./useShowSizeChanger"));
  27. var __rest = void 0 && (void 0).__rest || function (s, e) {
  28. var t = {};
  29. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
  30. if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
  31. if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
  32. }
  33. return t;
  34. };
  35. const Pagination = props => {
  36. const {
  37. align,
  38. prefixCls: customizePrefixCls,
  39. selectPrefixCls: customizeSelectPrefixCls,
  40. className,
  41. rootClassName,
  42. style,
  43. size: customizeSize,
  44. locale: customLocale,
  45. responsive,
  46. showSizeChanger,
  47. selectComponentClass,
  48. pageSizeOptions
  49. } = props,
  50. restProps = __rest(props, ["align", "prefixCls", "selectPrefixCls", "className", "rootClassName", "style", "size", "locale", "responsive", "showSizeChanger", "selectComponentClass", "pageSizeOptions"]);
  51. const {
  52. xs
  53. } = (0, _useBreakpoint.default)(responsive);
  54. const [, token] = (0, _internal.useToken)();
  55. const {
  56. getPrefixCls,
  57. direction,
  58. showSizeChanger: contextShowSizeChangerConfig,
  59. className: contextClassName,
  60. style: contextStyle
  61. } = (0, _context.useComponentConfig)('pagination');
  62. const prefixCls = getPrefixCls('pagination', customizePrefixCls);
  63. // Style
  64. const [wrapCSSVar, hashId, cssVarCls] = (0, _style.default)(prefixCls);
  65. // ============================== Size ==============================
  66. const mergedSize = (0, _useSize.default)(customizeSize);
  67. const isSmall = mergedSize === 'small' || !!(xs && !mergedSize && responsive);
  68. // ============================= Locale =============================
  69. const [contextLocale] = (0, _locale.useLocale)('Pagination', _en_US.default);
  70. const locale = Object.assign(Object.assign({}, contextLocale), customLocale);
  71. // ========================== Size Changer ==========================
  72. // Merge the props showSizeChanger
  73. const [propShowSizeChanger, propSizeChangerSelectProps] = (0, _useShowSizeChanger.default)(showSizeChanger);
  74. const [contextShowSizeChanger, contextSizeChangerSelectProps] = (0, _useShowSizeChanger.default)(contextShowSizeChangerConfig);
  75. const mergedShowSizeChanger = propShowSizeChanger !== null && propShowSizeChanger !== void 0 ? propShowSizeChanger : contextShowSizeChanger;
  76. const mergedShowSizeChangerSelectProps = propSizeChangerSelectProps !== null && propSizeChangerSelectProps !== void 0 ? propSizeChangerSelectProps : contextSizeChangerSelectProps;
  77. const SizeChanger = selectComponentClass || _select.default;
  78. // Generate options
  79. const mergedPageSizeOptions = React.useMemo(() => {
  80. return pageSizeOptions ? pageSizeOptions.map(option => Number(option)) : undefined;
  81. }, [pageSizeOptions]);
  82. // Render size changer
  83. const sizeChangerRender = info => {
  84. var _a;
  85. const {
  86. disabled,
  87. size: pageSize,
  88. onSizeChange,
  89. 'aria-label': ariaLabel,
  90. className: sizeChangerClassName,
  91. options
  92. } = info;
  93. const {
  94. className: propSizeChangerClassName,
  95. onChange: propSizeChangerOnChange
  96. } = mergedShowSizeChangerSelectProps || {};
  97. // Origin Select is using Select.Option,
  98. // So it make the option value must be string
  99. // Just for compatible
  100. const selectedValue = (_a = options.find(option => String(option.value) === String(pageSize))) === null || _a === void 0 ? void 0 : _a.value;
  101. return /*#__PURE__*/React.createElement(SizeChanger, Object.assign({
  102. disabled: disabled,
  103. showSearch: true,
  104. popupMatchSelectWidth: false,
  105. getPopupContainer: triggerNode => triggerNode.parentNode,
  106. "aria-label": ariaLabel,
  107. options: options
  108. }, mergedShowSizeChangerSelectProps, {
  109. value: selectedValue,
  110. onChange: (nextSize, option) => {
  111. onSizeChange === null || onSizeChange === void 0 ? void 0 : onSizeChange(nextSize);
  112. propSizeChangerOnChange === null || propSizeChangerOnChange === void 0 ? void 0 : propSizeChangerOnChange(nextSize, option);
  113. },
  114. size: isSmall ? 'small' : 'middle',
  115. className: (0, _classnames.default)(sizeChangerClassName, propSizeChangerClassName)
  116. }));
  117. };
  118. if (process.env.NODE_ENV !== 'production') {
  119. const warning = (0, _warning.devUseWarning)('Pagination');
  120. process.env.NODE_ENV !== "production" ? warning(!selectComponentClass, 'usage', '`selectComponentClass` is not official api which will be removed.') : void 0;
  121. }
  122. // ============================= Render =============================
  123. const iconsProps = React.useMemo(() => {
  124. const ellipsis = /*#__PURE__*/React.createElement("span", {
  125. className: `${prefixCls}-item-ellipsis`
  126. }, "\u2022\u2022\u2022");
  127. const prevIcon = /*#__PURE__*/React.createElement("button", {
  128. className: `${prefixCls}-item-link`,
  129. type: "button",
  130. tabIndex: -1
  131. }, direction === 'rtl' ? /*#__PURE__*/React.createElement(_RightOutlined.default, null) : /*#__PURE__*/React.createElement(_LeftOutlined.default, null));
  132. const nextIcon = /*#__PURE__*/React.createElement("button", {
  133. className: `${prefixCls}-item-link`,
  134. type: "button",
  135. tabIndex: -1
  136. }, direction === 'rtl' ? /*#__PURE__*/React.createElement(_LeftOutlined.default, null) : /*#__PURE__*/React.createElement(_RightOutlined.default, null));
  137. const jumpPrevIcon =
  138. /*#__PURE__*/
  139. // biome-ignore lint/a11y/useValidAnchor: it is hard to refactor
  140. React.createElement("a", {
  141. className: `${prefixCls}-item-link`
  142. }, /*#__PURE__*/React.createElement("div", {
  143. className: `${prefixCls}-item-container`
  144. }, direction === 'rtl' ? (/*#__PURE__*/React.createElement(_DoubleRightOutlined.default, {
  145. className: `${prefixCls}-item-link-icon`
  146. })) : (/*#__PURE__*/React.createElement(_DoubleLeftOutlined.default, {
  147. className: `${prefixCls}-item-link-icon`
  148. })), ellipsis));
  149. const jumpNextIcon =
  150. /*#__PURE__*/
  151. // biome-ignore lint/a11y/useValidAnchor: it is hard to refactor
  152. React.createElement("a", {
  153. className: `${prefixCls}-item-link`
  154. }, /*#__PURE__*/React.createElement("div", {
  155. className: `${prefixCls}-item-container`
  156. }, direction === 'rtl' ? (/*#__PURE__*/React.createElement(_DoubleLeftOutlined.default, {
  157. className: `${prefixCls}-item-link-icon`
  158. })) : (/*#__PURE__*/React.createElement(_DoubleRightOutlined.default, {
  159. className: `${prefixCls}-item-link-icon`
  160. })), ellipsis));
  161. return {
  162. prevIcon,
  163. nextIcon,
  164. jumpPrevIcon,
  165. jumpNextIcon
  166. };
  167. }, [direction, prefixCls]);
  168. const selectPrefixCls = getPrefixCls('select', customizeSelectPrefixCls);
  169. const extendedClassName = (0, _classnames.default)({
  170. [`${prefixCls}-${align}`]: !!align,
  171. [`${prefixCls}-mini`]: isSmall,
  172. [`${prefixCls}-rtl`]: direction === 'rtl',
  173. [`${prefixCls}-bordered`]: token.wireframe
  174. }, contextClassName, className, rootClassName, hashId, cssVarCls);
  175. const mergedStyle = Object.assign(Object.assign({}, contextStyle), style);
  176. return wrapCSSVar(/*#__PURE__*/React.createElement(React.Fragment, null, token.wireframe && /*#__PURE__*/React.createElement(_bordered.default, {
  177. prefixCls: prefixCls
  178. }), /*#__PURE__*/React.createElement(_rcPagination.default, Object.assign({}, iconsProps, restProps, {
  179. style: mergedStyle,
  180. prefixCls: prefixCls,
  181. selectPrefixCls: selectPrefixCls,
  182. className: extendedClassName,
  183. locale: locale,
  184. pageSizeOptions: mergedPageSizeOptions,
  185. showSizeChanger: mergedShowSizeChanger,
  186. sizeChangerRender: sizeChangerRender
  187. }))));
  188. };
  189. if (process.env.NODE_ENV !== 'production') {
  190. Pagination.displayName = 'Pagination';
  191. }
  192. var _default = exports.default = Pagination;