@dabapps/roe
Version:
A collection of React components, styles, mixins, and atomic CSS classes to aid with the development of web applications.
68 lines • 4.55 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
var classNames = require("classnames");
var React = require("react");
var button_1 = require("../forms/button");
var spaced_group_1 = require("../misc/spaced-group");
var utils_1 = require("./utils");
var PaginationButton = function (_a) {
var currentPageNumber = _a.currentPageNumber, totalPages = _a.totalPages, page = _a.page, index = _a.index, disabled = _a.disabled, className = _a.className, changePage = _a.changePage;
var onClickPageNumber = React.useCallback(function () {
/* istanbul ignore else */
if (currentPageNumber !== page && !utils_1.getIsDots(totalPages, index, page)) {
changePage(utils_1.getPageToGoTo(totalPages, page, index));
}
}, [totalPages, currentPageNumber, index, page, changePage]);
return (React.createElement(button_1.default, { key: index, className: classNames(className, { disabled: disabled }), disabled: disabled, onClick: onClickPageNumber }, utils_1.getPageToGoTo(totalPages, page, index)));
};
var PaginationButtonMemo = React.memo(PaginationButton);
var Pagination = function (props) {
var className = props.className, disabled = props.disabled, itemCount = props.itemCount, pageSize = props.pageSize, currentPageNumber = props.currentPageNumber, changePage = props.changePage, nextText = props.nextText, prevText = props.prevText, remainingProps = __rest(props, ["className", "disabled", "itemCount", "pageSize", "currentPageNumber", "changePage", "nextText", "prevText"]);
var pageCount = itemCount / pageSize;
var totalPages = Math.ceil(pageCount);
var isPrevButtonDisabled = currentPageNumber === 1 || disabled;
var isNextButtonDisabled = !totalPages || currentPageNumber === totalPages || disabled;
var isPageButtonDisabled = itemCount <= pageSize || disabled;
var decrementPage = React.useCallback(function () {
return changePage(currentPageNumber - 1);
}, [currentPageNumber, changePage]);
var incrementPage = React.useCallback(function () {
return changePage(currentPageNumber + 1);
}, [currentPageNumber, changePage]);
return (React.createElement("div", __assign({}, remainingProps, { className: classNames('pagination', className) }),
React.createElement(spaced_group_1.default, { className: "pagination-group", large: true },
React.createElement(button_1.default, { className: classNames('prev', {
disabled: isPrevButtonDisabled,
}), onClick: decrementPage, disabled: isPrevButtonDisabled }, prevText ? React.createElement("span", { className: "prev-icon" }, prevText) : '<'),
utils_1.getPaginationSeries(totalPages, pageCount, itemCount, pageSize, currentPageNumber).map(function (page, index) {
var buttonType = utils_1.getButtonType(totalPages, page, index, currentPageNumber);
return utils_1.getIsDots(totalPages, index, page) ? (React.createElement("div", { key: index, className: buttonType }, "...")) : (React.createElement(PaginationButtonMemo, { key: index, index: index, page: page, totalPages: totalPages, currentPageNumber: currentPageNumber, className: buttonType, disabled: isPageButtonDisabled, changePage: changePage }));
}),
React.createElement(button_1.default, { className: classNames('next', {
disabled: isNextButtonDisabled,
}), disabled: isNextButtonDisabled, onClick: incrementPage }, nextText ? React.createElement("span", { className: "next-icon" }, nextText) : '>'))));
};
exports.default = React.memo(Pagination);
//# sourceMappingURL=pagination.js.map