UNPKG

fundamental-ngx

Version:

SAP Fundamentals, implemented in Angular

128 lines 12.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable, isDevMode } from '@angular/core'; /** @type {?} */ const DISPLAY_NUM_PAGES = 3; /** * Service that is used to retrieve all the pages, * the number of pages, * and to validate the pagination object. */ export class PaginationService { /** * @hidden */ constructor() { /** * Constant representing the default number of items per page. */ this.DEFAULT_ITEMS_PER_PAGE = 10; /** * @hidden */ this.MORE = -1; } /** * Returns a number array representing the pages of the pagination object. * @param {?} pagination An object of type *Pagination*. * @return {?} */ getPages(pagination) { /** @type {?} */ const pages = []; this.validate(pagination); /** @type {?} */ const totalPages = this.getTotalPages(pagination); if (totalPages <= DISPLAY_NUM_PAGES) { for (let i = 1; i <= totalPages; i++) { pages.push(i); } } else { if (pagination.currentPage <= DISPLAY_NUM_PAGES) { for (let i = 1; i <= DISPLAY_NUM_PAGES; i++) { pages.push(i); } if (totalPages !== DISPLAY_NUM_PAGES + 1) { pages.push(this.MORE); } pages.push(totalPages); } else if (pagination.currentPage > totalPages - (DISPLAY_NUM_PAGES - 1)) { pages.push(1); if (totalPages !== DISPLAY_NUM_PAGES + 1) { pages.push(this.MORE); } for (let i = totalPages - (DISPLAY_NUM_PAGES - 1); i <= totalPages; i++) { pages.push(i); } } else { pages.push(1); if (totalPages !== DISPLAY_NUM_PAGES + 1) { pages.push(this.MORE); } /** @type {?} */ const buffer = Math.floor(DISPLAY_NUM_PAGES / 2); for (let i = pagination.currentPage - buffer; i <= pagination.currentPage + buffer; i++) { pages.push(i); } if (totalPages !== DISPLAY_NUM_PAGES + 1) { pages.push(this.MORE); } pages.push(totalPages); } } return pages; } /** * Retrieves the total number of pages. * @param {?} pagination An object of type *Pagination*. * @return {?} */ getTotalPages(pagination) { if (pagination.itemsPerPage <= 0) { pagination.itemsPerPage = this.DEFAULT_ITEMS_PER_PAGE; } return Math.ceil(pagination.totalItems / pagination.itemsPerPage); } /** * Provides validation for the pagination object. * @param {?} pagination An object of type *Pagination*. * @return {?} */ validate(pagination) { if (!pagination.totalItems && isDevMode()) { console.warn(`No pages provided in the Pagination object. This warning only appears in development mode.`); } if (!pagination.itemsPerPage) { pagination.itemsPerPage = this.DEFAULT_ITEMS_PER_PAGE; } else if (pagination.itemsPerPage < 0 && isDevMode()) { console.warn(`itemsPerPage must be greater than zero. This warning only appears in development mode.`); } if (!pagination.currentPage) { pagination.currentPage = 1; } } } PaginationService.decorators = [ { type: Injectable } ]; /** @nocollapse */ PaginationService.ctorParameters = () => []; if (false) { /** * Constant representing the default number of items per page. * @type {?} */ PaginationService.prototype.DEFAULT_ITEMS_PER_PAGE; /** * @hidden * @type {?} */ PaginationService.prototype.MORE; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vZnVuZGFtZW50YWwtbmd4LyIsInNvdXJjZXMiOlsibGliL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7TUFHaEQsaUJBQWlCLEdBQUcsQ0FBQzs7Ozs7O0FBUTNCLE1BQU0sT0FBTyxpQkFBaUI7Ozs7SUFRMUI7Ozs7UUFOTywyQkFBc0IsR0FBRyxFQUFFLENBQUM7Ozs7UUFHNUIsU0FBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBR0YsQ0FBQzs7Ozs7O0lBTVQsUUFBUSxDQUFDLFVBQXNCOztjQUM1QixLQUFLLEdBQUcsRUFBRTtRQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDOztjQUNwQixVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7UUFFakQsSUFBSSxVQUFVLElBQUksaUJBQWlCLEVBQUU7WUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDbEMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNqQjtTQUNKO2FBQU07WUFDSCxJQUFJLFVBQVUsQ0FBQyxXQUFXLElBQUksaUJBQWlCLEVBQUU7Z0JBQzdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDekMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDakI7Z0JBQ0QsSUFBSSxVQUFVLEtBQUssaUJBQWlCLEdBQUcsQ0FBQyxFQUFFO29CQUN0QyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDekI7Z0JBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUMxQjtpQkFBTSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEdBQUcsVUFBVSxHQUFHLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3RFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2QsSUFBSSxVQUFVLEtBQUssaUJBQWlCLEdBQUcsQ0FBQyxFQUFFO29CQUN0QyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDekI7Z0JBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNyRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNqQjthQUNKO2lCQUFNO2dCQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2QsSUFBSSxVQUFVLEtBQUssaUJBQWlCLEdBQUcsQ0FBQyxFQUFFO29CQUN0QyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDekI7O3NCQUNLLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztnQkFDaEQsS0FBSyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3JGLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2pCO2dCQUNELElBQUksVUFBVSxLQUFLLGlCQUFpQixHQUFHLENBQUMsRUFBRTtvQkFDdEMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3pCO2dCQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDMUI7U0FDSjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Ozs7OztJQU1NLGFBQWEsQ0FBQyxVQUFzQjtRQUN2QyxJQUFJLFVBQVUsQ0FBQyxZQUFZLElBQUksQ0FBQyxFQUFFO1lBQzlCLFVBQVUsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1NBQ3pEO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3RFLENBQUM7Ozs7OztJQU1NLFFBQVEsQ0FBQyxVQUFzQjtRQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsSUFBSSxTQUFTLEVBQUUsRUFBRTtZQUN2QyxPQUFPLENBQUMsSUFBSSxDQUFDLDRGQUE0RixDQUFDLENBQUM7U0FDOUc7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRTtZQUMxQixVQUFVLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztTQUN6RDthQUFNLElBQUksVUFBVSxDQUFDLFlBQVksR0FBRyxDQUFDLElBQUksU0FBUyxFQUFFLEVBQUU7WUFDbkQsT0FBTyxDQUFDLElBQUksQ0FBQyx3RkFBd0YsQ0FBQyxDQUFDO1NBQzFHO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUU7WUFDekIsVUFBVSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7U0FDOUI7SUFDTCxDQUFDOzs7WUF0RkosVUFBVTs7Ozs7Ozs7O0lBR1AsbURBQW1DOzs7OztJQUduQyxpQ0FBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBhZ2luYXRpb24gfSBmcm9tICcuL3BhZ2luYXRpb24ubW9kZWwnO1xuXG5jb25zdCBESVNQTEFZX05VTV9QQUdFUyA9IDM7XG5cbi8qKlxuICogU2VydmljZSB0aGF0IGlzIHVzZWQgdG8gcmV0cmlldmUgYWxsIHRoZSBwYWdlcyxcbiAqIHRoZSBudW1iZXIgb2YgcGFnZXMsXG4gKiBhbmQgdG8gdmFsaWRhdGUgdGhlIHBhZ2luYXRpb24gb2JqZWN0LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvblNlcnZpY2Uge1xuICAgIC8qKiBDb25zdGFudCByZXByZXNlbnRpbmcgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIGl0ZW1zIHBlciBwYWdlLiAqL1xuICAgIHB1YmxpYyBERUZBVUxUX0lURU1TX1BFUl9QQUdFID0gMTA7XG4gICAgXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgTU9SRSA9IC0xO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbnVtYmVyIGFycmF5IHJlcHJlc2VudGluZyB0aGUgcGFnZXMgb2YgdGhlIHBhZ2luYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSBwYWdpbmF0aW9uIEFuIG9iamVjdCBvZiB0eXBlICpQYWdpbmF0aW9uKi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UGFnZXMocGFnaW5hdGlvbjogUGFnaW5hdGlvbik6IG51bWJlcltdIHtcbiAgICAgICAgY29uc3QgcGFnZXMgPSBbXTtcbiAgICAgICAgdGhpcy52YWxpZGF0ZShwYWdpbmF0aW9uKTtcbiAgICAgICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMuZ2V0VG90YWxQYWdlcyhwYWdpbmF0aW9uKTtcblxuICAgICAgICBpZiAodG90YWxQYWdlcyA8PSBESVNQTEFZX05VTV9QQUdFUykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdG90YWxQYWdlczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcGFnZXMucHVzaChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwYWdpbmF0aW9uLmN1cnJlbnRQYWdlIDw9IERJU1BMQVlfTlVNX1BBR0VTKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gRElTUExBWV9OVU1fUEFHRVM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBwYWdlcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodG90YWxQYWdlcyAhPT0gRElTUExBWV9OVU1fUEFHRVMgKyAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2VzLnB1c2godGhpcy5NT1JFKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFnZXMucHVzaCh0b3RhbFBhZ2VzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFnaW5hdGlvbi5jdXJyZW50UGFnZSA+IHRvdGFsUGFnZXMgLSAoRElTUExBWV9OVU1fUEFHRVMgLSAxKSkge1xuICAgICAgICAgICAgICAgIHBhZ2VzLnB1c2goMSk7XG4gICAgICAgICAgICAgICAgaWYgKHRvdGFsUGFnZXMgIT09IERJU1BMQVlfTlVNX1BBR0VTICsgMSkge1xuICAgICAgICAgICAgICAgICAgICBwYWdlcy5wdXNoKHRoaXMuTU9SRSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSB0b3RhbFBhZ2VzIC0gKERJU1BMQVlfTlVNX1BBR0VTIC0gMSk7IGkgPD0gdG90YWxQYWdlczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2VzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYWdlcy5wdXNoKDEpO1xuICAgICAgICAgICAgICAgIGlmICh0b3RhbFBhZ2VzICE9PSBESVNQTEFZX05VTV9QQUdFUyArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZXMucHVzaCh0aGlzLk1PUkUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBidWZmZXIgPSBNYXRoLmZsb29yKERJU1BMQVlfTlVNX1BBR0VTIC8gMik7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHBhZ2luYXRpb24uY3VycmVudFBhZ2UgLSBidWZmZXI7IGkgPD0gcGFnaW5hdGlvbi5jdXJyZW50UGFnZSArIGJ1ZmZlcjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2VzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0b3RhbFBhZ2VzICE9PSBESVNQTEFZX05VTV9QQUdFUyArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZXMucHVzaCh0aGlzLk1PUkUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYWdlcy5wdXNoKHRvdGFsUGFnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYWdlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcy5cbiAgICAgKiBAcGFyYW0gcGFnaW5hdGlvbiBBbiBvYmplY3Qgb2YgdHlwZSAqUGFnaW5hdGlvbiouXG4gICAgICovXG4gICAgcHVibGljIGdldFRvdGFsUGFnZXMocGFnaW5hdGlvbjogUGFnaW5hdGlvbik6IG51bWJlciB7XG4gICAgICAgIGlmIChwYWdpbmF0aW9uLml0ZW1zUGVyUGFnZSA8PSAwKSB7XG4gICAgICAgICAgICBwYWdpbmF0aW9uLml0ZW1zUGVyUGFnZSA9IHRoaXMuREVGQVVMVF9JVEVNU19QRVJfUEFHRTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHBhZ2luYXRpb24udG90YWxJdGVtcyAvIHBhZ2luYXRpb24uaXRlbXNQZXJQYWdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyB2YWxpZGF0aW9uIGZvciB0aGUgcGFnaW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHBhZ2luYXRpb24gQW4gb2JqZWN0IG9mIHR5cGUgKlBhZ2luYXRpb24qLlxuICAgICAqL1xuICAgIHB1YmxpYyB2YWxpZGF0ZShwYWdpbmF0aW9uOiBQYWdpbmF0aW9uKSB7XG4gICAgICAgIGlmICghcGFnaW5hdGlvbi50b3RhbEl0ZW1zICYmIGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYE5vIHBhZ2VzIHByb3ZpZGVkIGluIHRoZSBQYWdpbmF0aW9uIG9iamVjdC4gVGhpcyB3YXJuaW5nIG9ubHkgYXBwZWFycyBpbiBkZXZlbG9wbWVudCBtb2RlLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcGFnaW5hdGlvbi5pdGVtc1BlclBhZ2UpIHtcbiAgICAgICAgICAgIHBhZ2luYXRpb24uaXRlbXNQZXJQYWdlID0gdGhpcy5ERUZBVUxUX0lURU1TX1BFUl9QQUdFO1xuICAgICAgICB9IGVsc2UgaWYgKHBhZ2luYXRpb24uaXRlbXNQZXJQYWdlIDwgMCAmJiBpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBpdGVtc1BlclBhZ2UgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4gVGhpcyB3YXJuaW5nIG9ubHkgYXBwZWFycyBpbiBkZXZlbG9wbWVudCBtb2RlLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcGFnaW5hdGlvbi5jdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgcGFnaW5hdGlvbi5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=