UNPKG

@coreui/react-pro

Version:

UI Components Library for React.js

86 lines (82 loc) 4.87 kB
'use strict'; 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