UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

59 lines 8.93 kB
import { Injectable, Injector } from '@angular/core'; import { InventoryService } from '@c8y/client'; import { from, of } from 'rxjs'; import { catchError, map, shareReplay, tap } from 'rxjs/operators'; import { ViewContextServices } from './view-context.service'; import * as i0 from "@angular/core"; export class ContextRouteGuard { constructor(injector) { this.injector = injector; this.caches = new Map(); } canActivate(route) { const id = route.paramMap.get('id'); const service = this.service(route); this.clearDetailCached(service, id); return this.detailCached(service, id).pipe(tap(contextData => { Object.keys(route.data.contextData).forEach(key => delete route.data.contextData[key]); Object.assign(route.data.contextData, contextData); }), map(() => true), catchError(() => of(false))); } service(route) { const serviceInstance = ViewContextServices.contextToService(route.data.context); return this.injector.get(serviceInstance); } detailCached(service, id) { if (id === 'new') { return of(undefined); } const cache = this.getCache(service); let cached = cache[id]; if (!cached) { const params = service instanceof InventoryService ? { withChildren: false } : undefined; cached = from(service.detail(id, params)).pipe(map(({ data }) => data), shareReplay(1)); cache[id] = cached; } return cached; } clearDetailCached(service, id) { const cache = this.getCache(service); delete cache[id]; } getCache(service) { let cache = this.caches.get(service); if (!cache) { cache = {}; this.caches.set(service, cache); } return cache; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContextRouteGuard, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContextRouteGuard, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContextRouteGuard, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i0.Injector }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1yb3V0ZS5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvcm91dGVyL2NvbnRleHQtcm91dGUuZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFFM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFLN0QsTUFBTSxPQUFPLGlCQUFpQjtJQUU1QixZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRDlCLFdBQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2MsQ0FBQztJQUUxQyxXQUFXLENBQUMsS0FBNkI7UUFDdkMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN4QyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN2RixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFDZixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzVCLENBQUM7SUFDSixDQUFDO0lBRU8sT0FBTyxDQUFDLEtBQTZCO1FBQzNDLE1BQU0sZUFBZSxHQUFHLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakYsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUE2RCxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVPLFlBQVksQ0FDbEIsT0FBaUQsRUFDakQsRUFBbUI7UUFFbkIsSUFBSSxFQUFFLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDakIsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sTUFBTSxHQUFHLE9BQU8sWUFBWSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN6RixNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM1QyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFDdkIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7WUFDRixLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8saUJBQWlCLENBQ3ZCLE9BQWlELEVBQ2pELEVBQW1CO1FBRW5CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVPLFFBQVEsQ0FBQyxPQUFpRDtRQUNoRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7K0dBMURVLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07OzRGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJbnZlbnRvcnlTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgc2hhcmVSZXBsYXksIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFZpZXdDb250ZXh0U2VydmljZXMgfSBmcm9tICcuL3ZpZXctY29udGV4dC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ29udGV4dFJvdXRlR3VhcmQge1xuICBwcml2YXRlIGNhY2hlcyA9IG5ldyBNYXAoKTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHt9XG5cbiAgY2FuQWN0aXZhdGUocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBpZCA9IHJvdXRlLnBhcmFtTWFwLmdldCgnaWQnKTtcbiAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5zZXJ2aWNlKHJvdXRlKTtcbiAgICB0aGlzLmNsZWFyRGV0YWlsQ2FjaGVkKHNlcnZpY2UsIGlkKTtcbiAgICByZXR1cm4gdGhpcy5kZXRhaWxDYWNoZWQoc2VydmljZSwgaWQpLnBpcGUoXG4gICAgICB0YXAoY29udGV4dERhdGEgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhyb3V0ZS5kYXRhLmNvbnRleHREYXRhKS5mb3JFYWNoKGtleSA9PiBkZWxldGUgcm91dGUuZGF0YS5jb250ZXh0RGF0YVtrZXldKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihyb3V0ZS5kYXRhLmNvbnRleHREYXRhLCBjb250ZXh0RGF0YSk7XG4gICAgICB9KSxcbiAgICAgIG1hcCgoKSA9PiB0cnVlKSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoZmFsc2UpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNlcnZpY2Uocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpIHtcbiAgICBjb25zdCBzZXJ2aWNlSW5zdGFuY2UgPSBWaWV3Q29udGV4dFNlcnZpY2VzLmNvbnRleHRUb1NlcnZpY2Uocm91dGUuZGF0YS5jb250ZXh0KTtcbiAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoc2VydmljZUluc3RhbmNlIGFzIFR5cGU8SW5zdGFuY2VUeXBlPHR5cGVvZiBzZXJ2aWNlSW5zdGFuY2U+Pik7XG4gIH1cblxuICBwcml2YXRlIGRldGFpbENhY2hlZChcbiAgICBzZXJ2aWNlOiBSZXR1cm5UeXBlPENvbnRleHRSb3V0ZUd1YXJkWydzZXJ2aWNlJ10+LFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXJcbiAgKTogT2JzZXJ2YWJsZTxBd2FpdGVkPFJldHVyblR5cGU8UmV0dXJuVHlwZTxDb250ZXh0Um91dGVHdWFyZFsnc2VydmljZSddPlsnZGV0YWlsJ10+PlsnZGF0YSddPiB7XG4gICAgaWYgKGlkID09PSAnbmV3Jykge1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGNvbnN0IGNhY2hlID0gdGhpcy5nZXRDYWNoZShzZXJ2aWNlKTtcbiAgICBsZXQgY2FjaGVkID0gY2FjaGVbaWRdO1xuICAgIGlmICghY2FjaGVkKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSBzZXJ2aWNlIGluc3RhbmNlb2YgSW52ZW50b3J5U2VydmljZSA/IHsgd2l0aENoaWxkcmVuOiBmYWxzZSB9IDogdW5kZWZpbmVkO1xuICAgICAgY2FjaGVkID0gZnJvbShzZXJ2aWNlLmRldGFpbChpZCwgcGFyYW1zKSkucGlwZShcbiAgICAgICAgbWFwKCh7IGRhdGEgfSkgPT4gZGF0YSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgICAgY2FjaGVbaWRdID0gY2FjaGVkO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckRldGFpbENhY2hlZChcbiAgICBzZXJ2aWNlOiBSZXR1cm5UeXBlPENvbnRleHRSb3V0ZUd1YXJkWydzZXJ2aWNlJ10+LFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXJcbiAgKSB7XG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLmdldENhY2hlKHNlcnZpY2UpO1xuICAgIGRlbGV0ZSBjYWNoZVtpZF07XG4gIH1cblxuICBwcml2YXRlIGdldENhY2hlKHNlcnZpY2U6IFJldHVyblR5cGU8Q29udGV4dFJvdXRlR3VhcmRbJ3NlcnZpY2UnXT4pIHtcbiAgICBsZXQgY2FjaGUgPSB0aGlzLmNhY2hlcy5nZXQoc2VydmljZSk7XG4gICAgaWYgKCFjYWNoZSkge1xuICAgICAgY2FjaGUgPSB7fTtcbiAgICAgIHRoaXMuY2FjaGVzLnNldChzZXJ2aWNlLCBjYWNoZSk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZTtcbiAgfVxufVxuIl19