UNPKG

react-bootstrap

Version:

Bootstrap 3 components build with React

231 lines (196 loc) 6.25 kB
'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; exports.__esModule = true; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _BootstrapMixin = require('./BootstrapMixin'); var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin); var _PaginationButton = require('./PaginationButton'); var _PaginationButton2 = _interopRequireDefault(_PaginationButton); var _utilsCustomPropTypes = require('./utils/CustomPropTypes'); var _utilsCustomPropTypes2 = _interopRequireDefault(_utilsCustomPropTypes); var _SafeAnchor = require('./SafeAnchor'); var _SafeAnchor2 = _interopRequireDefault(_SafeAnchor); var Pagination = _react2['default'].createClass({ displayName: 'Pagination', mixins: [_BootstrapMixin2['default']], propTypes: { activePage: _react2['default'].PropTypes.number, items: _react2['default'].PropTypes.number, maxButtons: _react2['default'].PropTypes.number, ellipsis: _react2['default'].PropTypes.bool, first: _react2['default'].PropTypes.bool, last: _react2['default'].PropTypes.bool, prev: _react2['default'].PropTypes.bool, next: _react2['default'].PropTypes.bool, onSelect: _react2['default'].PropTypes.func, /** * You can use a custom element for the buttons */ buttonComponentClass: _utilsCustomPropTypes2['default'].elementType }, getDefaultProps: function getDefaultProps() { return { activePage: 1, items: 1, maxButtons: 0, first: false, last: false, prev: false, next: false, ellipsis: true, buttonComponentClass: _SafeAnchor2['default'], bsClass: 'pagination' }; }, renderPageButtons: function renderPageButtons() { var pageButtons = []; var startPage = undefined, endPage = undefined, hasHiddenPagesAfter = undefined; var _props = this.props; var maxButtons = _props.maxButtons; var activePage = _props.activePage; var items = _props.items; var onSelect = _props.onSelect; var ellipsis = _props.ellipsis; var buttonComponentClass = _props.buttonComponentClass; if (maxButtons) { var hiddenPagesBefore = activePage - parseInt(maxButtons / 2); startPage = hiddenPagesBefore > 1 ? hiddenPagesBefore : 1; hasHiddenPagesAfter = startPage + maxButtons <= items; if (!hasHiddenPagesAfter) { endPage = items; startPage = items - maxButtons + 1; if (startPage < 1) { startPage = 1; } } else { endPage = startPage + maxButtons - 1; } } else { startPage = 1; endPage = items; } for (var pagenumber = startPage; pagenumber <= endPage; pagenumber++) { pageButtons.push(_react2['default'].createElement( _PaginationButton2['default'], { key: pagenumber, eventKey: pagenumber, active: pagenumber === activePage, onSelect: onSelect, buttonComponentClass: buttonComponentClass }, pagenumber )); } if (maxButtons && hasHiddenPagesAfter && ellipsis) { pageButtons.push(_react2['default'].createElement( _PaginationButton2['default'], { key: 'ellipsis', disabled: true, buttonComponentClass: buttonComponentClass }, _react2['default'].createElement( 'span', { 'aria-label': 'More' }, '...' ) )); } return pageButtons; }, renderPrev: function renderPrev() { if (!this.props.prev) { return null; } return _react2['default'].createElement( _PaginationButton2['default'], { key: 'prev', eventKey: this.props.activePage - 1, disabled: this.props.activePage === 1, onSelect: this.props.onSelect, buttonComponentClass: this.props.buttonComponentClass }, _react2['default'].createElement( 'span', { 'aria-label': 'Previous' }, '‹' ) ); }, renderNext: function renderNext() { if (!this.props.next) { return null; } return _react2['default'].createElement( _PaginationButton2['default'], { key: 'next', eventKey: this.props.activePage + 1, disabled: this.props.activePage >= this.props.items, onSelect: this.props.onSelect, buttonComponentClass: this.props.buttonComponentClass }, _react2['default'].createElement( 'span', { 'aria-label': 'Next' }, '›' ) ); }, renderFirst: function renderFirst() { if (!this.props.first) { return null; } return _react2['default'].createElement( _PaginationButton2['default'], { key: 'first', eventKey: 1, disabled: this.props.activePage === 1, onSelect: this.props.onSelect, buttonComponentClass: this.props.buttonComponentClass }, _react2['default'].createElement( 'span', { 'aria-label': 'First' }, '«' ) ); }, renderLast: function renderLast() { if (!this.props.last) { return null; } return _react2['default'].createElement( _PaginationButton2['default'], { key: 'last', eventKey: this.props.items, disabled: this.props.activePage >= this.props.items, onSelect: this.props.onSelect, buttonComponentClass: this.props.buttonComponentClass }, _react2['default'].createElement( 'span', { 'aria-label': 'Last' }, '»' ) ); }, render: function render() { return _react2['default'].createElement( 'ul', _extends({}, this.props, { className: _classnames2['default'](this.props.className, this.getBsClassSet()) }), this.renderFirst(), this.renderPrev(), this.renderPageButtons(), this.renderNext(), this.renderLast() ); } }); exports['default'] = Pagination; module.exports = exports['default'];