ng-materialgrammi
Version:
An Angular framework which follows
122 lines • 15.8 kB
JavaScript
import { Component, EventEmitter, Input, Output } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
export class PaginationComponent {
constructor() {
this.page = new EventEmitter();
this.getdata = new EventEmitter();
this.theme = "primary";
this.data = [];
this.fullDataMode = true;
this.perPage = 10;
this.currentPage = 1;
this.icons = {
next: `<i class="fas fa-chevron-right"></i>`,
previous: `<i class="fas fa-chevron-left"></i>`
};
this.max = 22;
this.totalPages = 0;
this.totalCount = 0;
this.pages = [];
this.startFrom = 1;
this._data = [];
}
ngOnInit() {
this._data = JSON.parse(JSON.stringify(this.data));
this.calculatePage();
this.sendData();
}
ngOnChanges() {
this.removePages();
this.calculatePage();
this.sendData();
}
calculatePage() {
this.pages = [];
if (this.fullDataMode && this.data.length > 0) {
this.totalCount = this.data.length;
}
else {
this.totalCount = this.data;
}
this.totalPages = Math.ceil(this.totalCount / this.perPage);
for (let i = this.startFrom; i <= this.totalPages; i++) {
if (this.pages.length < (this.max + 1)) {
this.pages.push(i);
}
}
}
sendData() {
if (this.fullDataMode && this.totalCount > 0) {
let tobeSlicedFrom = (this.currentPage - 1) * this.perPage;
let tobeSlicedTo = this.currentPage * this.perPage;
let reformedData = [];
for (let i = tobeSlicedFrom; i < tobeSlicedTo; i++) {
reformedData.push(this.data[i]);
}
this.getdata.emit(reformedData);
}
else {
this.getdata.emit((this.currentPage - 1) * this.perPage);
}
}
removePages() {
this.startFrom = (this.currentPage > 1) &&
(this.currentPage < this.totalPages - this.max || (this.currentPage > this.max - this.max / 2)) ? this.currentPage - 1 : this.startFrom;
}
onPageClick(pageNumber) {
if (typeof pageNumber != "number") {
pageNumber = parseInt(pageNumber);
}
this.currentPage = pageNumber;
this.page.emit(this.currentPage);
this.sendData();
this.removePages();
this.calculatePage();
}
isActivePage(pageNumber) {
if (typeof pageNumber != "number") {
pageNumber = parseInt(pageNumber);
}
return this.currentPage == pageNumber ? 'active' : '';
}
onNext() {
this.currentPage = this.currentPage < this.totalPages ? this.currentPage + 1 : this.currentPage;
this.page.emit(this.currentPage);
this.sendData();
this.removePages();
this.calculatePage();
}
onPrevious() {
this.currentPage = this.currentPage > 1 ? this.currentPage - 1 : this.currentPage;
this.page.emit(this.currentPage);
this.sendData();
this.removePages();
this.calculatePage();
}
}
PaginationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: PaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
PaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: PaginationComponent, selector: "mg-pagination", inputs: { theme: "theme", data: "data", fullDataMode: "fullDataMode", perPage: "perPage", currentPage: "currentPage", icons: "icons", max: "max" }, outputs: { page: "page", getdata: "getdata" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"pagination-wrapper pagination-{{theme}}\">\n <div class=\"page page-previous not-selectable\" [innerHtml]=\"icons.previous\" (click)=\"onPrevious()\"></div>\n <div class=\"page not-selectable\" *ngFor=\"let page of pages\" [ngClass]=\"isActivePage(page)\" (click)=\"onPageClick(page)\">\n {{page}}\n </div>\n <div class=\"page page-next not-selectable\" [innerHtml]=\"icons.next\" (click)=\"onNext()\"></div>\n</div>\n", styles: [""], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: PaginationComponent, decorators: [{
type: Component,
args: [{ selector: 'mg-pagination', template: "<div class=\"pagination-wrapper pagination-{{theme}}\">\n <div class=\"page page-previous not-selectable\" [innerHtml]=\"icons.previous\" (click)=\"onPrevious()\"></div>\n <div class=\"page not-selectable\" *ngFor=\"let page of pages\" [ngClass]=\"isActivePage(page)\" (click)=\"onPageClick(page)\">\n {{page}}\n </div>\n <div class=\"page page-next not-selectable\" [innerHtml]=\"icons.next\" (click)=\"onNext()\"></div>\n</div>\n", styles: [""] }]
}], ctorParameters: function () { return []; }, propDecorators: { page: [{
type: Output
}], getdata: [{
type: Output
}], theme: [{
type: Input
}], data: [{
type: Input
}], fullDataMode: [{
type: Input
}], perPage: [{
type: Input
}], currentPage: [{
type: Input
}], icons: [{
type: Input
}], max: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbGdyYW1taS9zcmMvbGliL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21hdGVyaWFsZ3JhbW1pL3NyYy9saWIvY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU8xRixNQUFNLE9BQU8sbUJBQW1CO0lBc0I5QjtRQXJCVSxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxQixZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5QixVQUFLLEdBQUcsU0FBUyxDQUFDO1FBQ2xCLFNBQUksR0FBUSxFQUFFLENBQUM7UUFDZixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsVUFBSyxHQUFHO1lBQ2YsSUFBSSxFQUFFLHNDQUFzQztZQUM1QyxRQUFRLEVBQUUscUNBQXFDO1NBQ2hELENBQUE7UUFFUSxRQUFHLEdBQUcsRUFBRSxDQUFDO1FBRWxCLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsVUFBSyxHQUFRLEVBQUUsQ0FBQztRQUNoQixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsVUFBSyxHQUFPLEVBQUUsQ0FBQztJQUdDLENBQUM7SUFFakIsUUFBUTtRQUNOLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMs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UUFDaEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDOztnSEF2R1UsbUJBQW1CO29HQUFuQixtQkFBbUIsNlFDUGhDLHdiQU9BOzJGREFhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxlQUFlOzBFQUtmLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNFLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csR0FBRztzQkFBWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21nLXBhZ2luYXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vcGFnaW5hdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BhZ2luYXRpb24uY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2luYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBPdXRwdXQoKSBwYWdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZ2V0ZGF0YSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgdGhlbWUgPSBcInByaW1hcnlcIjtcbiAgQElucHV0KCkgZGF0YTogYW55ID0gW107XG4gIEBJbnB1dCgpIGZ1bGxEYXRhTW9kZSA9IHRydWU7XG4gIEBJbnB1dCgpIHBlclBhZ2UgPSAxMDtcbiAgQElucHV0KCkgY3VycmVudFBhZ2UgPSAxO1xuICBASW5wdXQoKSBpY29ucyA9IHtcbiAgICBuZXh0OiBgPGkgY2xhc3M9XCJmYXMgZmEtY2hldnJvbi1yaWdodFwiPjwvaT5gLFxuICAgIHByZXZpb3VzOiBgPGkgY2xhc3M9XCJmYXMgZmEtY2hldnJvbi1sZWZ0XCI+PC9pPmBcbiAgfVxuXG4gIEBJbnB1dCgpIG1heCA9IDIyO1xuXG4gIHRvdGFsUGFnZXMgPSAwO1xuICB0b3RhbENvdW50ID0gMDtcbiAgcGFnZXM6IGFueSA9IFtdO1xuICBzdGFydEZyb20gPSAxO1xuICBfZGF0YTphbnkgPSBbXTtcblxuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fZGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhKSk7XG4gICAgdGhpcy5jYWxjdWxhdGVQYWdlKCk7XG4gICAgXG4gICAgdGhpcy5zZW5kRGF0YSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5yZW1vdmVQYWdlcygpO1xuICAgIHRoaXMuY2FsY3VsYXRlUGFnZSgpO1xuICAgIHRoaXMuc2VuZERhdGEoKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZVBhZ2UoKSB7XG4gICAgdGhpcy5wYWdlcyA9IFtdO1xuICAgIGlmICh0aGlzLmZ1bGxEYXRhTW9kZSAmJiB0aGlzLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy5kYXRhLmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy5kYXRhO1xuICAgIH1cbiAgICB0aGlzLnRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodGhpcy50b3RhbENvdW50IC8gdGhpcy5wZXJQYWdlKTtcbiAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFydEZyb207IGkgPD0gdGhpcy50b3RhbFBhZ2VzOyBpKyspIHtcbiAgICAgIGlmKHRoaXMucGFnZXMubGVuZ3RoIDwgKHRoaXMubWF4KzEpKSB7XG4gICAgICAgIHRoaXMucGFnZXMucHVzaChpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZW5kRGF0YSgpIHtcbiAgICBpZiAodGhpcy5mdWxsRGF0YU1vZGUgJiYgdGhpcy50b3RhbENvdW50ID4gMCkge1xuICAgICAgbGV0IHRvYmVTbGljZWRGcm9tID0gKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMucGVyUGFnZTtcbiAgICAgIGxldCB0b2JlU2xpY2VkVG8gPSB0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5wZXJQYWdlO1xuICAgICAgbGV0IHJlZm9ybWVkRGF0YSA9IFtdO1xuICAgICAgZm9yKGxldCBpID0gdG9iZVNsaWNlZEZyb207IGkgPCB0b2JlU2xpY2VkVG87IGkrKyl7XG4gICAgICAgIHJlZm9ybWVkRGF0YS5wdXNoKHRoaXMuZGF0YVtpXSk7XG4gICAgICB9XG4gICAgICB0aGlzLmdldGRhdGEuZW1pdChyZWZvcm1lZERhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldGRhdGEuZW1pdCgodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5wZXJQYWdlKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVQYWdlcygpe1xuICAgIHRoaXMuc3RhcnRGcm9tID0gKHRoaXMuY3VycmVudFBhZ2UgPiAxKSAmJiBcbiAgICAodGhpcy5jdXJyZW50UGFnZSA8IHRoaXMudG90YWxQYWdlcyAtIHRoaXMubWF4IHx8ICh0aGlzLmN1cnJlbnRQYWdlID4gdGhpcy5tYXggLSB0aGlzLm1heC8yKSkgPyB0aGlzLmN1cnJlbnRQYWdlIC0gMSA6IHRoaXMuc3RhcnRGcm9tO1xuICB9XG5cbiAgb25QYWdlQ2xpY2socGFnZU51bWJlcjogYW55KSB7XG4gICAgaWYgKHR5cGVvZiBwYWdlTnVtYmVyICE9IFwibnVtYmVyXCIpIHtcbiAgICAgIHBhZ2VOdW1iZXIgPSBwYXJzZUludChwYWdlTnVtYmVyKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2VOdW1iZXI7XG4gICAgdGhpcy5wYWdlLmVtaXQodGhpcy5jdXJyZW50UGFnZSk7XG4gICAgdGhpcy5zZW5kRGF0YSgpO1xuICAgIHRoaXMucmVtb3ZlUGFnZXMoKTtcbiAgICB0aGlzLmNhbGN1bGF0ZVBhZ2UoKTtcbiAgfVxuXG4gIGlzQWN0aXZlUGFnZShwYWdlTnVtYmVyOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIHBhZ2VOdW1iZXIgIT0gXCJudW1iZXJcIikge1xuICAgICAgcGFnZU51bWJlciA9IHBhcnNlSW50KHBhZ2VOdW1iZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UGFnZSA9PSBwYWdlTnVtYmVyID8gJ2FjdGl2ZScgOiAnJztcbiAgfVxuXG4gIG9uTmV4dCgpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5jdXJyZW50UGFnZSA8IHRoaXMudG90YWxQYWdlcyA/IHRoaXMuY3VycmVudFBhZ2UgKyAxIDogdGhpcy5jdXJyZW50UGFnZTtcbiAgICB0aGlzLnBhZ2UuZW1pdCh0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICB0aGlzLnNlbmREYXRhKCk7XG4gICAgdGhpcy5yZW1vdmVQYWdlcygpO1xuICAgIHRoaXMuY2FsY3VsYXRlUGFnZSgpO1xuICB9XG5cbiAgb25QcmV2aW91cygpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5jdXJyZW50UGFnZSA+IDEgPyB0aGlzLmN1cnJlbnRQYWdlIC0gMSA6IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgdGhpcy5wYWdlLmVtaXQodGhpcy5jdXJyZW50UGFnZSk7XG4gICAgdGhpcy5zZW5kRGF0YSgpO1xuICAgIHRoaXMucmVtb3ZlUGFnZXMoKTtcbiAgICB0aGlzLmNhbGN1bGF0ZVBhZ2UoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInBhZ2luYXRpb24td3JhcHBlciBwYWdpbmF0aW9uLXt7dGhlbWV9fVwiPlxuICA8ZGl2IGNsYXNzPVwicGFnZSBwYWdlLXByZXZpb3VzIG5vdC1zZWxlY3RhYmxlXCIgW2lubmVySHRtbF09XCJpY29ucy5wcmV2aW91c1wiIChjbGljayk9XCJvblByZXZpb3VzKClcIj48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInBhZ2Ugbm90LXNlbGVjdGFibGVcIiAqbmdGb3I9XCJsZXQgcGFnZSBvZiBwYWdlc1wiIFtuZ0NsYXNzXT1cImlzQWN0aXZlUGFnZShwYWdlKVwiIChjbGljayk9XCJvblBhZ2VDbGljayhwYWdlKVwiPlxuICAgIHt7cGFnZX19XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwicGFnZSBwYWdlLW5leHQgbm90LXNlbGVjdGFibGVcIiBbaW5uZXJIdG1sXT1cImljb25zLm5leHRcIiAoY2xpY2spPVwib25OZXh0KClcIj48L2Rpdj5cbjwvZGl2PlxuIl19