UNPKG

react-bulma-components

Version:

React components for Bulma framework

160 lines (140 loc) 6.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames2 = _interopRequireDefault(require("classnames")); var _normalizer = require("../../services/normalizer"); var _element = _interopRequireDefault(require("../element")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } var getFirstPage = function getFirstPage(current, last, delta) { if (current === 1) { return 1; } var minPage = last - delta * 2; var page = Math.min(current - delta, minPage); return page <= 0 ? 1 : page; }; var getLastPage = function getLastPage(current, total, delta) { if (current === total) { return total; } var maxPage = delta * 2 + 1; var page = Math.max(current + delta, maxPage); return page > total ? total : page; }; var Pagination = function Pagination(_ref) { var _classnames; var current = _ref.current, disabled = _ref.disabled, total = _ref.total, next = _ref.next, previous = _ref.previous, showPrevNext = _ref.showPrevNext, showFirstLast = _ref.showFirstLast, delta = _ref.delta, autoHide = _ref.autoHide, className = _ref.className, size = _ref.size, align = _ref.align, rounded = _ref.rounded, onChange = _ref.onChange, props = _objectWithoutProperties(_ref, ["current", "disabled", "total", "next", "previous", "showPrevNext", "showFirstLast", "delta", "autoHide", "className", "size", "align", "rounded", "onChange"]); if (total <= 1 && autoHide || current > total) { return null; } var lastPage = getLastPage(current, total, delta); var firstPage = getFirstPage(current, lastPage, delta); var prevDisabled = current === 1 || disabled; var nextDisabled = current === total || disabled; return /*#__PURE__*/_react["default"].createElement(_element["default"], _extends({}, props, { className: (0, _classnames2["default"])('pagination', className, (_classnames = {}, _defineProperty(_classnames, "is-".concat(size), size), _defineProperty(_classnames, "is-".concat((0, _normalizer.normalizeAlign)(align)), align), _defineProperty(_classnames, 'is-rounded', rounded), _classnames)), "aria-label": "pagination" }), showPrevNext && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("a", { role: "button", tabIndex: 0, onClick: prevDisabled ? undefined : function () { return onChange(current - 1); }, className: "pagination-previous", title: "This is the first page", disabled: prevDisabled }, previous), /*#__PURE__*/_react["default"].createElement("a", { role: "button", tabIndex: 0, onClick: nextDisabled ? undefined : function () { return onChange(current + 1); }, className: "pagination-next", disabled: nextDisabled }, next)), delta > 0 && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("ul", { className: "pagination-list" }, showFirstLast && current !== 1 && firstPage !== 1 && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("li", { key: 1 }, /*#__PURE__*/_react["default"].createElement("a", { role: "button", tabIndex: 0, className: "pagination-link", onClick: function onClick() { return onChange(1); }, "aria-label": "Page 1", "aria-current": "page", disabled: disabled }, "1")), /*#__PURE__*/_react["default"].createElement("li", null, /*#__PURE__*/_react["default"].createElement("span", { className: "pagination-ellipsis" }, "\u2026"))), Array(lastPage - firstPage + 1).fill(0).map(function (_, i) { return ( /*#__PURE__*/ // eslint-disable-next-line react/no-array-index-key _react["default"].createElement("li", { key: i + firstPage }, /*#__PURE__*/_react["default"].createElement("a", { role: "button", tabIndex: 0, className: (0, _classnames2["default"])('pagination-link', { 'is-current': current === i + firstPage }), onClick: current === firstPage + i ? undefined : function () { return onChange(firstPage + i); }, "aria-label": "Page ".concat(i + firstPage), "aria-current": "page", disabled: disabled }, i + firstPage)) ); }), showFirstLast && current !== lastPage && total !== lastPage && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("li", { key: total }, /*#__PURE__*/_react["default"].createElement("span", { className: "pagination-ellipsis" }, "\u2026")), /*#__PURE__*/_react["default"].createElement("li", null, /*#__PURE__*/_react["default"].createElement("a", { role: "button", tabIndex: 0, className: "pagination-link", onClick: function onClick() { return onChange(total); }, "aria-label": "Page ".concat(total), "aria-current": "page", disabled: disabled }, total)))))); }; Pagination.defaultProps = { total: 1, current: 1, delta: 1, next: 'Next', previous: 'Previous', renderAs: 'nav', showPrevNext: true, autoHide: true }; var _default = Pagination; exports["default"] = _default; //# sourceMappingURL=pagination.js.map