"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); var core_1 = require("@angular/core"); var common_1 = require("@angular/common"); var forms_1 = require("@angular/forms"); var dropdown_1 = require("../dropdown/dropdown"); var shared_1 = require("../common/shared"); var Paginator = /** @class */ (function () { function Paginator(cd) { this.cd = cd; this.pageLinkSize = 5; this.onPageChange = new core_1.EventEmitter(); this.alwaysShow = true; this.dropdownScrollHeight = '200px'; this.currentPageReportTemplate = '{currentPage} of {totalPages}'; this._totalRecords = 0; this._first = 0; this._rows = 0; } Paginator.prototype.ngOnInit = function () { this.updatePaginatorState(); }; Object.defineProperty(Paginator.prototype, "totalRecords", { get: function () { return this._totalRecords; }, set: function (val) { this._totalRecords = val; this.updatePageLinks(); this.updatePaginatorState(); this.updateFirst(); this.updateRowsPerPageOptions(); }, enumerable: true, configurable: true }); Object.defineProperty(Paginator.prototype, "first", { get: function () { return this._first; }, set: function (val) { this._first = val; this.updatePageLinks(); this.updatePaginatorState(); }, enumerable: true, configurable: true }); Object.defineProperty(Paginator.prototype, "rows", { get: function () { return this._rows; }, set: function (val) { this._rows = val; this.updatePageLinks(); this.updatePaginatorState(); }, enumerable: true, configurable: true }); Object.defineProperty(Paginator.prototype, "rowsPerPageOptions", { get: function () { return this._rowsPerPageOptions; }, set: function (val) { this._rowsPerPageOptions = val; this.updateRowsPerPageOptions(); }, enumerable: true, configurable: true }); Paginator.prototype.updateRowsPerPageOptions = function () { if (this.rowsPerPageOptions) { this.rowsPerPageItems = []; for (var _i = 0, _a = this.rowsPerPageOptions; _i < _a.length; _i++) { var opt = _a[_i]; if (typeof opt == 'object' && opt['showAll']) { this.rowsPerPageItems.push({ label: opt['showAll'], value: this.totalRecords }); } else { this.rowsPerPageItems.push({ label: String(opt), value: opt }); } } } }; Paginator.prototype.isFirstPage = function () { return this.getPage() === 0; }; Paginator.prototype.isLastPage = function () { return this.getPage() === this.getPageCount() - 1; }; Paginator.prototype.getPageCount = function () { return Math.ceil(this.totalRecords / this.rows) || 1; }; Paginator.prototype.calculatePageLinkBoundaries = function () { var numberOfPages = this.getPageCount(), visiblePages = Math.min(this.pageLinkSize, numberOfPages); //calculate range, keep current in middle if necessary var start = Math.max(0, Math.ceil(this.getPage() - ((visiblePages) / 2))), end = Math.min(numberOfPages - 1, start + visiblePages - 1); //check when approaching to last page var delta = this.pageLinkSize - (end - start + 1); start = Math.max(0, start - delta); return [start, end]; }; Paginator.prototype.updatePageLinks = function () { this.pageLinks = []; var boundaries = this.calculatePageLinkBoundaries(), start = boundaries[0], end = boundaries[1]; for (var i = start; i <= end; i++) { this.pageLinks.push(i + 1); } }; Paginator.prototype.changePage = function (p) { var pc = this.getPageCount(); if (p >= 0 && p < pc) { this.first = this.rows * p; var state = { page: p, first: this.first, rows: this.rows, pageCount: pc }; this.updatePageLinks(); this.onPageChange.emit(state); this.updatePaginatorState(); } }; Paginator.prototype.updateFirst = function () { var _this = this; var page = this.getPage(); if (page > 0 && (this.first >= this.totalRecords)) { Promise.resolve(null).then(function () { return _this.changePage(page - 1); }); } }; Paginator.prototype.getPage = function () { return Math.floor(this.first / this.rows); }; Paginator.prototype.changePageToFirst = function (event) { if (!this.isFirstPage()) { this.changePage(0); } event.preventDefault(); }; Paginator.prototype.changePageToPrev = function (event) { this.changePage(this.getPage() - 1); event.preventDefault(); }; Paginator.prototype.changePageToNext = function (event) { this.changePage(this.getPage() + 1); event.preventDefault(); }; Paginator.prototype.changePageToLast = function (event) { if (!this.isLastPage()) { this.changePage(this.getPageCount() - 1); } event.preventDefault(); }; Paginator.prototype.onPageLinkClick = function (event, page) { this.changePage(page); event.preventDefault(); }; Paginator.prototype.onRppChange = function (event) { this.changePage(this.getPage()); }; Paginator.prototype.updatePaginatorState = function () { this.paginatorState = { page: this.getPage(), pageCount: this.getPageCount(), rows: this.rows, first: this.first, totalRecords: this.totalRecords }; }; Object.defineProperty(Paginator.prototype, "currentPageReport", { get: function () { return this.currentPageReportTemplate .replace("{currentPage}", (this.getPage() + 1).toString()) .replace("{totalPages}", this.getPageCount().toString()); }, enumerable: true, configurable: true }); __decorate([ core_1.Input(), __metadata("design:type", Number) ], Paginator.prototype, "pageLinkSize", void 0); __decorate([ core_1.Output(), __metadata("design:type", core_1.EventEmitter) ], Paginator.prototype, "onPageChange", void 0); __decorate([ core_1.Input(), __metadata("design:type", Object) ], Paginator.prototype, "style", void 0); __decorate([ core_1.Input(), __metadata("design:type", String) ], Paginator.prototype, "styleClass", void 0); __decorate([ core_1.Input(), __metadata("design:type", Boolean) ], Paginator.prototype, "alwaysShow", void 0); __decorate([ core_1.Input(), __metadata("design:type", core_1.TemplateRef) ], Paginator.prototype, "templateLeft", void 0); __decorate([ core_1.Input(), __metadata("design:type", core_1.TemplateRef) ], Paginator.prototype, "templateRight", void 0); __decorate([ core_1.Input(), __metadata("design:type", Object) ], Paginator.prototype, "dropdownAppendTo", void 0); __decorate([ core_1.Input(), __metadata("design:type", String) ], Paginator.prototype, "dropdownScrollHeight", void 0); __decorate([ core_1.Input(), __metadata("design:type", String) ], Paginator.prototype, "currentPageReportTemplate", void 0); __decorate([ core_1.Input(), __metadata("design:type", Boolean) ], Paginator.prototype, "showCurrentPageReport", void 0); __decorate([ core_1.Input(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number]) ], Paginator.prototype, "totalRecords", null); __decorate([ core_1.Input(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number]) ], Paginator.prototype, "first", null); __decorate([ core_1.Input(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number]) ], Paginator.prototype, "rows", null); __decorate([ core_1.Input(), __metadata("design:type", Array), __metadata("design:paramtypes", [Array]) ], Paginator.prototype, "rowsPerPageOptions", null); Paginator = __decorate([ core_1.Component({ selector: 'p-paginator', template: "\n