UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

63 lines 8.88 kB
import { Directive, EnvironmentInjector, Injector, Input, Type, ViewContainerRef, inject } from '@angular/core'; import * as i0 from "@angular/core"; /** * Simplified version of [NgComponentOutlet](https://github.com/angular/angular/blob/main/packages/common/src/directives/ng_component_outlet.ts) * * In contrast to NgComponentOutlet it allows to set the environment injector. * * A [PR](https://github.com/angular/angular/pull/54764) has been raised to add that functionality in Angular. * * TODO: Remove this directive once the PR is merged. */ export class C8yComponentOutlet { constructor(__viewContainerRef) { this.__viewContainerRef = __viewContainerRef; this.c8yComponentOutlet = null; this.environment = inject(EnvironmentInjector); } ngOnChanges(changes) { if (this._needToReCreateComponentInstance(changes)) { this.__viewContainerRef.clear(); this._componentRef = undefined; if (this.c8yComponentOutlet) { // creating a new injector ensures that the Angular Chrome extension properly shows the element hierarchy const injector = Injector.create({ providers: [], parent: this.c8yComponentOutletInjector || this.__viewContainerRef.injector, name: 'c8yComponentOutletInjector' }); this._componentRef = this.__viewContainerRef.createComponent(this.c8yComponentOutlet, { injector: injector, environmentInjector: this.c8yComponentOutletEnvironmentInjector || this.environment }); } } } ngOnDestroy() { this._componentRef?.destroy(); } _needToReCreateComponentInstance(changes) { // Note: square brackets property accessor is safe for Closure compiler optimizations (the // `changes` argument of the `ngOnChanges` lifecycle hook retains the names of the fields that // were changed). return (changes['c8yComponentOutlet'] !== undefined || changes['c8yComponentOutletInjector'] !== undefined || changes['c8yComponentOutletEnvironmentInjector'] !== undefined); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: C8yComponentOutlet, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: C8yComponentOutlet, isStandalone: true, selector: "[c8yComponentOutlet]", inputs: { c8yComponentOutlet: "c8yComponentOutlet", c8yComponentOutletInjector: "c8yComponentOutletInjector", c8yComponentOutletEnvironmentInjector: "c8yComponentOutletEnvironmentInjector" }, usesOnChanges: true, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: C8yComponentOutlet, decorators: [{ type: Directive, args: [{ selector: '[c8yComponentOutlet]', standalone: true }] }], ctorParameters: () => [{ type: i0.ViewContainerRef }], propDecorators: { c8yComponentOutlet: [{ type: Input }], c8yComponentOutletInjector: [{ type: Input }], c8yComponentOutletEnvironmentInjector: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LW91dGxldC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2NvbW1vbi9jb21wb25lbnQtb3V0bGV0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULG1CQUFtQixFQUNuQixRQUFRLEVBQ1IsS0FBSyxFQUlMLElBQUksRUFDSixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDOztBQUV2Qjs7Ozs7Ozs7R0FRRztBQUtILE1BQU0sT0FBTyxrQkFBa0I7SUFXN0IsWUFBb0Isa0JBQW9DO1FBQXBDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBa0I7UUFWL0MsdUJBQWtCLEdBQXFCLElBQUksQ0FBQztRQVE3QyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRVMsQ0FBQztJQUU1RCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7WUFFL0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDNUIseUdBQXlHO2dCQUN6RyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO29CQUMvQixTQUFTLEVBQUUsRUFBRTtvQkFDYixNQUFNLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRO29CQUMzRSxJQUFJLEVBQUUsNEJBQTRCO2lCQUNuQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtvQkFDcEYsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLG1CQUFtQixFQUFFLElBQUksQ0FBQyxxQ0FBcUMsSUFBSSxJQUFJLENBQUMsV0FBVztpQkFDcEYsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVPLGdDQUFnQyxDQUFDLE9BQXNCO1FBQzdELDBGQUEwRjtRQUMxRiw4RkFBOEY7UUFDOUYsaUJBQWlCO1FBQ2pCLE9BQU8sQ0FDTCxPQUFPLENBQUMsb0JBQW9CLENBQUMsS0FBSyxTQUFTO1lBQzNDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLFNBQVM7WUFDbkQsT0FBTyxDQUFDLHVDQUF1QyxDQUFDLEtBQUssU0FBUyxDQUMvRCxDQUFDO0lBQ0osQ0FBQzsrR0E5Q1Usa0JBQWtCO21HQUFsQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBSjlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO3FGQUVVLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBRUcscUNBQXFDO3NCQUE3QyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50UmVmLFxuICBEaXJlY3RpdmUsXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFR5cGUsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBTaW1wbGlmaWVkIHZlcnNpb24gb2YgW05nQ29tcG9uZW50T3V0bGV0XShodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvbWFpbi9wYWNrYWdlcy9jb21tb24vc3JjL2RpcmVjdGl2ZXMvbmdfY29tcG9uZW50X291dGxldC50cylcbiAqXG4gKiBJbiBjb250cmFzdCB0byBOZ0NvbXBvbmVudE91dGxldCBpdCBhbGxvd3MgdG8gc2V0IHRoZSBlbnZpcm9ubWVudCBpbmplY3Rvci5cbiAqXG4gKiBBIFtQUl0oaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9wdWxsLzU0NzY0KSBoYXMgYmVlbiByYWlzZWQgdG8gYWRkIHRoYXQgZnVuY3Rpb25hbGl0eSBpbiBBbmd1bGFyLlxuICpcbiAqIFRPRE86IFJlbW92ZSB0aGlzIGRpcmVjdGl2ZSBvbmNlIHRoZSBQUiBpcyBtZXJnZWQuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjOHlDb21wb25lbnRPdXRsZXRdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDOHlDb21wb25lbnRPdXRsZXQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGM4eUNvbXBvbmVudE91dGxldDogVHlwZTxhbnk+IHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KCkgYzh5Q29tcG9uZW50T3V0bGV0SW5qZWN0b3I/OiBJbmplY3RvcjtcblxuICBASW5wdXQoKSBjOHlDb21wb25lbnRPdXRsZXRFbnZpcm9ubWVudEluamVjdG9yPzogRW52aXJvbm1lbnRJbmplY3RvcjtcblxuICBwcml2YXRlIF9jb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgZW52aXJvbm1lbnQgPSBpbmplY3QoRW52aXJvbm1lbnRJbmplY3Rvcik7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICh0aGlzLl9uZWVkVG9SZUNyZWF0ZUNvbXBvbmVudEluc3RhbmNlKGNoYW5nZXMpKSB7XG4gICAgICB0aGlzLl9fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuICAgICAgdGhpcy5fY29tcG9uZW50UmVmID0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAodGhpcy5jOHlDb21wb25lbnRPdXRsZXQpIHtcbiAgICAgICAgLy8gY3JlYXRpbmcgYSBuZXcgaW5qZWN0b3IgZW5zdXJlcyB0aGF0IHRoZSBBbmd1bGFyIENocm9tZSBleHRlbnNpb24gcHJvcGVybHkgc2hvd3MgdGhlIGVsZW1lbnQgaGllcmFyY2h5XG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgICBwcm92aWRlcnM6IFtdLFxuICAgICAgICAgIHBhcmVudDogdGhpcy5jOHlDb21wb25lbnRPdXRsZXRJbmplY3RvciB8fCB0aGlzLl9fdmlld0NvbnRhaW5lclJlZi5pbmplY3RvcixcbiAgICAgICAgICBuYW1lOiAnYzh5Q29tcG9uZW50T3V0bGV0SW5qZWN0b3InXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9jb21wb25lbnRSZWYgPSB0aGlzLl9fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQodGhpcy5jOHlDb21wb25lbnRPdXRsZXQsIHtcbiAgICAgICAgICBpbmplY3RvcjogaW5qZWN0b3IsXG4gICAgICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5jOHlDb21wb25lbnRPdXRsZXRFbnZpcm9ubWVudEluamVjdG9yIHx8IHRoaXMuZW52aXJvbm1lbnRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fY29tcG9uZW50UmVmPy5kZXN0cm95KCk7XG4gIH1cblxuICBwcml2YXRlIF9uZWVkVG9SZUNyZWF0ZUNvbXBvbmVudEluc3RhbmNlKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBib29sZWFuIHtcbiAgICAvLyBOb3RlOiBzcXVhcmUgYnJhY2tldHMgcHJvcGVydHkgYWNjZXNzb3IgaXMgc2FmZSBmb3IgQ2xvc3VyZSBjb21waWxlciBvcHRpbWl6YXRpb25zICh0aGVcbiAgICAvLyBgY2hhbmdlc2AgYXJndW1lbnQgb2YgdGhlIGBuZ09uQ2hhbmdlc2AgbGlmZWN5Y2xlIGhvb2sgcmV0YWlucyB0aGUgbmFtZXMgb2YgdGhlIGZpZWxkcyB0aGF0XG4gICAgLy8gd2VyZSBjaGFuZ2VkKS5cbiAgICByZXR1cm4gKFxuICAgICAgY2hhbmdlc1snYzh5Q29tcG9uZW50T3V0bGV0J10gIT09IHVuZGVmaW5lZCB8fFxuICAgICAgY2hhbmdlc1snYzh5Q29tcG9uZW50T3V0bGV0SW5qZWN0b3InXSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICBjaGFuZ2VzWydjOHlDb21wb25lbnRPdXRsZXRFbnZpcm9ubWVudEluamVjdG9yJ10gIT09IHVuZGVmaW5lZFxuICAgICk7XG4gIH1cbn1cbiJdfQ==