@arun-s-aot/formio-react
Version:
React renderer for formsflow form.io forms.
118 lines (117 loc) • 4.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
require("core-js/modules/es.array.push.js");
var _propTypes = _interopRequireDefault(require("prop-types"));
var _react = _interopRequireDefault(require("react"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const LEFT_PAGE = 'LEFT';
const RIGHT_PAGE = 'RIGHT';
function range(from, to) {
let step = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
let i = from;
const range = [];
while (i <= to) {
range.push(i);
i += step;
}
return range;
}
function getPageNumbers(_ref) {
let {
currentPage,
pageNeighbours,
totalPages
} = _ref;
const totalNumbers = pageNeighbours * 2 + 3;
const totalBlocks = totalNumbers + 2;
if (totalPages > totalBlocks) {
const calculatedStartPage = Math.max(2, currentPage - pageNeighbours);
const calculatedEndPage = Math.min(totalPages - 1, currentPage + pageNeighbours);
const startPage = calculatedStartPage === 3 ? 2 : calculatedStartPage;
const endPage = calculatedEndPage === totalPages - 2 ? totalPages - 1 : calculatedEndPage;
let pages = range(startPage, endPage);
const hasLeftSpill = startPage > 2;
const hasRightSpill = totalPages - endPage > 1;
const spillOffset = totalNumbers - (pages.length + 1);
let extraPages;
if (hasLeftSpill && !hasRightSpill) {
extraPages = range(startPage - spillOffset, startPage - 1);
pages = [LEFT_PAGE, ...extraPages, ...pages];
} else if (!hasLeftSpill && hasRightSpill) {
extraPages = range(endPage + 1, endPage + spillOffset);
pages = [...pages, ...extraPages, RIGHT_PAGE];
} else {
pages = [LEFT_PAGE, ...pages, RIGHT_PAGE];
}
return [1, ...pages, totalPages];
}
return range(1, totalPages);
}
function Pagination(_ref2) {
let {
activePage = 1,
pageNeighbours = 1,
prev = 'Previous',
next = 'Next',
pages,
onSelect
} = _ref2;
const pageNumbers = getPageNumbers({
currentPage: activePage,
pageNeighbours,
totalPages: pages
});
return /*#__PURE__*/_react.default.createElement("nav", {
"aria-label": "Page navigation"
}, /*#__PURE__*/_react.default.createElement("ul", {
className: "pagination"
}, /*#__PURE__*/_react.default.createElement("li", {
className: `page-item ${activePage === 1 ? 'disabled' : ''}`
}, /*#__PURE__*/_react.default.createElement("button", {
className: "page-link",
onClick: () => {
if (activePage !== 1) {
onSelect(activePage - 1);
}
}
}, prev)), pageNumbers.map(page => {
const className = page === activePage ? 'active' : '';
if ([LEFT_PAGE, RIGHT_PAGE].includes(page)) {
return /*#__PURE__*/_react.default.createElement("li", {
className: "page-item disabled"
}, /*#__PURE__*/_react.default.createElement("span", {
className: "page-link"
}, /*#__PURE__*/_react.default.createElement("span", {
"aria-hidden": "true"
}, "...")));
}
return /*#__PURE__*/_react.default.createElement("li", {
className: `page-item ${className}`,
key: page
}, /*#__PURE__*/_react.default.createElement("button", {
className: "page-link",
onClick: () => onSelect(page)
}, page));
}), /*#__PURE__*/_react.default.createElement("li", {
className: `page-item ${activePage === pages ? 'disabled' : ''}`
}, /*#__PURE__*/_react.default.createElement("button", {
className: "page-link",
onClick: () => {
if (activePage !== pages) {
onSelect(activePage + 1);
}
}
}, next))));
}
Pagination.propTypes = {
activePage: _propTypes.default.number,
pageNeighbours: _propTypes.default.number,
pages: _propTypes.default.number.isRequired,
prev: _propTypes.default.string,
next: _propTypes.default.string,
onSelect: _propTypes.default.func.isRequired
};
var _default = exports.default = Pagination;