UNPKG

@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
"use strict"; 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