UNPKG

@lotto24-angular/imports-orchestrator

Version:

Orchestrate dynamically imported components in Angular applications

77 lines 10.2 kB
import { ChangeDetectionStrategy, Component, inject, Input, ViewChild, ViewContainerRef, } from '@angular/core'; import { ImportsOrchestratorCSSClassDirective, ImportsOrchestratorIODirective, ImportsOrchestratorLifecycleDirective, ImportsOrchestratorQueueDirective, } from './host-directive'; import * as i0 from "@angular/core"; import * as i1 from "./host-directive/import-queue.directive"; import * as i2 from "./host-directive/import-io.directive"; import * as i3 from "./host-directive/import-lifecycle.directive"; import * as i4 from "./host-directive/import-css-class.directive"; export class ImportsOrchestratorComponent { constructor() { this.queue = inject(ImportsOrchestratorQueueDirective, { self: true, }); } ngOnChanges(changes) { const importInput = changes['import']; if (importInput !== undefined && importInput.currentValue !== importInput.previousValue) { this.createAndAddItemToQueue(); } } ngAfterViewInit() { this.createAndAddItemToQueue(); } createAndAddItemToQueue() { if (!this.identifier || !this.container) { return; } this.queue.viewContainerRef = this.container; this.queue.import = this.identifier; this.queue.createAndAddItemToQueue(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ImportsOrchestratorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.6", type: ImportsOrchestratorComponent, isStandalone: true, selector: "import", inputs: { identifier: "identifier" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef }], usesOnChanges: true, hostDirectives: [{ directive: i1.ImportsOrchestratorQueueDirective, inputs: ["providers", "providers", "timeout", "timeout"] }, { directive: i2.ImportsOrchestratorIODirective, inputs: ["inputs", "inputs", "outputs", "outputs"] }, { directive: i3.ImportsOrchestratorLifecycleDirective, outputs: ["importQueued", "importQueued", "importStarted", "importStarted", "importFinished", "importFinished", "importComponent", "importComponent", "importErrored", "importErrored"] }, { directive: i4.ImportsOrchestratorCSSClassDirective, inputs: ["cssClass", "cssClass"] }], ngImport: i0, template: `<ng-container #container></ng-container>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ImportsOrchestratorComponent, decorators: [{ type: Component, args: [{ selector: 'import', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, hostDirectives: [ { directive: ImportsOrchestratorQueueDirective, // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property inputs: ['providers', 'timeout'], }, { directive: ImportsOrchestratorIODirective, // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property inputs: ['inputs', 'outputs'], }, { directive: ImportsOrchestratorLifecycleDirective, // eslint-disable-next-line @angular-eslint/no-outputs-metadata-property outputs: [ 'importQueued', 'importStarted', 'importFinished', 'importComponent', 'importErrored', ], }, { directive: ImportsOrchestratorCSSClassDirective, // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property inputs: ['cssClass'], }, ], template: `<ng-container #container></ng-container>`, }] }], propDecorators: { identifier: [{ type: Input }], container: [{ type: ViewChild, args: ['container', { read: ViewContainerRef }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9pbXBvcnRzLW9yY2hlc3RyYXRvci9zcmMvbGliL2NvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxFQUdMLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLG9DQUFvQyxFQUNwQyw4QkFBOEIsRUFDOUIscUNBQXFDLEVBQ3JDLGlDQUFpQyxHQUNsQyxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7QUFvQzFCLE1BQU0sT0FBTyw0QkFBNEI7SUFsQ3pDO1FBc0NtQixVQUFLLEdBQUcsTUFBTSxDQUFDLGlDQUFpQyxFQUFFO1lBQ2pFLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQyxDQUFDO0tBNEJKO0lBdkJRLFdBQVcsQ0FBQyxPQUFzQjtRQUN2QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsSUFDRSxXQUFXLEtBQUssU0FBUztZQUN6QixXQUFXLENBQUMsWUFBWSxLQUFLLFdBQVcsQ0FBQyxhQUFhLEVBQ3RELENBQUM7WUFDRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVNLGVBQWU7UUFDcEIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVPLHVCQUF1QjtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN4QyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUM3QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUN2QyxDQUFDOzhHQWpDVSw0QkFBNEI7a0dBQTVCLDRCQUE0QiwyTEFRUCxnQkFBZ0IscW1CQVZ0QywwQ0FBMEM7OzJGQUV6Qyw0QkFBNEI7a0JBbEN4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxRQUFRO29CQUNsQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGNBQWMsRUFBRTt3QkFDZDs0QkFDRSxTQUFTLEVBQUUsaUNBQWlDOzRCQUM1Qyx1RUFBdUU7NEJBQ3ZFLE1BQU0sRUFBRSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUM7eUJBQ2pDO3dCQUNEOzRCQUNFLFNBQVMsRUFBRSw4QkFBOEI7NEJBQ3pDLHVFQUF1RTs0QkFDdkUsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQzt5QkFDOUI7d0JBQ0Q7NEJBQ0UsU0FBUyxFQUFFLHFDQUFxQzs0QkFDaEQsd0VBQXdFOzRCQUN4RSxPQUFPLEVBQUU7Z0NBQ1AsY0FBYztnQ0FDZCxlQUFlO2dDQUNmLGdCQUFnQjtnQ0FDaEIsaUJBQWlCO2dDQUNqQixlQUFlOzZCQUNoQjt5QkFDRjt3QkFDRDs0QkFDRSxTQUFTLEVBQUUsb0NBQW9DOzRCQUMvQyx1RUFBdUU7NEJBQ3ZFLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQzt5QkFDckI7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFLDBDQUEwQztpQkFDckQ7OEJBR1EsVUFBVTtzQkFEaEIsS0FBSztnQkFRTixTQUFTO3NCQURSLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSW1wb3J0c09yY2hlc3RyYXRvckNTU0NsYXNzRGlyZWN0aXZlLFxuICBJbXBvcnRzT3JjaGVzdHJhdG9ySU9EaXJlY3RpdmUsXG4gIEltcG9ydHNPcmNoZXN0cmF0b3JMaWZlY3ljbGVEaXJlY3RpdmUsXG4gIEltcG9ydHNPcmNoZXN0cmF0b3JRdWV1ZURpcmVjdGl2ZSxcbn0gZnJvbSAnLi9ob3N0LWRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ltcG9ydCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0RGlyZWN0aXZlczogW1xuICAgIHtcbiAgICAgIGRpcmVjdGl2ZTogSW1wb3J0c09yY2hlc3RyYXRvclF1ZXVlRGlyZWN0aXZlLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dHMtbWV0YWRhdGEtcHJvcGVydHlcbiAgICAgIGlucHV0czogWydwcm92aWRlcnMnLCAndGltZW91dCddLFxuICAgIH0sXG4gICAge1xuICAgICAgZGlyZWN0aXZlOiBJbXBvcnRzT3JjaGVzdHJhdG9ySU9EaXJlY3RpdmUsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0cy1tZXRhZGF0YS1wcm9wZXJ0eVxuICAgICAgaW5wdXRzOiBbJ2lucHV0cycsICdvdXRwdXRzJ10sXG4gICAgfSxcbiAgICB7XG4gICAgICBkaXJlY3RpdmU6IEltcG9ydHNPcmNoZXN0cmF0b3JMaWZlY3ljbGVEaXJlY3RpdmUsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dHMtbWV0YWRhdGEtcHJvcGVydHlcbiAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgJ2ltcG9ydFF1ZXVlZCcsXG4gICAgICAgICdpbXBvcnRTdGFydGVkJyxcbiAgICAgICAgJ2ltcG9ydEZpbmlzaGVkJyxcbiAgICAgICAgJ2ltcG9ydENvbXBvbmVudCcsXG4gICAgICAgICdpbXBvcnRFcnJvcmVkJyxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBkaXJlY3RpdmU6IEltcG9ydHNPcmNoZXN0cmF0b3JDU1NDbGFzc0RpcmVjdGl2ZSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXRzLW1ldGFkYXRhLXByb3BlcnR5XG4gICAgICBpbnB1dHM6IFsnY3NzQ2xhc3MnXSxcbiAgICB9LFxuICBdLFxuICB0ZW1wbGF0ZTogYDxuZy1jb250YWluZXIgI2NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5gLFxufSlcbmV4cG9ydCBjbGFzcyBJbXBvcnRzT3JjaGVzdHJhdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KClcbiAgcHVibGljIGlkZW50aWZpZXIhOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBxdWV1ZSA9IGluamVjdChJbXBvcnRzT3JjaGVzdHJhdG9yUXVldWVEaXJlY3RpdmUsIHtcbiAgICBzZWxmOiB0cnVlLFxuICB9KTtcblxuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcbiAgY29udGFpbmVyITogVmlld0NvbnRhaW5lclJlZjtcblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IGltcG9ydElucHV0ID0gY2hhbmdlc1snaW1wb3J0J107XG4gICAgaWYgKFxuICAgICAgaW1wb3J0SW5wdXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgaW1wb3J0SW5wdXQuY3VycmVudFZhbHVlICE9PSBpbXBvcnRJbnB1dC5wcmV2aW91c1ZhbHVlXG4gICAgKSB7XG4gICAgICB0aGlzLmNyZWF0ZUFuZEFkZEl0ZW1Ub1F1ZXVlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNyZWF0ZUFuZEFkZEl0ZW1Ub1F1ZXVlKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUFuZEFkZEl0ZW1Ub1F1ZXVlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pZGVudGlmaWVyIHx8ICF0aGlzLmNvbnRhaW5lcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucXVldWUudmlld0NvbnRhaW5lclJlZiA9IHRoaXMuY29udGFpbmVyO1xuICAgIHRoaXMucXVldWUuaW1wb3J0ID0gdGhpcy5pZGVudGlmaWVyO1xuICAgIHRoaXMucXVldWUuY3JlYXRlQW5kQWRkSXRlbVRvUXVldWUoKTtcbiAgfVxufVxuIl19