UNPKG

@arun-s-aot/formio-react

Version:

React renderer for formsflow form.io forms.

118 lines (117 loc) 4.01 kB
"use strict"; 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;