@qrsln/utils
Version:
65 lines • 8.71 kB
JavaScript
import { EventEmitter, Injectable } from '@angular/core';
import * as i0 from "@angular/core";
/** @dynamic */
export class PaginationService {
constructor() {
this.Changed = new EventEmitter();
}
Paginate(TotalItems, CurrentPage = 1, ItemsPerPage = 10, Size = 7) {
// calculate total pages
const totalPages = Math.ceil(TotalItems / ItemsPerPage);
// ensure current page isn't out of range
if (CurrentPage < 1) {
CurrentPage = 1;
}
else if (CurrentPage > totalPages) {
CurrentPage = totalPages;
}
let startPage;
let endPage;
if (totalPages <= Size) {
// less than {{indicatorsPerPage}} total pages so show all
startPage = 1;
endPage = totalPages;
}
else {
// more than {{indicatorsPerPage}} total pages so calculate start and end pages
if (CurrentPage <= +(Size / 2).toFixed(0) + 1) {
startPage = 1;
endPage = Size;
}
else if (CurrentPage + 4 >= totalPages) {
startPage = totalPages - (Size - 1);
endPage = totalPages;
}
else {
startPage = CurrentPage - +(Size / 2).toFixed(0) + 1;
endPage = CurrentPage + +(Size / 2).toFixed(0) - 1;
}
}
// calculate start and end item indexes
let startIndex = (CurrentPage - 1) * ItemsPerPage;
let endIndex = Math.min(startIndex + ItemsPerPage - 1, TotalItems - 1);
// create an array of pages to ng-repeat in the pager control
let pages = Array.from(Array(endPage + 1 - startPage).keys()).map(i => {
const val = startPage + i;
return { Value: val, Label: val.toString() };
});
this.Changed.emit(CurrentPage.toString());
// return object with all pager properties required by the view
return {
Req: { TotalItems, CurrentPage, ItemsPerPage, Size },
Pages: pages, TotalPages: totalPages,
StartPage: startPage, StartIndex: startIndex, EndPage: endPage, EndIndex: endIndex,
};
}
}
PaginationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: PaginationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
PaginationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: PaginationService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: PaginationService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: function () { return []; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdXRpbHMvU2VydmljZXMvc3JjL1BhZ2luYXRpb24vcGFnaW5hdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQUd2RCxlQUFlO0FBSWYsTUFBTSxPQUFPLGlCQUFpQjtJQUk1QjtRQUZPLFlBQU8sR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUdsRSxDQUFDO0lBRUQsUUFBUSxDQUFDLFVBQWtCLEVBQUUsY0FBc0IsQ0FBQyxFQUFFLGVBQXVCLEVBQUUsRUFBRSxPQUFlLENBQUM7UUFDL0Ysd0JBQXdCO1FBQ3hCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxDQUFDO1FBRXhELHlDQUF5QztRQUN6QyxJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUU7WUFDbkIsV0FBVyxHQUFHLENBQUMsQ0FBQztTQUNqQjthQUFNLElBQUksV0FBVyxHQUFHLFVBQVUsRUFBRTtZQUNuQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1NBQzFCO1FBRUQsSUFBSSxTQUFpQixDQUFDO1FBQ3RCLElBQUksT0FBZSxDQUFDO1FBQ3BCLElBQUksVUFBVSxJQUFJLElBQUksRUFBRTtZQUN0QiwwREFBMEQ7WUFDMUQsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNkLE9BQU8sR0FBRyxVQUFVLENBQUM7U0FDdEI7YUFBTTtZQUNMLCtFQUErRTtZQUMvRSxJQUFJLFdBQVcsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzdDLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBQ2QsT0FBTyxHQUFHLElBQUksQ0FBQzthQUNoQjtpQkFBTSxJQUFJLFdBQVcsR0FBRyxDQUFDLElBQUksVUFBVSxFQUFFO2dCQUN4QyxTQUFTLEdBQUcsVUFBVSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxPQUFPLEdBQUcsVUFBVSxDQUFDO2FBQ3RCO2lCQUFNO2dCQUNMLFNBQVMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyRCxPQUFPLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNwRDtTQUNGO1FBRUQsdUNBQXVDO1FBQ3ZDLElBQUksVUFBVSxHQUFHLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQztRQUNsRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxZQUFZLEdBQUcsQ0FBQyxFQUFFLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV2RSw2REFBNkQ7UUFDN0QsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNwRSxNQUFNLEdBQUcsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQVMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRTFDLCtEQUErRDtRQUMvRCxPQUFPO1lBQ0wsR0FBRyxFQUFFLEVBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFDO1lBQ2xELEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDcEMsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVE7U0FDbEUsQ0FBQztJQUNyQixDQUFDOzs4R0F4RFUsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FGaEIsTUFBTTsyRkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFdmVudEVtaXR0ZXIsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQYWdlLCBQYWdlclJlc3BvbnNlfSBmcm9tIFwiLi9Nb2RlbHNcIjtcblxuLyoqIEBkeW5hbWljICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQYWdpbmF0aW9uU2VydmljZSB7XG5cbiAgcHVibGljIENoYW5nZWQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gIH1cblxuICBQYWdpbmF0ZShUb3RhbEl0ZW1zOiBudW1iZXIsIEN1cnJlbnRQYWdlOiBudW1iZXIgPSAxLCBJdGVtc1BlclBhZ2U6IG51bWJlciA9IDEwLCBTaXplOiBudW1iZXIgPSA3KTogUGFnZXJSZXNwb25zZSB7XG4gICAgLy8gY2FsY3VsYXRlIHRvdGFsIHBhZ2VzXG4gICAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGguY2VpbChUb3RhbEl0ZW1zIC8gSXRlbXNQZXJQYWdlKTtcblxuICAgIC8vIGVuc3VyZSBjdXJyZW50IHBhZ2UgaXNuJ3Qgb3V0IG9mIHJhbmdlXG4gICAgaWYgKEN1cnJlbnRQYWdlIDwgMSkge1xuICAgICAgQ3VycmVudFBhZ2UgPSAxO1xuICAgIH0gZWxzZSBpZiAoQ3VycmVudFBhZ2UgPiB0b3RhbFBhZ2VzKSB7XG4gICAgICBDdXJyZW50UGFnZSA9IHRvdGFsUGFnZXM7XG4gICAgfVxuXG4gICAgbGV0IHN0YXJ0UGFnZTogbnVtYmVyO1xuICAgIGxldCBlbmRQYWdlOiBudW1iZXI7XG4gICAgaWYgKHRvdGFsUGFnZXMgPD0gU2l6ZSkge1xuICAgICAgLy8gbGVzcyB0aGFuIHt7aW5kaWNhdG9yc1BlclBhZ2V9fSB0b3RhbCBwYWdlcyBzbyBzaG93IGFsbFxuICAgICAgc3RhcnRQYWdlID0gMTtcbiAgICAgIGVuZFBhZ2UgPSB0b3RhbFBhZ2VzO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBtb3JlIHRoYW4ge3tpbmRpY2F0b3JzUGVyUGFnZX19IHRvdGFsIHBhZ2VzIHNvIGNhbGN1bGF0ZSBzdGFydCBhbmQgZW5kIHBhZ2VzXG4gICAgICBpZiAoQ3VycmVudFBhZ2UgPD0gKyhTaXplIC8gMikudG9GaXhlZCgwKSArIDEpIHtcbiAgICAgICAgc3RhcnRQYWdlID0gMTtcbiAgICAgICAgZW5kUGFnZSA9IFNpemU7XG4gICAgICB9IGVsc2UgaWYgKEN1cnJlbnRQYWdlICsgNCA+PSB0b3RhbFBhZ2VzKSB7XG4gICAgICAgIHN0YXJ0UGFnZSA9IHRvdGFsUGFnZXMgLSAoU2l6ZSAtIDEpO1xuICAgICAgICBlbmRQYWdlID0gdG90YWxQYWdlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0UGFnZSA9IEN1cnJlbnRQYWdlIC0gKyhTaXplIC8gMikudG9GaXhlZCgwKSArIDE7XG4gICAgICAgIGVuZFBhZ2UgPSBDdXJyZW50UGFnZSArICsoU2l6ZSAvIDIpLnRvRml4ZWQoMCkgLSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNhbGN1bGF0ZSBzdGFydCBhbmQgZW5kIGl0ZW0gaW5kZXhlc1xuICAgIGxldCBzdGFydEluZGV4ID0gKEN1cnJlbnRQYWdlIC0gMSkgKiBJdGVtc1BlclBhZ2U7XG4gICAgbGV0IGVuZEluZGV4ID0gTWF0aC5taW4oc3RhcnRJbmRleCArIEl0ZW1zUGVyUGFnZSAtIDEsIFRvdGFsSXRlbXMgLSAxKTtcblxuICAgIC8vIGNyZWF0ZSBhbiBhcnJheSBvZiBwYWdlcyB0byBuZy1yZXBlYXQgaW4gdGhlIHBhZ2VyIGNvbnRyb2xcbiAgICBsZXQgcGFnZXMgPSBBcnJheS5mcm9tKEFycmF5KGVuZFBhZ2UgKyAxIC0gc3RhcnRQYWdlKS5rZXlzKCkpLm1hcChpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IHN0YXJ0UGFnZSArIGk7XG4gICAgICByZXR1cm4ge1ZhbHVlOiB2YWwsIExhYmVsOiB2YWwudG9TdHJpbmcoKX0gYXMgUGFnZTtcbiAgICB9KTtcblxuICAgIHRoaXMuQ2hhbmdlZC5lbWl0KEN1cnJlbnRQYWdlLnRvU3RyaW5nKCkpO1xuXG4gICAgLy8gcmV0dXJuIG9iamVjdCB3aXRoIGFsbCBwYWdlciBwcm9wZXJ0aWVzIHJlcXVpcmVkIGJ5IHRoZSB2aWV3XG4gICAgcmV0dXJuIHtcbiAgICAgIFJlcToge1RvdGFsSXRlbXMsIEN1cnJlbnRQYWdlLCBJdGVtc1BlclBhZ2UsIFNpemV9LFxuICAgICAgUGFnZXM6IHBhZ2VzLCBUb3RhbFBhZ2VzOiB0b3RhbFBhZ2VzLFxuICAgICAgU3RhcnRQYWdlOiBzdGFydFBhZ2UsIFN0YXJ0SW5kZXg6IHN0YXJ0SW5kZXgsIEVuZFBhZ2U6IGVuZFBhZ2UsIEVuZEluZGV4OiBlbmRJbmRleCxcbiAgICB9IGFzIFBhZ2VyUmVzcG9uc2U7XG4gIH1cbn1cbiJdfQ==