UNPKG

@bigfishtv/cockpit

Version:

84 lines (74 loc) 2.1 kB
import React from 'react'; import range from 'lodash/range'; import classnames from 'classnames'; import QueryLink from './QueryLink'; var Pagination = function Pagination(_ref) { var count = _ref.count, current_page = _ref.current_page, has_next_page = _ref.has_next_page, has_prev_page = _ref.has_prev_page, limit = _ref.limit, page_count = _ref.page_count, _ref$modulus = _ref.modulus, modulus = _ref$modulus === undefined ? 8 : _ref$modulus; return page_count < 2 ? React.createElement('nav', null) : React.createElement( 'nav', { className: 'button-group' }, current_page > modulus / 2 + 1 && React.createElement( QueryLink, { query: { page: 1 }, className: 'button button-xsmall' }, React.createElement( 'span', { 'aria-hidden': true }, '\xAB' ), React.createElement( 'span', { className: 'screen-reader' }, 'First' ) ), paginationNumbers(current_page, page_count, modulus).map(function (page) { return React.createElement( QueryLink, { key: page, query: { page: page }, className: classnames('button', 'button-xsmall', { 'button-primary': page === current_page }) }, page ); }), current_page < page_count - modulus / 2 && React.createElement( QueryLink, { query: { page: page_count }, className: 'button button-xsmall' }, React.createElement( 'span', { 'aria-hidden': true }, '\xBB' ), React.createElement( 'span', { className: 'screen-reader' }, 'Last' ) ) ); }; export default Pagination; export function paginationNumbers(current_page, page_count) { var modulus = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 8; if (page_count <= modulus + 1) { return range(1, page_count + 1); } var half = Math.floor(modulus / 2); var end = current_page + half; if (end > page_count) { end = page_count; } var start = current_page - (modulus - (end - current_page)); if (start <= 1) { start = 1; end = current_page + (modulus - current_page) + 1; } return range(start, end + 1); }