UNPKG

systelab-components

Version:

systelab-components is a set of components that use wide accepted and adopted standard technologies like Angular and Bootstrap, as well as other popular libraries. Please read the ATTRIBUTION.md file for a complete list of dependencies.

85 lines 14.6 kB
import { Component, EventEmitter, Input, Output } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "./paginator-page.component"; export class PaginatorComponent { constructor() { this.totalPages = 1; this.page = 1; this.pagesToShow = 11; this.showNextPreviousButtons = true; this.showFirstLastButtons = true; this.pageChange = new EventEmitter(); } static calculateVisiblePages(totalPages, pagesToShow) { return Math.min(totalPages, pagesToShow); } static calculateStartPage(currentPage, totalPages, visiblePages) { if (totalPages - currentPage < (visiblePages / 2)) { return totalPages - visiblePages + 1; } return Math.max(1, Math.ceil(currentPage - ((visiblePages) / 2))); } static calculateEndPage(totalPages, startPage, visiblePages) { return Math.min(totalPages, startPage + visiblePages - 1); } static calculateLinkPages(currentPage, totalPages, pagesToShow) { const visiblePages = PaginatorComponent.calculateVisiblePages(totalPages, pagesToShow); const startPage = PaginatorComponent.calculateStartPage(currentPage, totalPages, visiblePages); const endPage = PaginatorComponent.calculateEndPage(totalPages, startPage, visiblePages); const linkPages = []; for (let i = startPage; i <= endPage; i++) { linkPages.push(i); } return linkPages; } ngOnInit() { this.pages = PaginatorComponent.calculateLinkPages(this.page, this.totalPages, this.pagesToShow); } ngOnChanges(changes) { if (this.page && this.totalPages && this.pagesToShow) { this.pages = PaginatorComponent.calculateLinkPages(this.page, this.totalPages, this.pagesToShow); } } goFirst() { this.goToPage(1); } goPrevious() { if (this.page > 1) { this.goToPage(this.page - 1); } } goNext() { if (this.page < this.totalPages) { this.goToPage(this.page + 1); } } goLast() { this.goToPage(this.totalPages); } goToPage(page) { if (this.page !== page) { this.page = page; this.pageChange.emit(this.page); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: PaginatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.9", type: PaginatorComponent, selector: "systelab-paginator", inputs: { totalPages: "totalPages", page: "page", pagesToShow: "pagesToShow", showNextPreviousButtons: "showNextPreviousButtons", showFirstLastButtons: "showFirstLastButtons" }, outputs: { pageChange: "pageChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"slab-paginator-container w-100 h-100 d-flex justify-content-center\">\n <systelab-paginator-page *ngIf=\"showFirstLastButtons\" [icon]=\"'icon-angle-double-left'\" [disabled]=\"page===1\" (click)=\"goFirst()\"></systelab-paginator-page>\n <systelab-paginator-page *ngIf=\"showNextPreviousButtons\" [icon]=\"'icon-angle-left'\" [disabled]=\"page===1\"\n (click)=\"goPrevious()\"></systelab-paginator-page>\n\n @for (p of pages; track p) {\n <systelab-paginator-page [pageNumber]=\"p.toString()\" [selected]=\"page===p\" (click)=\"goToPage(p)\" id=\"page{{p}}\"></systelab-paginator-page>\n }\n\n <systelab-paginator-page *ngIf=\"showNextPreviousButtons\" [icon]=\"'icon-angle-right'\" [disabled]=\"page===totalPages\"\n (click)=\"goNext()\"></systelab-paginator-page>\n <systelab-paginator-page *ngIf=\"showFirstLastButtons\" [icon]=\"'icon-angle-double-right'\" [disabled]=\"page===totalPages\"\n (click)=\"goLast()\"></systelab-paginator-page>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.PaginatorPageComponent, selector: "systelab-paginator-page", inputs: ["icon", "pageNumber", "selected", "disabled"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: PaginatorComponent, decorators: [{ type: Component, args: [{ selector: 'systelab-paginator', template: "<div class=\"slab-paginator-container w-100 h-100 d-flex justify-content-center\">\n <systelab-paginator-page *ngIf=\"showFirstLastButtons\" [icon]=\"'icon-angle-double-left'\" [disabled]=\"page===1\" (click)=\"goFirst()\"></systelab-paginator-page>\n <systelab-paginator-page *ngIf=\"showNextPreviousButtons\" [icon]=\"'icon-angle-left'\" [disabled]=\"page===1\"\n (click)=\"goPrevious()\"></systelab-paginator-page>\n\n @for (p of pages; track p) {\n <systelab-paginator-page [pageNumber]=\"p.toString()\" [selected]=\"page===p\" (click)=\"goToPage(p)\" id=\"page{{p}}\"></systelab-paginator-page>\n }\n\n <systelab-paginator-page *ngIf=\"showNextPreviousButtons\" [icon]=\"'icon-angle-right'\" [disabled]=\"page===totalPages\"\n (click)=\"goNext()\"></systelab-paginator-page>\n <systelab-paginator-page *ngIf=\"showFirstLastButtons\" [icon]=\"'icon-angle-double-right'\" [disabled]=\"page===totalPages\"\n (click)=\"goLast()\"></systelab-paginator-page>\n</div>\n" }] }], propDecorators: { totalPages: [{ type: Input }], page: [{ type: Input }], pagesToShow: [{ type: Input }], showNextPreviousButtons: [{ type: Input }], showFirstLastButtons: [{ type: Input }], pageChange: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N5c3RlbGFiLWNvbXBvbmVudHMvc3JjL2xpYi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N5c3RlbGFiLWNvbXBvbmVudHMvc3JjL2xpYi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7OztBQU16RyxNQUFNLE9BQU8sa0JBQWtCO0lBSi9CO1FBTVUsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLFNBQUksR0FBRyxDQUFDLENBQUM7UUFFVCxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQiw0QkFBdUIsR0FBRyxJQUFJLENBQUM7UUFDL0IseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBRTNCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0tBc0VsRDtJQWxFUSxNQUFNLENBQUMscUJBQXFCLENBQUMsVUFBa0IsRUFBRSxXQUFtQjtRQUMzRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTyxNQUFNLENBQUMsa0JBQWtCLENBQUMsV0FBbUIsRUFBRSxVQUFrQixFQUFFLFlBQW9CO1FBQzlGLElBQUksVUFBVSxHQUFHLFdBQVcsR0FBRyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNsRCxPQUFPLFVBQVUsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFD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QUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogICAgJ3N5c3RlbGFiLXBhZ2luYXRvcicsXG5cdHRlbXBsYXRlVXJsOiAncGFnaW5hdG9yLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBQYWdpbmF0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG5cblx0QElucHV0KCkgdG90YWxQYWdlcyA9IDE7XG5cdEBJbnB1dCgpIHBhZ2UgPSAxO1xuXG5cdEBJbnB1dCgpIHBhZ2VzVG9TaG93ID0gMTE7XG5cdEBJbnB1dCgpIHNob3dOZXh0UHJldmlvdXNCdXR0b25zID0gdHJ1ZTtcblx0QElucHV0KCkgc2hvd0ZpcnN0TGFzdEJ1dHRvbnMgPSB0cnVlO1xuXG5cdEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cblx0cHVibGljIHBhZ2VzOiBudW1iZXJbXTtcblxuXHRwcml2YXRlIHN0YXRpYyBjYWxjdWxhdGVWaXNpYmxlUGFnZXModG90YWxQYWdlczogbnVtYmVyLCBwYWdlc1RvU2hvdzogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gTWF0aC5taW4odG90YWxQYWdlcywgcGFnZXNUb1Nob3cpO1xuXHR9XG5cblx0cHJpdmF0ZSBzdGF0aWMgY2FsY3VsYXRlU3RhcnRQYWdlKGN1cnJlbnRQYWdlOiBudW1iZXIsIHRvdGFsUGFnZXM6IG51bWJlciwgdmlzaWJsZVBhZ2VzOiBudW1iZXIpOiBudW1iZXIge1xuXHRcdGlmICh0b3RhbFBhZ2VzIC0gY3VycmVudFBhZ2UgPCAodmlzaWJsZVBhZ2VzIC8gMikpIHtcblx0XHRcdHJldHVybiB0b3RhbFBhZ2VzIC0gdmlzaWJsZVBhZ2VzICsgMTtcblx0XHR9XG5cdFx0cmV0dXJuIE1hdGgubWF4KDEsIE1hdGguY2VpbChjdXJyZW50UGFnZSAtICgodmlzaWJsZVBhZ2VzKSAvIDIpKSk7XG5cdH1cblxuXHRwcml2YXRlIHN0YXRpYyBjYWxjdWxhdGVFbmRQYWdlKHRvdGFsUGFnZXM6IG51bWJlciwgc3RhcnRQYWdlOiBudW1iZXIsIHZpc2libGVQYWdlczogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gTWF0aC5taW4odG90YWxQYWdlcywgc3RhcnRQYWdlICsgdmlzaWJsZVBhZ2VzIC0gMSk7XG5cdH1cblxuXHRwcml2YXRlIHN0YXRpYyBjYWxjdWxhdGVMaW5rUGFnZXMoY3VycmVudFBhZ2U6IG51bWJlciwgdG90YWxQYWdlczogbnVtYmVyLCBwYWdlc1RvU2hvdzogbnVtYmVyKTogbnVtYmVyW10ge1xuXHRcdGNvbnN0IHZpc2libGVQYWdlcyA9IFBhZ2luYXRvckNvbXBvbmVudC5jYWxjdWxhdGVWaXNpYmxlUGFnZXModG90YWxQYWdlcywgcGFnZXNUb1Nob3cpO1xuXHRcdGNvbnN0IHN0YXJ0UGFnZSA9IFBhZ2luYXRvckNvbXBvbmVudC5jYWxjdWxhdGVTdGFydFBhZ2UoY3VycmVudFBhZ2UsIHRvdGFsUGFnZXMsIHZpc2libGVQYWdlcyk7XG5cdFx0Y29uc3QgZW5kUGFnZSA9IFBhZ2luYXRvckNvbXBvbmVudC5jYWxjdWxhdGVFbmRQYWdlKHRvdGFsUGFnZXMsIHN0YXJ0UGFnZSwgdmlzaWJsZVBhZ2VzKTtcblxuXHRcdGNvbnN0IGxpbmtQYWdlcyA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IHN0YXJ0UGFnZTsgaSA8PSBlbmRQYWdlOyBpKyspIHtcblx0XHRcdGxpbmtQYWdlcy5wdXNoKGkpO1xuXHRcdH1cblx0XHRyZXR1cm4gbGlua1BhZ2VzO1xuXG5cdH1cblxuXHRwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5wYWdlcyA9IFBhZ2luYXRvckNvbXBvbmVudC5jYWxjdWxhdGVMaW5rUGFnZXModGhpcy5wYWdlLCB0aGlzLnRvdGFsUGFnZXMsIHRoaXMucGFnZXNUb1Nob3cpO1xuXHR9XG5cblx0cHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5wYWdlICYmIHRoaXMudG90YWxQYWdlcyAmJiB0aGlzLnBhZ2VzVG9TaG93KSB7XG5cdFx0XHR0aGlzLnBhZ2VzID0gUGFnaW5hdG9yQ29tcG9uZW50LmNhbGN1bGF0ZUxpbmtQYWdlcyh0aGlzLnBhZ2UsIHRoaXMudG90YWxQYWdlcywgdGhpcy5wYWdlc1RvU2hvdyk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGdvRmlyc3QoKSB7XG5cdFx0dGhpcy5nb1RvUGFnZSgxKTtcblx0fVxuXG5cdHB1YmxpYyBnb1ByZXZpb3VzKCkge1xuXHRcdGlmICh0aGlzLnBhZ2UgPiAxKSB7XG5cdFx0XHR0aGlzLmdvVG9QYWdlKHRoaXMucGFnZSAtIDEpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnb05leHQoKSB7XG5cdFx0aWYgKHRoaXMucGFnZSA8IHRoaXMudG90YWxQYWdlcykge1xuXHRcdFx0dGhpcy5nb1RvUGFnZSh0aGlzLnBhZ2UgKyAxKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ29MYXN0KCkge1xuXHRcdHRoaXMuZ29Ub1BhZ2UodGhpcy50b3RhbFBhZ2VzKTtcblx0fVxuXG5cdHB1YmxpYyBnb1RvUGFnZShwYWdlOiBudW1iZXIpIHtcblx0XHRpZiAodGhpcy5wYWdlICE9PSBwYWdlKSB7XG5cdFx0XHR0aGlzLnBhZ2UgPSBwYWdlO1xuXHRcdFx0dGhpcy5wYWdlQ2hhbmdlLmVtaXQodGhpcy5wYWdlKTtcblx0XHR9XG5cdH1cblxufVxuIiwiPGRpdiBjbGFzcz1cInNsYWItcGFnaW5hdG9yLWNvbnRhaW5lciB3LTEwMCBoLTEwMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgIDxzeXN0ZWxhYi1wYWdpbmF0b3ItcGFnZSAqbmdJZj1cInNob3dGaXJzdExhc3RCdXR0b25zXCIgW2ljb25dPVwiJ2ljb24tYW5nbGUtZG91YmxlLWxlZnQnXCIgW2Rpc2FibGVkXT1cInBhZ2U9PT0xXCIgKGNsaWNrKT1cImdvRmlyc3QoKVwiPjwvc3lzdGVsYWItcGFnaW5hdG9yLXBhZ2U+XG4gICAgPHN5c3RlbGFiLXBhZ2luYXRvci1wYWdlICpuZ0lmPVwic2hvd05leHRQcmV2aW91c0J1dHRvbnNcIiBbaWNvbl09XCInaWNvbi1hbmdsZS1sZWZ0J1wiIFtkaXNhYmxlZF09XCJwYWdlPT09MVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnb1ByZXZpb3VzKClcIj48L3N5c3RlbGFiLXBhZ2luYXRvci1wYWdlPlxuXG4gICAgQGZvciAocCBvZiBwYWdlczsgdHJhY2sgcCkge1xuICAgICAgICA8c3lzdGVsYWItcGFnaW5hdG9yLXBhZ2UgW3BhZ2VOdW1iZXJdPVwicC50b1N0cmluZygpXCIgW3NlbGVjdGVkXT1cInBhZ2U9PT1wXCIgKGNsaWNrKT1cImdvVG9QYWdlKHApXCIgaWQ9XCJwYWdle3twfX1cIj48L3N5c3RlbGFiLXBhZ2luYXRvci1wYWdlPlxuICAgIH1cblxuICAgIDxzeXN0ZWxhYi1wYWdpbmF0b3ItcGFnZSAqbmdJZj1cInNob3dOZXh0UHJldmlvdXNCdXR0b25zXCIgW2ljb25dPVwiJ2ljb24tYW5nbGUtcmlnaHQnXCIgW2Rpc2FibGVkXT1cInBhZ2U9PT10b3RhbFBhZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdvTmV4dCgpXCI+PC9zeXN0ZWxhYi1wYWdpbmF0b3ItcGFnZT5cbiAgICA8c3lzdGVsYWItcGFnaW5hdG9yLXBhZ2UgKm5nSWY9XCJzaG93Rmlyc3RMYXN0QnV0dG9uc1wiIFtpY29uXT1cIidpY29uLWFuZ2xlLWRvdWJsZS1yaWdodCdcIiBbZGlzYWJsZWRdPVwicGFnZT09PXRvdGFsUGFnZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29MYXN0KClcIj48L3N5c3RlbGFiLXBhZ2luYXRvci1wYWdlPlxuPC9kaXY+XG4iXX0=