UNPKG

hiromi

Version:

React components for Bulma. http://bulma.io/

260 lines (216 loc) 7.7 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _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; }; var _arguments = arguments; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _utils = require('../utils'); var _Link = require('../Link'); var _Link2 = _interopRequireDefault(_Link); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } var PageItems = function PageItems(_ref) { var pagesVisible = _ref.pagesVisible; var onChange = _ref.onChange; var pageCount = _ref.pageCount; var currentPage = _ref.currentPage; var props = _objectWithoutProperties(_ref, ['pagesVisible', 'onChange', 'pageCount', 'currentPage']); var items = []; // compute minLeft and maxRight indeces of page buttons // which exclude first and last pages. var minLeft = currentPage - Math.floor(pagesVisible / 2); if (minLeft < 2) minLeft = 2; var maxRight = minLeft + pagesVisible - 1; if (maxRight >= pageCount) { maxRight = pageCount - 1; minLeft = maxRight - pagesVisible + 1; if (minLeft < 2) minLeft = 2; } for (var i = 1; i <= pageCount; i++) { if (i !== 1 && i !== pageCount && (i < minLeft || i > maxRight)) { continue; } // If it's the min left visible, and there were skipped items if (i === minLeft && minLeft > 2) { items.push(_react2.default.createElement( 'li', { key: 'min' }, '...' )); } var active = i === currentPage; var className = (0, _classnames2.default)({ 'is-active': active }); items.push(_react2.default.createElement( 'li', { key: i.toString() }, _react2.default.createElement( _Link2.default, { className: className, onClick: onPaginate(onChange, i) }, i ) )); // If it's the max right visible, and there will be skipped items if (i === maxRight && maxRight < pageCount - 1) { items.push(_react2.default.createElement( 'li', { key: 'max' }, '...' )); } } return _react2.default.createElement( 'ul', null, items ); }; var onPaginate = function onPaginate(onChange, pageIndex) { return function (event) { var args = [].concat(Array.prototype.slice.call(_arguments)); args.splice(0, 0, pageIndex); onChange.apply(undefined, _toConsumableArray(args)); }; }; var LeftLevel = function LeftLevel(_ref2) { var hasFirst = _ref2.hasFirst; var hasPrevious = _ref2.hasPrevious; var first = _ref2.first; var previous = _ref2.previous; var onChange = _ref2.onChange; var currentPage = _ref2.currentPage; var props = _objectWithoutProperties(_ref2, ['hasFirst', 'hasPrevious', 'first', 'previous', 'onChange', 'currentPage']); var firstItem = hasFirst ? _react2.default.createElement( _Link2.default, { onClick: onPaginate(onChange, 1) }, first ) : null; var previousItem = hasPrevious ? _react2.default.createElement( _Link2.default, { onClick: onPaginate(onChange, currentPage - 1) }, previous ) : null; return _react2.default.createElement( 'div', { className: 'level-left' }, firstItem, previousItem ); }; var RightLevel = function RightLevel(_ref3) { var hasNext = _ref3.hasNext; var hasLast = _ref3.hasLast; var next = _ref3.next; var last = _ref3.last; var onChange = _ref3.onChange; var pageCount = _ref3.pageCount; var currentPage = _ref3.currentPage; var props = _objectWithoutProperties(_ref3, ['hasNext', 'hasLast', 'next', 'last', 'onChange', 'pageCount', 'currentPage']); var lastItem = hasLast ? _react2.default.createElement( _Link2.default, { onClick: onPaginate(onChange, pageCount) }, last ) : null; var nextItem = hasNext ? _react2.default.createElement( _Link2.default, { onClick: onPaginate(onChange, currentPage + 1) }, next ) : null; return _react2.default.createElement( 'div', { className: 'level-right' }, nextItem, lastItem ); }; var Pagination = function Pagination(_ref4) { var currentPage = _ref4.currentPage; var pageCount = _ref4.pageCount; var hasFirst = _ref4.hasFirst; var first = _ref4.first; var hasPrevious = _ref4.hasPrevious; var previous = _ref4.previous; var hasNext = _ref4.hasNext; var next = _ref4.next; var hasLast = _ref4.hasLast; var last = _ref4.last; var className = _ref4.className; var onChange = _ref4.onChange; var pagesVisible = _ref4.pagesVisible; var props = _objectWithoutProperties(_ref4, ['currentPage', 'pageCount', 'hasFirst', 'first', 'hasPrevious', 'previous', 'hasNext', 'next', 'hasLast', 'last', 'className', 'onChange', 'pagesVisible']); var _modifierClassList = (0, _utils.modifierClassList)(props); var classList = _modifierClassList.classList; var finalProps = _objectWithoutProperties(_modifierClassList, ['classList']); classList = (0, _classnames2.default)('level', className, classList); var leftLevel = hasFirst || hasPrevious ? _react2.default.createElement(LeftLevel, { hasFirst: hasFirst, hasPrevious: hasPrevious, first: first, previous: previous, onChange: onChange, currentPage: currentPage }) : null; var rightLevel = hasNext || hasLast ? _react2.default.createElement(RightLevel, { hasNext: hasNext, hasLast: hasLast, next: next, last: last, onChange: onChange, pageCount: pageCount, currentPage: currentPage }) : null; return _react2.default.createElement( 'div', _extends({ className: classList }, finalProps), leftLevel, _react2.default.createElement( 'div', { className: 'level-item has-text-centered' }, _react2.default.createElement( 'nav', _extends({ className: 'pagination' }, finalProps), _react2.default.createElement(PageItems, { pageCount: pageCount, currentPage: currentPage, onChange: onChange, pagesVisible: pagesVisible }) ) ), rightLevel ); }; Pagination.propTypes = _extends({ currentPage: _propTypes2.default.number, pageCount: _propTypes2.default.number, hasFirst: _propTypes2.default.bool, first: _propTypes2.default.node, hasPrevious: _propTypes2.default.bool, previous: _propTypes2.default.node, hasNext: _propTypes2.default.bool, next: _propTypes2.default.node, hasLast: _propTypes2.default.bool, last: _propTypes2.default.node, pagesVisible: _propTypes2.default.number, onChange: _propTypes2.default.func }, _utils.defaultReactProps); Pagination.defaultProps = _extends({ hasFirst: true, first: "First", hasPrevious: true, previous: "Previous", hasNext: true, next: "Next", hasLast: true, last: "Last", pagesVisible: 2 }, _utils.defaultReactPropsValues); exports.default = Pagination;