@bigfishtv/cockpit
Version:
84 lines (74 loc) • 2.1 kB
JavaScript
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);
}