UNPKG

rsuite

Version:

A suite of react components

300 lines (253 loc) 9.11 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var React = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames = _interopRequireDefault(require("classnames")); var _recompose = require("recompose"); var _PaginationButton = _interopRequireDefault(require("./PaginationButton")); var _SafeAnchor = _interopRequireDefault(require("../SafeAnchor")); var _Icon = _interopRequireDefault(require("../Icon")); var _utils = require("../utils"); var _constants = require("../constants"); var Pagination = /*#__PURE__*/ function (_React$Component) { (0, _inheritsLoose2.default)(Pagination, _React$Component); function Pagination() { return _React$Component.apply(this, arguments) || this; } var _proto = Pagination.prototype; /** * Note that `handledProps` are generated automatically during * build with `babel-plugin-transform-react-flow-handled-props` */ _proto.renderPageButtons = function renderPageButtons() { var pageButtons = []; var startPage; var endPage; var hasHiddenPagesAfter; var _this$props = this.props, maxButtons = _this$props.maxButtons, activePage = _this$props.activePage, pages = _this$props.pages, ellipsis = _this$props.ellipsis, boundaryLinks = _this$props.boundaryLinks, locale = _this$props.locale; if (maxButtons) { var hiddenPagesBefore = activePage - Math.floor(maxButtons / 2); startPage = hiddenPagesBefore > 1 ? hiddenPagesBefore : 1; hasHiddenPagesAfter = startPage + maxButtons <= pages; if (!hasHiddenPagesAfter) { endPage = pages; startPage = pages - maxButtons + 1; if (startPage < 1) { startPage = 1; } } else { endPage = startPage + maxButtons - 1; } } else { startPage = 1; endPage = pages; } for (var pagenumber = startPage; pagenumber <= endPage; pagenumber += 1) { pageButtons.push(this.renderItem({ key: pagenumber, eventKey: pagenumber, active: pagenumber === activePage, children: pagenumber })); } if (boundaryLinks && ellipsis && startPage !== 1) { pageButtons.unshift(this.renderItem({ key: 'ellipsisFirst', disabled: true, children: React.createElement("span", { "aria-label": "More" }, ellipsis === true ? React.createElement(_Icon.default, { icon: _constants.PAGINATION_ICON_NAMES.more }) : ellipsis) })); pageButtons.unshift(this.renderItem({ key: 1, eventKey: 1, children: 1 })); } if (maxButtons && hasHiddenPagesAfter && ellipsis) { pageButtons.push(this.renderItem({ key: 'ellipsis', disabled: true, children: React.createElement("span", { "aria-label": "More", title: locale.more }, ellipsis === true ? React.createElement(_Icon.default, { icon: _constants.PAGINATION_ICON_NAMES.more }) : ellipsis) })); if (boundaryLinks && endPage !== pages) { pageButtons.push(this.renderItem({ key: pages, eventKey: pages, disabled: false, children: pages })); } } return pageButtons; }; _proto.renderPrev = function renderPrev() { var _this$props2 = this.props, activePage = _this$props2.activePage, prev = _this$props2.prev, locale = _this$props2.locale; if (!prev) { return null; } return this.renderItem({ key: 'prev', eventKey: activePage - 1, disabled: activePage === 1, children: React.createElement("span", { "aria-label": "Previous", title: locale.prev }, prev === true ? React.createElement(_Icon.default, { icon: _constants.PAGINATION_ICON_NAMES.prev }) : prev) }); }; _proto.renderNext = function renderNext() { var _this$props3 = this.props, pages = _this$props3.pages, activePage = _this$props3.activePage, next = _this$props3.next, locale = _this$props3.locale; if (!next) { return null; } return this.renderItem({ key: 'next', eventKey: activePage + 1, disabled: activePage >= pages, children: React.createElement("span", { "aria-label": "Next", title: locale.next }, next === true ? React.createElement(_Icon.default, { icon: _constants.PAGINATION_ICON_NAMES.next }) : next) }); }; _proto.renderFirst = function renderFirst() { var _this$props4 = this.props, activePage = _this$props4.activePage, first = _this$props4.first, locale = _this$props4.locale; if (!first) { return null; } return this.renderItem({ key: 'first', eventKey: 1, disabled: activePage === 1, children: React.createElement("span", { "aria-label": "First", title: locale.first }, first === true ? React.createElement(_Icon.default, { icon: _constants.PAGINATION_ICON_NAMES.first }) : first) }); }; _proto.renderLast = function renderLast() { var _this$props5 = this.props, pages = _this$props5.pages, activePage = _this$props5.activePage, last = _this$props5.last, locale = _this$props5.locale; if (!last) { return null; } return this.renderItem({ key: 'last', eventKey: pages, disabled: activePage >= pages, children: React.createElement("span", { "aria-label": "Last", title: locale.last }, last === true ? React.createElement(_Icon.default, { icon: _constants.PAGINATION_ICON_NAMES.last }) : last) }); }; _proto.renderItem = function renderItem(props) { var _this$props6 = this.props, onSelect = _this$props6.onSelect, buttonComponentClass = _this$props6.buttonComponentClass, disabled = _this$props6.disabled; var disabledButton = props.disabled; if (typeof disabled === 'function') { disabledButton = disabled(props.eventKey); } else if (typeof disabled === 'boolean') { disabledButton = disabled; } return React.createElement(_PaginationButton.default, (0, _extends2.default)({}, props, { disabled: disabledButton, onSelect: disabledButton ? null : onSelect, componentClass: buttonComponentClass })); }; _proto.render = function render() { var _this$props7 = this.props, className = _this$props7.className, classPrefix = _this$props7.classPrefix, rest = (0, _objectWithoutPropertiesLoose2.default)(_this$props7, ["className", "classPrefix"]); var unhandled = (0, _utils.getUnhandledProps)(Pagination, rest); return React.createElement("ul", (0, _extends2.default)({ className: (0, _classnames.default)(classPrefix, className) }, unhandled), this.renderFirst(), this.renderPrev(), this.renderPageButtons(), this.renderNext(), this.renderLast()); }; return Pagination; }(React.Component); Pagination.propTypes = { activePage: _propTypes.default.number, pages: _propTypes.default.number, maxButtons: _propTypes.default.number, boundaryLinks: _propTypes.default.bool, ellipsis: _propTypes.default.oneOfType([_propTypes.default.bool, _propTypes.default.node]), first: _propTypes.default.oneOfType([_propTypes.default.bool, _propTypes.default.node]), last: _propTypes.default.oneOfType([_propTypes.default.bool, _propTypes.default.node]), prev: _propTypes.default.oneOfType([_propTypes.default.bool, _propTypes.default.node]), next: _propTypes.default.oneOfType([_propTypes.default.bool, _propTypes.default.node]), buttonComponentClass: _propTypes.default.elementType, className: _propTypes.default.string, classPrefix: _propTypes.default.string, locale: _propTypes.default.object, disabled: _propTypes.default.oneOfType([_propTypes.default.bool, _propTypes.default.func]), onSelect: _propTypes.default.func }; Pagination.defaultProps = { activePage: 1, pages: 1, maxButtons: 0, buttonComponentClass: _SafeAnchor.default, locale: { more: 'More', prev: 'Previous', next: 'Next', first: 'First', last: 'Last' } }; Pagination.handledProps = []; var _default = (0, _recompose.compose)((0, _utils.withStyleProps)({ hasSize: true }), (0, _utils.defaultProps)({ classPrefix: 'pagination' }))(Pagination); exports.default = _default; module.exports = exports.default;