@pnp/spfx-controls-react
Version:
Reusable React controls for SharePoint Framework solutions
88 lines • 5.38 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Pagination = void 0;
var tslib_1 = require("tslib");
var React = tslib_1.__importStar(require("react"));
var Button_1 = require("@fluentui/react/lib/Button");
var Pagination_module_scss_1 = tslib_1.__importDefault(require("./Pagination.module.scss"));
var isEqual_1 = tslib_1.__importDefault(require("lodash/isEqual"));
var telemetry = tslib_1.__importStar(require("../../common/telemetry"));
var Stack_1 = require("@fluentui/react/lib/Stack");
var Pagination = /** @class */ (function (_super) {
tslib_1.__extends(Pagination, _super);
function Pagination(props) {
var _this = _super.call(this, props) || this;
_this.preparePaginationElements = function (totalPages) {
var paginationElementsArray = [];
for (var i = 0; i < totalPages; i++) {
paginationElementsArray.push(i + 1);
}
return paginationElementsArray;
};
_this.onClick = function (page) {
_this.setState({ currentPage: page });
_this.props.onChange(page);
};
telemetry.track('ReactPagination');
var paginationElements = _this.preparePaginationElements(props.totalPages);
_this.state = {
currentPage: props.currentPage,
paginationElements: paginationElements,
limiter: props.limiter ? props.limiter : 3,
};
return _this;
}
Pagination.prototype.componentDidUpdate = function (prevProps) {
var _a = this.state, currentPage = _a.currentPage, paginationElements = _a.paginationElements;
if (prevProps.totalPages !== this.props.totalPages) {
paginationElements = this.preparePaginationElements(this.props.totalPages);
currentPage = this.state.currentPage > this.props.totalPages ? this.props.totalPages : this.state.currentPage;
}
if (this.props.currentPage !== prevProps.currentPage) {
currentPage = this.props.currentPage > this.props.totalPages ? this.props.totalPages : this.props.currentPage;
}
if (!(0, isEqual_1.default)(this.state.currentPage, currentPage) || !(0, isEqual_1.default)(this.state.paginationElements, paginationElements)) {
this.setState({
paginationElements: paginationElements,
currentPage: currentPage
});
}
};
Pagination.prototype.render = function () {
var _this = this;
return (React.createElement("div", { className: "".concat(Pagination_module_scss_1.default.pagination, " pagination-container") },
React.createElement(Stack_1.Stack, { horizontal: true, horizontalAlign: "center", verticalAlign: "center", tokens: { childrenGap: 1 }, wrap: true },
!this.props.hideFirstPageJump &&
React.createElement(Button_1.DefaultButton, { className: "".concat(Pagination_module_scss_1.default.buttonStyle, " pagination-button pagination-button_first"), onClick: function () { return _this.onClick(1); }, iconProps: { iconName: "DoubleChevronLeft" } }),
this.state.paginationElements.map(function (pageNumber) { return _this.renderPageNumber(pageNumber); }),
!this.props.hideLastPageJump &&
React.createElement(Button_1.DefaultButton, { className: "".concat(Pagination_module_scss_1.default.buttonStyle, " pagination-button pagination-button_last"), onClick: function () { return _this.onClick(_this.props.totalPages); }, iconProps: { iconName: "DoubleChevronRight" } }))));
};
Pagination.prototype.renderPageNumber = function (pageNumber) {
var _this = this;
var limiterIcon = this.props.limiterIcon;
var _a = this.state, currentPage = _a.currentPage, limiter = _a.limiter;
if (pageNumber === currentPage) {
return (React.createElement(Button_1.PrimaryButton, { className: Pagination_module_scss_1.default.buttonStyle, onClick: function () { return _this.onClick(pageNumber); }, text: pageNumber.toString() }));
}
else {
if (!(pageNumber < currentPage - limiter || pageNumber > currentPage + limiter)) {
return (React.createElement(Button_1.DefaultButton, { className: Pagination_module_scss_1.default.buttonStyle, onClick: function () { return _this.onClick(pageNumber); }, text: pageNumber.toString() }));
}
else if (!(pageNumber < currentPage - limiter - 1 || pageNumber > currentPage + limiter + 1)) {
if (limiterIcon) {
return (React.createElement(Button_1.DefaultButton, { className: Pagination_module_scss_1.default.buttonStyle, onClick: function () { return _this.onClick(pageNumber); }, iconProps: { iconName: limiterIcon ? limiterIcon : "More" } }));
}
else {
return (React.createElement(Button_1.DefaultButton, { className: Pagination_module_scss_1.default.buttonStyle, onClick: function () { return _this.onClick(pageNumber); }, iconProps: { iconName: limiterIcon ? limiterIcon : "More" } }));
}
}
else {
return;
}
}
};
return Pagination;
}(React.Component));
exports.Pagination = Pagination;
//# sourceMappingURL=Pagination.js.map