UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

77 lines 12.3 kB
import { Inject, Injectable, Injector, Optional } from '@angular/core'; import { Router } from '@angular/router'; import { combineLatest, timer } from 'rxjs'; import { distinctUntilChanged, filter, mergeMap, shareReplay, take, takeUntil } from 'rxjs/operators'; import { ExtensionPointForPlugins, fromTriggerOnce, getInjectedHooks, stateToFactory } from '../common/extension-hooks'; import { PluginsResolveService } from '../plugins'; import { HOOK_COMPONENTS, RESOLVING_COMPONENT_WAIT_TIME } from './dynamic-component.model'; import { DynamicResolverService } from './dynamic-resolver.service'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "./dynamic-resolver.service"; import * as i3 from "../plugins"; export class DynamicComponentService extends ExtensionPointForPlugins { constructor(rootInjector, router, waitTimeout, dynamicResolver, plugins) { super(rootInjector, plugins); this.router = router; this.waitTimeout = waitTimeout; this.dynamicResolver = dynamicResolver; this.plugins = plugins; this.DEFAULT_WAIT_TIMEOUT = 5000; this.items$ = this.setupItemsObservable(); } get state() { return this.state$.value; } /** * Returns a component by it's id as an observable. * @param id The id of the component. */ getById(id) { if (!id) { return Promise.resolve(undefined); } return this.items$ .pipe(mergeMap((cmps) => cmps), filter((cmp) => cmp.id === id), take(1)) .toPromise(); } add(component) { this.state.add(component); this.emitNewState(); } remove(component) { this.state.delete(component); this.emitNewState(); } async executeResolvers(componentIdAndConfig) { const dynamicDef = await Promise.all(componentIdAndConfig.map(({ componentId }) => this.getById(componentId))); const result = await this.dynamicResolver.executeResolvers(componentIdAndConfig, dynamicDef); return result; } async serializeConfigs(componentIdAndConfig) { const dynamicDef = await Promise.all(componentIdAndConfig.map(({ componentId }) => this.getById(componentId))); return this.dynamicResolver.serialize(componentIdAndConfig, dynamicDef); } setupItemsObservable() { const remotesLoaded$ = this.plugins.allPluginsLoaded$.pipe(filter(loaded => !!loaded), take(1)); return fromTriggerOnce(this.router, this.refresh$, [ getInjectedHooks(HOOK_COMPONENTS, this.injectors), () => this.factories, stateToFactory(this.state$) ]).pipe(distinctUntilChanged(), takeUntil(combineLatest([timer(this.waitTimeout || this.DEFAULT_WAIT_TIMEOUT), remotesLoaded$])), shareReplay(1)); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicComponentService, deps: [{ token: i0.Injector }, { token: i1.Router }, { token: RESOLVING_COMPONENT_WAIT_TIME, optional: true }, { token: i2.DynamicResolverService }, { token: i3.PluginsResolveService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicComponentService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicComponentService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.Router }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [RESOLVING_COMPONENT_WAIT_TIME] }] }, { type: i2.DynamicResolverService }, { type: i3.PluginsResolveService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jb21wb25lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZHluYW1pYy1jb21wb25lbnQvZHluYW1pYy1jb21wb25lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFjLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4RCxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixRQUFRLEVBQ1IsV0FBVyxFQUNYLElBQUksRUFDSixTQUFTLEVBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNmLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ25ELE9BQU8sRUFFTCxlQUFlLEVBQ2YsNkJBQTZCLEVBQzlCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7O0FBS3BFLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSx3QkFBb0Q7SUFHL0YsWUFDRSxZQUFzQixFQUNkLE1BQWMsRUFDcUMsV0FBbUIsRUFDdEUsZUFBdUMsRUFDdkMsT0FBOEI7UUFFdEMsS0FBSyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUxyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ3FDLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQ3RFLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtRQUN2QyxZQUFPLEdBQVAsT0FBTyxDQUF1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QUFDLENBQ2YsQ0FBQztJQUNKLENBQUM7K0dBN0VVLHVCQUF1QixnRUFNWiw2QkFBNkI7bUhBTnhDLHVCQUF1QixjQUZ0QixNQUFNOzs0RkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFPSSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIG1lcmdlTWFwLFxuICBzaGFyZVJlcGxheSxcbiAgdGFrZSxcbiAgdGFrZVVudGlsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEV4dGVuc2lvblBvaW50Rm9yUGx1Z2lucyxcbiAgZnJvbVRyaWdnZXJPbmNlLFxuICBnZXRJbmplY3RlZEhvb2tzLFxuICBzdGF0ZVRvRmFjdG9yeVxufSBmcm9tICcuLi9jb21tb24vZXh0ZW5zaW9uLWhvb2tzJztcbmltcG9ydCB7IFBsdWdpbnNSZXNvbHZlU2VydmljZSB9IGZyb20gJy4uL3BsdWdpbnMnO1xuaW1wb3J0IHtcbiAgRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24sXG4gIEhPT0tfQ09NUE9ORU5UUyxcbiAgUkVTT0xWSU5HX0NPTVBPTkVOVF9XQUlUX1RJTUVcbn0gZnJvbSAnLi9keW5hbWljLWNvbXBvbmVudC5tb2RlbCc7XG5pbXBvcnQgeyBEeW5hbWljUmVzb2x2ZXJTZXJ2aWNlIH0gZnJvbSAnLi9keW5hbWljLXJlc29sdmVyLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEeW5hbWljQ29tcG9uZW50U2VydmljZSBleHRlbmRzIEV4dGVuc2lvblBvaW50Rm9yUGx1Z2luczxEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbj4ge1xuICBwcml2YXRlIERFRkFVTFRfV0FJVF9USU1FT1VUID0gNTAwMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByb290SW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChSRVNPTFZJTkdfQ09NUE9ORU5UX1dBSVRfVElNRSkgcHJpdmF0ZSB3YWl0VGltZW91dDogbnVtYmVyLFxuICAgIHByaXZhdGUgZHluYW1pY1Jlc29sdmVyOiBEeW5hbWljUmVzb2x2ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGx1Z2luczogUGx1Z2luc1Jlc29sdmVTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKHJvb3RJbmplY3RvciwgcGx1Z2lucyk7XG4gICAgdGhpcy5pdGVtcyQgPSB0aGlzLnNldHVwSXRlbXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgc3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUkLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBjb21wb25lbnQgYnkgaXQncyBpZCBhcyBhbiBvYnNlcnZhYmxlLlxuICAgKiBAcGFyYW0gaWQgVGhlIGlkIG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBnZXRCeUlkKGlkKTogUHJvbWlzZTxEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbj4ge1xuICAgIGlmICghaWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMkXG4gICAgICAucGlwZShcbiAgICAgICAgbWVyZ2VNYXAoKGNtcHM6IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uW10pID0+IGNtcHMpLFxuICAgICAgICBmaWx0ZXIoKGNtcDogRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24pID0+IGNtcC5pZCA9PT0gaWQpLFxuICAgICAgICB0YWtlKDEpXG4gICAgICApXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhZGQoY29tcG9uZW50OiBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbikge1xuICAgIHRoaXMuc3RhdGUuYWRkKGNvbXBvbmVudCk7XG4gICAgdGhpcy5lbWl0TmV3U3RhdGUoKTtcbiAgfVxuXG4gIHJlbW92ZShjb21wb25lbnQ6IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uKSB7XG4gICAgdGhpcy5zdGF0ZS5kZWxldGUoY29tcG9uZW50KTtcbiAgICB0aGlzLmVtaXROZXdTdGF0ZSgpO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZVJlc29sdmVycyhjb21wb25lbnRJZEFuZENvbmZpZzogQXJyYXk8eyBjb21wb25lbnRJZDogc3RyaW5nOyBjb25maWc6IGFueSB9Pikge1xuICAgIGNvbnN0IGR5bmFtaWNEZWYgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGNvbXBvbmVudElkQW5kQ29uZmlnLm1hcCgoeyBjb21wb25lbnRJZCB9KSA9PiB0aGlzLmdldEJ5SWQoY29tcG9uZW50SWQpKVxuICAgICk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5keW5hbWljUmVzb2x2ZXIuZXhlY3V0ZVJlc29sdmVycyhjb21wb25lbnRJZEFuZENvbmZpZywgZHluYW1pY0RlZik7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGFzeW5jIHNlcmlhbGl6ZUNvbmZpZ3MoY29tcG9uZW50SWRBbmRDb25maWc6IEFycmF5PHsgY29tcG9uZW50SWQ6IHN0cmluZzsgY29uZmlnOiBhbnkgfT4pIHtcbiAgICBjb25zdCBkeW5hbWljRGVmID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBjb21wb25lbnRJZEFuZENvbmZpZy5tYXAoKHsgY29tcG9uZW50SWQgfSkgPT4gdGhpcy5nZXRCeUlkKGNvbXBvbmVudElkKSlcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmR5bmFtaWNSZXNvbHZlci5zZXJpYWxpemUoY29tcG9uZW50SWRBbmRDb25maWcsIGR5bmFtaWNEZWYpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwSXRlbXNPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8RHluYW1pY0NvbXBvbmVudERlZmluaXRpb25bXT4ge1xuICAgIGNvbnN0IHJlbW90ZXNMb2FkZWQkID0gdGhpcy5wbHVnaW5zLmFsbFBsdWdpbnNMb2FkZWQkLnBpcGUoXG4gICAgICBmaWx0ZXIobG9hZGVkID0+ICEhbG9hZGVkKSxcbiAgICAgIHRha2UoMSlcbiAgICApO1xuXG4gICAgcmV0dXJuIGZyb21UcmlnZ2VyT25jZTxEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbj4odGhpcy5yb3V0ZXIsIHRoaXMucmVmcmVzaCQsIFtcbiAgICAgIGdldEluamVjdGVkSG9va3M8RHluYW1pY0NvbXBvbmVudERlZmluaXRpb24+KEhPT0tfQ09NUE9ORU5UUywgdGhpcy5pbmplY3RvcnMpLFxuICAgICAgKCkgPT4gdGhpcy5mYWN0b3JpZXMsXG4gICAgICBzdGF0ZVRvRmFjdG9yeSh0aGlzLnN0YXRlJClcbiAgICBdKS5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHRha2VVbnRpbChcbiAgICAgICAgY29tYmluZUxhdGVzdChbdGltZXIodGhpcy53YWl0VGltZW91dCB8fCB0aGlzLkRFRkFVTFRfV0FJVF9USU1FT1VUKSwgcmVtb3Rlc0xvYWRlZCRdKVxuICAgICAgKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxufVxuIl19