angular-traversal
Version:
A traversal navigation library for Angular (v2+)
59 lines • 6.86 kB
JavaScript
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