@wizdm/teleport
Version:
Template teleporting
36 lines • 3.93 kB
JavaScript
import { Directive, Input, TemplateRef } from '@angular/core';
import { TeleportService } from './teleport.service';
export class TeleportDirective {
constructor(teleport, template) {
this.teleport = teleport;
this.template = template;
}
ngOnChanges(changes) {
const target = changes.target;
if (!target) {
return;
}
// Clears the previous target, if any
target.previousValue && this.teleport.clear(target.previousValue, this.template);
// Teleports the template to the new target portal
target.currentValue && this.teleport.activate(target.currentValue, this.template, this.data);
}
ngOnDestroy() {
// Clears the portal on destroy
this.target && this.teleport.clear(this.target, this.template);
}
}
TeleportDirective.decorators = [
{ type: Directive, args: [{
selector: 'ng-template[wmTeleport]'
},] }
];
TeleportDirective.ctorParameters = () => [
{ type: TeleportService },
{ type: TemplateRef }
];
TeleportDirective.propDecorators = {
target: [{ type: Input, args: ['wmTeleport',] }],
data: [{ type: Input, args: ['wmTeleportData',] }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZXBvcnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVsZXBvcnQvc3JjL2xpYi90ZWxlcG9ydC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBdUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFLckQsTUFBTSxPQUFPLGlCQUFpQjtJQUU1QixZQUFvQixRQUF5QixFQUFVLFFBQTBCO1FBQTdELGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7SUFBRyxDQUFDO0lBTXJGLFdBQVcsQ0FBQyxPQUFzQjtRQUVoQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzlCLElBQUcsQ0FBQyxNQUFNLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFFdkIscUNBQXFDO1FBQ3JDLE1BQU0sQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFakYsa0RBQWtEO1FBQ2xELE1BQU0sQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQsV0FBVztRQUNULCtCQUErQjtRQUMvQixJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7OztZQTFCRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjthQUNwQzs7O1lBSlEsZUFBZTtZQUR3QyxXQUFXOzs7cUJBVXhFLEtBQUssU0FBQyxZQUFZO21CQUVsQixLQUFLLFNBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE9uRGVzdHJveSwgSW5wdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUZWxlcG9ydFNlcnZpY2UgfSBmcm9tICcuL3RlbGVwb3J0LnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVt3bVRlbGVwb3J0XSdcbn0pXG5leHBvcnQgY2xhc3MgVGVsZXBvcnREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0ZWxlcG9ydDogVGVsZXBvcnRTZXJ2aWNlLCBwcml2YXRlIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7fVxuXG4gIEBJbnB1dCgnd21UZWxlcG9ydCcpIHRhcmdldDogc3RyaW5nO1xuXG4gIEBJbnB1dCgnd21UZWxlcG9ydERhdGEnKSBkYXRhOiBhbnlcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG5cbiAgICBjb25zdCB0YXJnZXQgPSBjaGFuZ2VzLnRhcmdldDtcbiAgICBpZighdGFyZ2V0KSB7IHJldHVybjsgfVxuXG4gICAgLy8gQ2xlYXJzIHRoZSBwcmV2aW91cyB0YXJnZXQsIGlmIGFueVxuICAgIHRhcmdldC5wcmV2aW91c1ZhbHVlICYmIHRoaXMudGVsZXBvcnQuY2xlYXIodGFyZ2V0LnByZXZpb3VzVmFsdWUsIHRoaXMudGVtcGxhdGUpO1xuXG4gICAgLy8gVGVsZXBvcnRzIHRoZSB0ZW1wbGF0ZSB0byB0aGUgbmV3IHRhcmdldCBwb3J0YWxcbiAgICB0YXJnZXQuY3VycmVudFZhbHVlICYmIHRoaXMudGVsZXBvcnQuYWN0aXZhdGUodGFyZ2V0LmN1cnJlbnRWYWx1ZSwgdGhpcy50ZW1wbGF0ZSwgdGhpcy5kYXRhKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIC8vIENsZWFycyB0aGUgcG9ydGFsIG9uIGRlc3Ryb3lcbiAgICB0aGlzLnRhcmdldCAmJiB0aGlzLnRlbGVwb3J0LmNsZWFyKHRoaXMudGFyZ2V0LCB0aGlzLnRlbXBsYXRlKTtcbiAgfVxufSJdfQ==