UNPKG

angular-traversal

Version:
59 lines 6.86 kB
import { Directive, ViewContainerRef, Input, ChangeDetectorRef } from '@angular/core'; import { Traverser } from './traverser'; import { Subject } from 'rxjs'; import { takeUntil, skip } from 'rxjs/operators'; export class TraverserTile { constructor(traverser, container, cdr) { this.traverser = traverser; this.container = container; this.cdr = cdr; this.noUpdateOnTraverse = false; this.terminator = new Subject(); } ngOnInit() { if (!!this.name) { if (!this.noUpdateOnTraverse) { this.traverser.target .pipe(takeUntil(this.terminator), skip(1)) .subscribe((target) => this.traverser.loadTile(this.name, target.contextPath)); } const tileContext = this.traverser.tilesContexts[this.name]; if (!!tileContext) { tileContext.pipe(takeUntil(this.terminator)).subscribe((target) => this.render(target)); } } } ngOnDestroy() { if (this.viewInstance) { this.viewInstance.destroy(); } this.terminator.next(); } render(target) { if (this.viewInstance) { this.viewInstance.destroy(); } if (target.component) { const componentFactory = this.traverser.getComponent(target.component); this.viewInstance = this.container.createComponent(componentFactory); } if (!this.cdr.destroyed) { this.cdr.detectChanges(); } } } TraverserTile.decorators = [ { type: Directive, args: [{ selector: 'traverser-tile', },] } ]; TraverserTile.ctorParameters = () => [ { type: Traverser }, { type: ViewContainerRef }, { type: ChangeDetectorRef } ]; TraverserTile.propDecorators = { name: [{ type: Input }], noUpdateOnTraverse: [{ type: Input }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90cmF2ZXJzYWwvc3JjL2xpYi90aWxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQVcsTUFBTSxlQUFlLENBQUM7QUFDbEgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLakQsTUFBTSxPQUFPLGFBQWE7SUFNdEIsWUFBb0IsU0FBb0IsRUFBVSxTQUEyQixFQUFVLEdBQXNCO1FBQXpGLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBSnBHLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUU1QixlQUFVLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7SUFFOEQsQ0FBQztJQUVqSCxRQUFRO1FBQ0osSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTTtxQkFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN6QyxTQUFTLENBQUMsQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFjLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7YUFDeEc7WUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFO2dCQUNmLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2FBQzNGO1NBQ0o7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQy9CO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQWM7UUFDakIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDL0I7UUFDRCxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUU7WUFDbEIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsSUFBSSxDQUFFLElBQUksQ0FBQyxHQUFlLENBQUMsU0FBUyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDNUI7SUFDTCxDQUFDOzs7WUEzQ0osU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxnQkFBZ0I7YUFDN0I7OztZQVBRLFNBQVM7WUFEcUIsZ0JBQWdCO1lBQVMsaUJBQWlCOzs7bUJBVTVFLEtBQUs7aUNBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgT25Jbml0LCBPbkRlc3Ryb3ksIFZpZXdDb250YWluZXJSZWYsIElucHV0LCBDaGFuZ2VEZXRlY3RvclJlZiwgVmlld1JlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhdmVyc2VyIH0gZnJvbSAnLi90cmF2ZXJzZXInO1xuaW1wb3J0IHsgVGFyZ2V0IH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgc2tpcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICd0cmF2ZXJzZXItdGlsZScsXG59KVxuZXhwb3J0IGNsYXNzIFRyYXZlcnNlclRpbGUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkgbmFtZT86IHN0cmluZztcbiAgICBASW5wdXQoKSBub1VwZGF0ZU9uVHJhdmVyc2UgPSBmYWxzZTtcbiAgICBwcml2YXRlIHZpZXdJbnN0YW5jZTogYW55O1xuICAgIHByaXZhdGUgdGVybWluYXRvcjogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYXZlcnNlcjogVHJhdmVyc2VyLCBwcml2YXRlIGNvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZiwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICghIXRoaXMubmFtZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm5vVXBkYXRlT25UcmF2ZXJzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJhdmVyc2VyLnRhcmdldFxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy50ZXJtaW5hdG9yKSwgc2tpcCgxKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgodGFyZ2V0OiBUYXJnZXQpID0+IHRoaXMudHJhdmVyc2VyLmxvYWRUaWxlKHRoaXMubmFtZSBhcyBzdHJpbmcsIHRhcmdldC5jb250ZXh0UGF0aCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGlsZUNvbnRleHQgPSB0aGlzLnRyYXZlcnNlci50aWxlc0NvbnRleHRzW3RoaXMubmFtZV07XG4gICAgICAgICAgICBpZiAoISF0aWxlQ29udGV4dCkge1xuICAgICAgICAgICAgICAgIHRpbGVDb250ZXh0LnBpcGUodGFrZVVudGlsKHRoaXMudGVybWluYXRvcikpLnN1YnNjcmliZSgodGFyZ2V0KSA9PiB0aGlzLnJlbmRlcih0YXJnZXQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy52aWV3SW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0luc3RhbmNlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRlcm1pbmF0b3IubmV4dCgpO1xuICAgIH1cblxuICAgIHJlbmRlcih0YXJnZXQ6IFRhcmdldCkge1xuICAgICAgICBpZiAodGhpcy52aWV3SW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0luc3RhbmNlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0LmNvbXBvbmVudCkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMudHJhdmVyc2VyLmdldENvbXBvbmVudCh0YXJnZXQuY29tcG9uZW50KTtcbiAgICAgICAgICAgIHRoaXMudmlld0luc3RhbmNlID0gdGhpcy5jb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKHRoaXMuY2RyIGFzIFZpZXdSZWYpLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19