UNPKG

sophia-components

Version:
228 lines (181 loc) 8.8 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 _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _compose = require('recompose/compose'); var _compose2 = _interopRequireDefault(_compose); var _withEvents = require('../../base/withEvents'); var _withEvents2 = _interopRequireDefault(_withEvents); var _withAttrs = require('../../base/withAttrs'); var _withAttrs2 = _interopRequireDefault(_withAttrs); var _withIsHas = require('../../base/withIsHas'); var _withIsHas2 = _interopRequireDefault(_withIsHas); var _helpers = require('../../utils/helpers'); var _PaginationNext = require('./components/PaginationNext'); var _PaginationNext2 = _interopRequireDefault(_PaginationNext); var _PaginationPrevious = require('./components/PaginationPrevious'); var _PaginationPrevious2 = _interopRequireDefault(_PaginationPrevious); var _PaginationLink = require('./components/PaginationLink'); var _PaginationLink2 = _interopRequireDefault(_PaginationLink); var _PaginationList = require('./components/PaginationList'); var _PaginationList2 = _interopRequireDefault(_PaginationList); var _PaginationEllipsis = require('./components/PaginationEllipsis'); var _PaginationEllipsis2 = _interopRequireDefault(_PaginationEllipsis); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } 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); } } /* eslint-disable react/no-array-index-key,no-nested-ternary */ var getPieces = function getPieces(size, sample, loc) { var piece = Math.floor(sample / 2); var array = [].concat(_toConsumableArray(new Array(sample))).map(function (useless, index) { return index + (loc - piece); }); var min = Math.min.apply(null, array); var max = Math.max.apply(null, array); var sum = min < 0 ? min * -1 : max > size - 1 ? size - 1 - max : 0; var result = array.map(function (item, index) { if (index === 0) { return 0; } if (index === array.length - 1) { return size - 1; } return item + sum; }); if (result[1] !== 1) { result.splice(1, 0, null); } if (result[result.length - 2] !== size - 2) { result.splice(result.length - 1, 0, null); } return result; }; var Pagination = function (_Component) { _inherits(Pagination, _Component); function Pagination() { _classCallCheck(this, Pagination); var _this = _possibleConstructorReturn(this, (Pagination.__proto__ || Object.getPrototypeOf(Pagination)).call(this)); _this.constructPaginationElements = _this.constructPaginationElements.bind(_this); _this.handleLinkClick = _this.handleLinkClick.bind(_this); return _this; } _createClass(Pagination, [{ key: 'handleLinkClick', value: function handleLinkClick(index) { var onPageClick = this.props.onPageClick; return !onPageClick ? null : function () { return onPageClick(index); }; } }, { key: 'constructPaginationElements', value: function constructPaginationElements() { var _this2 = this; var _props = this.props, pages = _props.pages, currentIndex = _props.currentIndex, links = _props.links, nextLabel = _props.nextLabel, previousLabel = _props.previousLabel; var prevIndex = currentIndex - 1 < 0 ? 0 : currentIndex - 1; var nextIndex = currentIndex + 1 >= pages ? pages - 1 : currentIndex + 1; var previous = _react2.default.createElement( _PaginationPrevious2.default, { onClick: this.handleLinkClick(prevIndex), disabled: currentIndex === 0 }, previousLabel ); var next = _react2.default.createElement( _PaginationNext2.default, { onClick: this.handleLinkClick(nextIndex), disabled: currentIndex === pages - 1 }, nextLabel ); var arrayIndex = getPieces(pages, links, currentIndex); var listElements = pages <= links ? [].concat(_toConsumableArray(new Array(pages))).map(function (useless, index) { return _react2.default.createElement( _PaginationLink2.default, { onClick: _this2.handleLinkClick(index), key: index, current: index === currentIndex }, index + 1 ); }) : arrayIndex.map(function (index) { return !index && index !== 0 ? _react2.default.createElement(_PaginationEllipsis2.default, null) : _react2.default.createElement( _PaginationLink2.default, { onClick: _this2.handleLinkClick(index), key: index, current: index === currentIndex }, index + 1 ); }); return _react2.default.createElement( _react2.default.Fragment, null, previous, next, _react2.default.createElement( _PaginationList2.default, null, listElements ) ); } }, { key: 'render', value: function render() { var _props2 = this.props, children = _props2.children, _props2$attrs = _props2.attrs, className = _props2$attrs.className, restAttrs = _objectWithoutProperties(_props2$attrs, ['className']), events = _props2.events, pages = _props2.pages; var elements = children || !pages ? children : this.constructPaginationElements(); return _react2.default.createElement( 'nav', _extends({ className: (0, _helpers.classNameJoiner)('pagination', className) }, restAttrs, events), elements ); } }]); return Pagination; }(_react.Component); Pagination.propTypes = { children: _propTypes2.default.node, attrs: _propTypes2.default.shape().isRequired, events: _propTypes2.default.shape().isRequired, pages: _propTypes2.default.number, currentIndex: _propTypes2.default.number, // How many pagination links at same time links: _propTypes2.default.number, onPageClick: _propTypes2.default.func, previousLabel: _propTypes2.default.node, nextLabel: _propTypes2.default.node }; Pagination.defaultProps = { children: null, pages: null, currentIndex: 0, links: 5, onPageClick: null, previousLabel: 'Previous', nextLabel: 'Next' }; exports.default = (0, _compose2.default)((0, _withEvents2.default)(), (0, _withIsHas2.default)((0, _helpers.combineSets)(_withIsHas.helpersIsKeys, _withIsHas.aligmentKeys, _withIsHas.sizeKeys, ['rounded']), _withIsHas.helpersHasKeys), (0, _withAttrs2.default)())(Pagination);