UNPKG

air-lib

Version:

This is Air's angular component library

174 lines 14.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable } from '@angular/core'; import { PagingEvent } from '../entities/paging-event'; import { BehaviorSubject } from 'rxjs'; import * as i0 from "@angular/core"; export class PagingService { constructor() { PagingService.currentMessage = PagingService.messageSource.asObservable(); } /** * @param {?} hash * @param {?} context * @param {?} currentIndex * @param {?} itemsOnPage * @return {?} */ static fireHashChangedEvent(hash, context, currentIndex, itemsOnPage) { /** @type {?} */ const hashIndex = Math.floor(currentIndex / itemsOnPage); if (!PagingService.isExistsHash(context, hashIndex)) { PagingService.addHash(context, hashIndex, hash); } } /** * @param {?} event * @return {?} */ static firePagingEvent(event) { PagingService.saveToLocalStorage(event); PagingService.messageSource.next(event); } /** * @param {?} event * @return {?} */ static fireClosingContextEvent(event) { PagingService.messageSource.next(event); } /** * @param {?} pagingEvent * @return {?} */ static saveToLocalStorage(pagingEvent) { /** @type {?} */ const key = pagingEvent.hash + '_' + pagingEvent.currentId + '_' + pagingEvent.currentIndex; localStorage.setItem(key, JSON.stringify(pagingEvent)); } /** * @param {?} snapshot * @return {?} */ static readFromLocalStorage(snapshot) { /** @type {?} */ const key = PagingService.buildKey(snapshot); /** @type {?} */ const json = localStorage.getItem(key); if (!json) { return null; } /** @type {?} */ const result = (/** @type {?} */ (JSON.parse(json))); return result; } /** * @param {?} route * @param {?} name * @return {?} */ static readSegmentByName(route, name) { /** @type {?} */ const snapshot = route.snapshot; return snapshot.params[name]; } /** * @param {?} pagingEvent * @return {?} */ static buildRedirectUrl(pagingEvent) { return pagingEvent.detailsUrl + pagingEvent.currentId + '/' + pagingEvent.hash + '/' + pagingEvent.currentIndex; } /** * @param {?} snapshot * @return {?} */ static buildKey(snapshot) { /** @type {?} */ const id = snapshot.paramMap.get('id'); /** @type {?} */ const hash = snapshot.paramMap.get('hash'); /** @type {?} */ const pageIndex = snapshot.paramMap.get('page'); /** @type {?} */ const result = hash + '_' + id + '_' + pageIndex; console.log('buildKey=' + result); return result; } /** * @param {?} context * @param {?} index * @return {?} */ static isExistsHash(context, index) { /** @type {?} */ const key = this.buildMapKey(context, index); return PagingService.cache.has(key); } /** * @param {?} context * @param {?} index * @return {?} */ static getHash(context, index) { /** @type {?} */ const key = this.buildMapKey(context, index); /** @type {?} */ const result = PagingService.cache.get(key); if (result === undefined) { throw new Error('Key does not exists.'); } return result; } /** * @param {?} context * @param {?} index * @param {?} hash * @return {?} */ static addHash(context, index, hash) { /** @type {?} */ const key = this.buildMapKey(context, index); PagingService.cache.set(key, hash); } /** * @param {?} context * @param {?} index * @return {?} */ static buildMapKey(context, index) { /** @type {?} */ const splitter = '_'; return context + splitter + index; } } PagingService.cache = new Map(); PagingService.emptyPagingEvent = new PagingEvent('empty'); PagingService.messageSource = new BehaviorSubject(PagingService.emptyPagingEvent); PagingService.currentMessage = PagingService.messageSource.asObservable(); PagingService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; PagingService.ctorParameters = () => []; /** @nocollapse */ PagingService.ngInjectableDef = i0.defineInjectable({ factory: function PagingService_Factory() { return new PagingService(); }, token: PagingService, providedIn: "root" }); if (false) { /** * @type {?} * @private */ PagingService.cache; /** @type {?} */ PagingService.emptyPagingEvent; /** * @type {?} * @private */ PagingService.messageSource; /** @type {?} */ PagingService.currentMessage; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9haXItbGliLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL3BhZ2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDOztBQU1uRCxNQUFNO0lBSUo7UUFDRSxhQUFhLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUUsQ0FBQzs7Ozs7Ozs7SUFNTSxNQUFNLENBQUMsb0JBQW9CLENBQUMsSUFBWSxFQUFFLE9BQWUsRUFBRSxZQUFvQixFQUFFLFdBQW1COztjQUNuRyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO1FBQ3hELElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRTtZQUNuRCxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDakQ7SUFDSCxDQUFDOzs7OztJQUVNLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBa0I7UUFDNUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7Ozs7O0lBRU0sTUFBTSxDQUFDLHVCQUF1QixDQUFDLEtBQWtCO1FBQ3RELGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7Ozs7O0lBRU0sTUFBTSxDQUFDLGtCQUFrQixDQUFDLFdBQXdCOztjQUNq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QUFHLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDcEMsQ0FBQzs7QUFyRmMsbUJBQUssR0FBd0IsSUFBSSxHQUFHLEVBQWtCLENBQUM7QUFDeEQsOEJBQWdCLEdBQUcsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7QUFLM0MsMkJBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBYyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUVsRiw0QkFBYyxHQUE0QixhQUFhLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDOztZQWRwRyxVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7Ozs7Ozs7OztJQUlDLG9CQUFzRTs7SUFDdEUsK0JBQTBEOzs7OztJQUsxRCw0QkFBZ0c7O0lBRWhHLDZCQUFtRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQYWdpbmdFdmVudCB9IGZyb20gJy4uL2VudGl0aWVzL3BhZ2luZy1ldmVudCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFBhZ2luZ1NlcnZpY2Uge1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBjYWNoZTogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbiAgcHVibGljIHN0YXRpYyBlbXB0eVBhZ2luZ0V2ZW50ID0gbmV3IFBhZ2luZ0V2ZW50KCdlbXB0eScpO1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgUGFnaW5nU2VydmljZS5jdXJyZW50TWVzc2FnZSA9IFBhZ2luZ1NlcnZpY2UubWVzc2FnZVNvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIG1lc3NhZ2VTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhZ2luZ0V2ZW50PihQYWdpbmdTZXJ2aWNlLmVtcHR5UGFnaW5nRXZlbnQpO1xyXG5cclxuICBwdWJsaWMgc3RhdGljIGN1cnJlbnRNZXNzYWdlOiBPYnNlcnZhYmxlPFBhZ2luZ0V2ZW50PiA9IFBhZ2luZ1NlcnZpY2UubWVzc2FnZVNvdXJjZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHVibGljIHN0YXRpYyBmaXJlSGFzaENoYW5nZWRFdmVudChoYXNoOiBzdHJpbmcsIGNvbnRleHQ6IHN0cmluZywgY3VycmVudEluZGV4OiBudW1iZXIsIGl0ZW1zT25QYWdlOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGhhc2hJbmRleCA9IE1hdGguZmxvb3IoY3VycmVudEluZGV4IC8gaXRlbXNPblBhZ2UpO1xyXG4gICAgaWYgKCFQYWdpbmdTZXJ2aWNlLmlzRXhpc3RzSGFzaChjb250ZXh0LCBoYXNoSW5kZXgpKSB7XHJcbiAgICAgIFBhZ2luZ1NlcnZpY2UuYWRkSGFzaChjb250ZXh0LCBoYXNoSW5kZXgsIGhhc2gpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBmaXJlUGFnaW5nRXZlbnQoZXZlbnQ6IFBhZ2luZ0V2ZW50KSB7XHJcbiAgICAgIFBhZ2luZ1NlcnZpY2Uuc2F2ZVRvTG9jYWxTdG9yYWdlKGV2ZW50KTtcclxuICAgICAgUGFnaW5nU2VydmljZS5tZXNzYWdlU291cmNlLm5leHQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBmaXJlQ2xvc2luZ0NvbnRleHRFdmVudChldmVudDogUGFnaW5nRXZlbnQpIHtcclxuICAgIFBhZ2luZ1NlcnZpY2UubWVzc2FnZVNvdXJjZS5uZXh0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgc2F2ZVRvTG9jYWxTdG9yYWdlKHBhZ2luZ0V2ZW50OiBQYWdpbmdFdmVudCkge1xyXG4gICAgY29uc3Qga2V5ID0gcGFnaW5nRXZlbnQuaGFzaCArICdfJyArIHBhZ2luZ0V2ZW50LmN1cnJlbnRJZCArICdfJyArIHBhZ2luZ0V2ZW50LmN1cnJlbnRJbmRleDtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkocGFnaW5nRXZlbnQpKTtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHJlYWRGcm9tTG9jYWxTdG9yYWdlKHNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogUGFnaW5nRXZlbnQgfCBudWxsIHtcclxuICAgIGNvbnN0IGtleSA9IFBhZ2luZ1NlcnZpY2UuYnVpbGRLZXkoc25hcHNob3QpO1xyXG4gICAgY29uc3QganNvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XHJcbiAgICBpZiAoIWpzb24pIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ICA9IEpTT04ucGFyc2UoanNvbikgYXMgUGFnaW5nRXZlbnQ7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWFkU2VnbWVudEJ5TmFtZShyb3V0ZTogQWN0aXZhdGVkUm91dGUsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzbmFwc2hvdCA9IHJvdXRlLnNuYXBzaG90O1xyXG4gICAgcmV0dXJuIHNuYXBzaG90LnBhcmFtc1tuYW1lXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgYnVpbGRSZWRpcmVjdFVybChwYWdpbmdFdmVudDogUGFnaW5nRXZlbnQpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHBhZ2luZ0V2ZW50LmRldGFpbHNVcmwgKyBwYWdpbmdFdmVudC5jdXJyZW50SWQgKyAnLycgKyBwYWdpbmdFdmVudC5oYXNoICsgJy8nICsgcGFnaW5nRXZlbnQuY3VycmVudEluZGV4O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBidWlsZEtleShzbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBpZCA9IHNuYXBzaG90LnBhcmFtTWFwLmdldCgnaWQnKTtcclxuICAgIGNvbnN0IGhhc2ggPSBzbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2hhc2gnKTtcclxuICAgIGNvbnN0IHBhZ2VJbmRleCA9IHNuYXBzaG90LnBhcmFtTWFwLmdldCgncGFnZScpO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gaGFzaCArICdfJyArIGlkICsgJ18nICsgcGFnZUluZGV4O1xyXG5cclxuICAgIGNvbnNvbGUubG9nKCdidWlsZEtleT0nICsgcmVzdWx0KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBpc0V4aXN0c0hhc2goY29udGV4dDogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkTWFwS2V5KGNvbnRleHQsIGluZGV4KTtcclxuICAgIHJldHVybiBQYWdpbmdTZXJ2aWNlLmNhY2hlLmhhcyhrZXkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXRIYXNoKGNvbnRleHQ6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkTWFwS2V5KGNvbnRleHQsIGluZGV4KTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IFBhZ2luZ1NlcnZpY2UuY2FjaGUuZ2V0KGtleSk7XHJcbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdLZXkgZG9lcyBub3QgZXhpc3RzLicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgYWRkSGFzaChjb250ZXh0OiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIGhhc2g6IHN0cmluZykge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5idWlsZE1hcEtleShjb250ZXh0LCBpbmRleCk7XHJcbiAgICBQYWdpbmdTZXJ2aWNlLmNhY2hlLnNldChrZXksIGhhc2gpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBidWlsZE1hcEtleShjb250ZXh0OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc3BsaXR0ZXIgPSAnXyc7XHJcbiAgICByZXR1cm4gY29udGV4dCArIHNwbGl0dGVyICsgaW5kZXg7XHJcbiAgfVxyXG59XHJcbiJdfQ==