UNPKG

@qrsln/utils

Version:
65 lines 8.71 kB
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==