UNPKG

@lotto24-angular/imports-orchestrator

Version:

Orchestrate dynamically imported components in Angular applications

25 lines 4.18 kB
import { ChangeDetectorRef } from '@angular/core'; import { bindComponentInputs, bindComponentOutputs } from './bind-component-io'; import { firstValueFrom } from 'rxjs'; import { deferUntilComponentReady$ } from './defer-until-component-ready'; export async function mountComponent(componentRef, item) { item.destroy$.subscribe(() => componentRef.destroy()); if (item.io) { bindComponentInputs(componentRef, item); bindComponentOutputs(componentRef, item); } try { await firstValueFrom(deferUntilComponentReady$(componentRef, item)); } catch (x) { // no-op } // This will trigger Angular lifecycle on componentRef's entire component tree // * Bindings will be resolved // * Projected content will be processed // * Usages of ImportsOrchestratorQueueDirective in the tree will then insert items to the queue // * It is of vital importance that items are queued before triggering processQueue again // IMPORTANT: markForCheck is not enough, as it would not cause an immediate change detection cycle componentRef.injector.get(ChangeDetectorRef).detectChanges(); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW91bnQtY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9pbXBvcnRzLW9yY2hlc3RyYXRvci9zcmMvbGliL3Jlc29sdmUvdXRpbC9tb3VudC1jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzFFLE1BQU0sQ0FBQyxLQUFLLFVBQVUsY0FBYyxDQUNsQyxZQUFtQyxFQUNuQyxJQUFrQztJQUVsQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN0RCxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNaLG1CQUFtQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4QyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUNELElBQUksQ0FBQztRQUNILE1BQU0sY0FBYyxDQUFDLHlCQUF5QixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsUUFBUTtJQUNWLENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsOEJBQThCO0lBQzlCLHdDQUF3QztJQUN4QyxnR0FBZ0c7SUFDaEcseUZBQXlGO0lBQ3pGLG1HQUFtRztJQUNuRyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQy9ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBiaW5kQ29tcG9uZW50SW5wdXRzLCBiaW5kQ29tcG9uZW50T3V0cHV0cyB9IGZyb20gJy4vYmluZC1jb21wb25lbnQtaW8nO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlZmVyVW50aWxDb21wb25lbnRSZWFkeSQgfSBmcm9tICcuL2RlZmVyLXVudGlsLWNvbXBvbmVudC1yZWFkeSc7XG5pbXBvcnQgeyBJbXBvcnRzT3JjaGVzdHJhdG9yUXVldWVJdGVtIH0gZnJvbSAnLi4vLi4vc2VydmljZSc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtb3VudENvbXBvbmVudChcbiAgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8dW5rbm93bj4sXG4gIGl0ZW06IEltcG9ydHNPcmNoZXN0cmF0b3JRdWV1ZUl0ZW1cbik6IFByb21pc2U8dm9pZD4ge1xuICBpdGVtLmRlc3Ryb3kkLnN1YnNjcmliZSgoKSA9PiBjb21wb25lbnRSZWYuZGVzdHJveSgpKTtcbiAgaWYgKGl0ZW0uaW8pIHtcbiAgICBiaW5kQ29tcG9uZW50SW5wdXRzKGNvbXBvbmVudFJlZiwgaXRlbSk7XG4gICAgYmluZENvbXBvbmVudE91dHB1dHMoY29tcG9uZW50UmVmLCBpdGVtKTtcbiAgfVxuICB0cnkge1xuICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKGRlZmVyVW50aWxDb21wb25lbnRSZWFkeSQoY29tcG9uZW50UmVmLCBpdGVtKSk7XG4gIH0gY2F0Y2ggKHgpIHtcbiAgICAvLyBuby1vcFxuICB9XG5cbiAgLy8gVGhpcyB3aWxsIHRyaWdnZXIgQW5ndWxhciBsaWZlY3ljbGUgb24gY29tcG9uZW50UmVmJ3MgZW50aXJlIGNvbXBvbmVudCB0cmVlXG4gIC8vICogQmluZGluZ3Mgd2lsbCBiZSByZXNvbHZlZFxuICAvLyAqIFByb2plY3RlZCBjb250ZW50IHdpbGwgYmUgcHJvY2Vzc2VkXG4gIC8vICogVXNhZ2VzIG9mIEltcG9ydHNPcmNoZXN0cmF0b3JRdWV1ZURpcmVjdGl2ZSBpbiB0aGUgdHJlZSB3aWxsIHRoZW4gaW5zZXJ0IGl0ZW1zIHRvIHRoZSBxdWV1ZVxuICAvLyAqIEl0IGlzIG9mIHZpdGFsIGltcG9ydGFuY2UgdGhhdCBpdGVtcyBhcmUgcXVldWVkIGJlZm9yZSB0cmlnZ2VyaW5nIHByb2Nlc3NRdWV1ZSBhZ2FpblxuICAvLyBJTVBPUlRBTlQ6IG1hcmtGb3JDaGVjayBpcyBub3QgZW5vdWdoLCBhcyBpdCB3b3VsZCBub3QgY2F1c2UgYW4gaW1tZWRpYXRlIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGVcbiAgY29tcG9uZW50UmVmLmluamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZikuZGV0ZWN0Q2hhbmdlcygpO1xufVxuIl19