@coreui/react-pro
Version:
UI Components Library for React.js
86 lines (82 loc) • 4.87 kB
JavaScript
;
var tslib_es6 = require('../../node_modules/tslib/tslib.es6.js');
var React = require('react');
var index = require('../../_virtual/index.js');
var PropTypes = require('prop-types');
var CPagination = require('../pagination/CPagination.js');
var CPaginationItem = require('../pagination/CPaginationItem.js');
const CSmartPagination = React.forwardRef((_a, ref) => {
var { className, activePage = 1, align = 'start', arrows = true, dots = true, doubleArrows = true, firstButton = React.createElement(React.Fragment, null, "\u00AB"), lastButton = React.createElement(React.Fragment, null, "\u00BB"), limit = 5, nextButton = React.createElement(React.Fragment, null, "\u203A"), onActivePageChange, pages, previousButton = React.createElement(React.Fragment, null, "\u2039"), size } = _a, rest = tslib_es6.__rest(_a, ["className", "activePage", "align", "arrows", "dots", "doubleArrows", "firstButton", "lastButton", "limit", "nextButton", "onActivePageChange", "pages", "previousButton", "size"]);
const showDots = (() => {
return dots && limit > 4 && limit < pages;
})();
const maxPrevItems = (() => {
return Math.floor((limit - 1) / 2);
})();
const maxNextItems = (() => {
return Math.ceil((limit - 1) / 2);
})();
const beforeDots = (() => {
return showDots && activePage > maxPrevItems + 1;
})();
const afterDots = (() => {
return showDots && activePage < pages - maxNextItems;
})();
const computedLimit = (() => {
return limit - (afterDots ? 1 : 0) - (beforeDots ? 1 : 0);
})();
const range = (() => {
return activePage + maxNextItems;
})();
const lastItem = (() => {
return range >= pages ? pages : range - (afterDots ? 1 : 0);
})();
const itemsAmount = (() => {
return pages < computedLimit ? pages : computedLimit;
})();
const items = (() => {
return activePage - maxPrevItems <= 1
? Array.from({
length: itemsAmount,
}, (_v, i) => i + 1)
: Array.from({
length: itemsAmount,
}, (_v, i) => {
return lastItem - i;
}).reverse();
})();
const setPage = (number) => {
if (number !== activePage) {
onActivePageChange && onActivePageChange(number);
}
};
return (React.createElement(CPagination.CPagination, Object.assign({ className: index.default(`justify-content-${align}`, className), "aria-label": "pagination", size: size }, rest, { ref: ref }),
doubleArrows && (React.createElement(CPaginationItem.CPaginationItem, { onClick: () => setPage(1), "aria-label": "Go to first page", "aria-disabled": activePage === 1, disabled: activePage === 1 }, firstButton)),
arrows && (React.createElement(CPaginationItem.CPaginationItem, { onClick: () => setPage(activePage - 1), "aria-label": "Go to previous page", "aria-disabled": activePage === 1, disabled: activePage === 1 }, previousButton)),
beforeDots && (React.createElement(CPaginationItem.CPaginationItem, { role: "separator", disabled: true }, "\u2026")),
items.map((i) => {
return (React.createElement(CPaginationItem.CPaginationItem, { onClick: () => setPage(i), "aria-label": activePage === i ? `Current page ${i}` : `Go to page ${i}`, active: activePage === i, key: i }, i));
}),
afterDots && (React.createElement(CPaginationItem.CPaginationItem, { role: "separator", disabled: true }, "\u2026")),
arrows && (React.createElement(CPaginationItem.CPaginationItem, { onClick: () => setPage(activePage + 1), "aria-label": "Go to next page", "aria-disabled": activePage === pages, disabled: activePage === pages }, nextButton)),
doubleArrows && (React.createElement(CPaginationItem.CPaginationItem, { onClick: () => setPage(pages), "aria-label": "Go to last page", "aria-disabled": activePage === pages, disabled: activePage === pages }, lastButton))));
});
CSmartPagination.propTypes = {
className: PropTypes.oneOfType([PropTypes.string]),
activePage: PropTypes.number,
dots: PropTypes.bool,
arrows: PropTypes.bool,
doubleArrows: PropTypes.bool,
firstButton: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),
previousButton: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),
nextButton: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),
lastButton: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),
size: PropTypes.oneOf(['sm', 'lg']),
align: PropTypes.oneOf(['start', 'center', 'end']),
limit: PropTypes.number,
pages: PropTypes.number.isRequired,
onActivePageChange: PropTypes.func,
};
CSmartPagination.displayName = 'CSmartPagination';
exports.CSmartPagination = CSmartPagination;
//# sourceMappingURL=CSmartPagination.js.map