UNPKG

@lotto24-angular/imports-orchestrator

Version:

Orchestrate dynamically imported components in Angular applications

27 lines 6.94 kB
import { filter, mergeMap, pairwise, share, skip, startWith, takeUntil, } from 'rxjs'; export function bindComponentInputs(componentRef, item) { item.io?.inputs$ .pipe(takeUntil(item.destroy$), startWith({}), pairwise(), filter(([_, current]) => Object.keys(current).length > 0), mergeMap(([previous, current]) => Object.entries(current).filter(([key, value]) => previous[key] !== value))) .subscribe(([key, value]) => componentRef.setInput(key, value)); } export function bindComponentOutputs(componentRef, item) { const outputs$ = item.io?.outputs$.pipe(share()); if (!outputs$) return; const output$ = outputs$.pipe(takeUntil(item.destroy$), startWith({}), pairwise(), filter(([_, current]) => Object.keys(current).length > 0), mergeMap(([previous, current]) => Object.entries(current).filter(([key, value]) => !previous[key])) // tap(([key, value]) => console.log(key, value)) ); output$.subscribe(([key, value]) => { if (typeof value !== 'function') { throw new Error(`outputs.${key} must be a function, got '${typeof value}'`); } componentRef.instance[key] .pipe(takeUntil(item.destroy$), takeUntil(output$.pipe(filter(([k]) => k === key), skip(1) // skip the first value emitted from replay // tap(() => console.log('unsubscribe componentRef, key=' + key)) ))) .subscribe((data) => { value(data); }); }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluZC1jb21wb25lbnQtaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2ltcG9ydHMtb3JjaGVzdHJhdG9yL3NyYy9saWIvcmVzb2x2ZS91dGlsL2JpbmQtY29tcG9uZW50LWlvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxNQUFNLEVBQ04sUUFBUSxFQUNSLFFBQVEsRUFDUixLQUFLLEVBQ0wsSUFBSSxFQUNKLFNBQVMsRUFDVCxTQUFTLEdBQ1YsTUFBTSxNQUFNLENBQUM7QUFJZCxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLFlBQStCLEVBQy9CLElBQWtDO0lBRWxDLElBQUksQ0FBQyxFQUFFLEVBQUUsT0FBTztTQUNiLElBQUksQ0FDSCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUN4QixTQUFTLENBQUMsRUFBaUIsQ0FBQyxFQUM1QixRQUFRLEVBQUUsRUFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQ3pELFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FDL0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQzVCLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQzFDLENBQ0YsQ0FDRjtTQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLFlBQStCLEVBQy9CLElBQWtDO0lBRWxDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTztJQUV0QixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUMzQixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUN4QixTQUFTLENBQUMsRUFBaUIsQ0FBQyxFQUM1QixRQUFRLEVBQUUsRUFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQ3pELFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FDL0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDakU7SUFDRCxpREFBaUQ7S0FDbEQsQ0FBQztJQUVGLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQ2pDLElBQUksT0FBTyxLQUFLLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FDYixXQUFXLEdBQUcsNkJBQTZCLE9BQU8sS0FBSyxHQUFHLENBQzNELENBQUM7UUFDSixDQUFDO1FBRUQsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7YUFDdkIsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLFNBQVMsQ0FDUCxPQUFPLENBQUMsSUFBSSxDQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsRUFDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLDJDQUEyQztRQUNuRCxpRUFBaUU7U0FDbEUsQ0FDRixDQUNGO2FBQ0EsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDdkIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbXBvbmVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgZmlsdGVyLFxuICBtZXJnZU1hcCxcbiAgcGFpcndpc2UsXG4gIHNoYXJlLFxuICBza2lwLFxuICBzdGFydFdpdGgsXG4gIHRha2VVbnRpbCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbXBvcnRzT3JjaGVzdHJhdG9yUXVldWVJdGVtIH0gZnJvbSAnLi4vLi4vc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRJTyB9IGZyb20gJy4uLy4uL2hvc3QtZGlyZWN0aXZlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRDb21wb25lbnRJbnB1dHMoXG4gIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT4sXG4gIGl0ZW06IEltcG9ydHNPcmNoZXN0cmF0b3JRdWV1ZUl0ZW1cbik6IHZvaWQge1xuICBpdGVtLmlvPy5pbnB1dHMkXG4gICAgLnBpcGUoXG4gICAgICB0YWtlVW50aWwoaXRlbS5kZXN0cm95JCksXG4gICAgICBzdGFydFdpdGgoe30gYXMgQ29tcG9uZW50SU8pLFxuICAgICAgcGFpcndpc2UoKSxcbiAgICAgIGZpbHRlcigoW18sIGN1cnJlbnRdKSA9PiBPYmplY3Qua2V5cyhjdXJyZW50KS5sZW5ndGggPiAwKSxcbiAgICAgIG1lcmdlTWFwKChbcHJldmlvdXMsIGN1cnJlbnRdKSA9PlxuICAgICAgICBPYmplY3QuZW50cmllcyhjdXJyZW50KS5maWx0ZXIoXG4gICAgICAgICAgKFtrZXksIHZhbHVlXSkgPT4gcHJldmlvdXNba2V5XSAhPT0gdmFsdWVcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgICAuc3Vic2NyaWJlKChba2V5LCB2YWx1ZV0pID0+IGNvbXBvbmVudFJlZi5zZXRJbnB1dChrZXksIHZhbHVlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kQ29tcG9uZW50T3V0cHV0cyhcbiAgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PixcbiAgaXRlbTogSW1wb3J0c09yY2hlc3RyYXRvclF1ZXVlSXRlbVxuKTogdm9pZCB7XG4gIGNvbnN0IG91dHB1dHMkID0gaXRlbS5pbz8ub3V0cHV0cyQucGlwZShzaGFyZSgpKTtcbiAgaWYgKCFvdXRwdXRzJCkgcmV0dXJuO1xuXG4gIGNvbnN0IG91dHB1dCQgPSBvdXRwdXRzJC5waXBlKFxuICAgIHRha2VVbnRpbChpdGVtLmRlc3Ryb3kkKSxcbiAgICBzdGFydFdpdGgoe30gYXMgQ29tcG9uZW50SU8pLFxuICAgIHBhaXJ3aXNlKCksXG4gICAgZmlsdGVyKChbXywgY3VycmVudF0pID0+IE9iamVjdC5rZXlzKGN1cnJlbnQpLmxlbmd0aCA+IDApLFxuICAgIG1lcmdlTWFwKChbcHJldmlvdXMsIGN1cnJlbnRdKSA9PlxuICAgICAgT2JqZWN0LmVudHJpZXMoY3VycmVudCkuZmlsdGVyKChba2V5LCB2YWx1ZV0pID0+ICFwcmV2aW91c1trZXldKVxuICAgIClcbiAgICAvLyB0YXAoKFtrZXksIHZhbHVlXSkgPT4gY29uc29sZS5sb2coa2V5LCB2YWx1ZSkpXG4gICk7XG5cbiAgb3V0cHV0JC5zdWJzY3JpYmUoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYG91dHB1dHMuJHtrZXl9IG11c3QgYmUgYSBmdW5jdGlvbiwgZ290ICcke3R5cGVvZiB2YWx1ZX0nYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Vba2V5XVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbChpdGVtLmRlc3Ryb3kkKSxcbiAgICAgICAgdGFrZVVudGlsKFxuICAgICAgICAgIG91dHB1dCQucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoW2tdKSA9PiBrID09PSBrZXkpLFxuICAgICAgICAgICAgc2tpcCgxKSAvLyBza2lwIHRoZSBmaXJzdCB2YWx1ZSBlbWl0dGVkIGZyb20gcmVwbGF5XG4gICAgICAgICAgICAvLyB0YXAoKCkgPT4gY29uc29sZS5sb2coJ3Vuc3Vic2NyaWJlIGNvbXBvbmVudFJlZiwga2V5PScgKyBrZXkpKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIHZhbHVlKGRhdGEpO1xuICAgICAgfSk7XG4gIH0pO1xufVxuIl19