ng-devui
Version:
DevUI components based on Angular
55 lines • 6.5 kB
JavaScript
import { DOCUMENT } from '@angular/common';
import { ApplicationRef, Component, Inject, TemplateRef, ViewChild } from '@angular/core';
import { forEach } from 'lodash-es';
import * as i0 from "@angular/core";
export class PortalComponent {
constructor(appRef, doc) {
this.appRef = appRef;
this.doc = doc;
this.document = this.doc;
}
addContent() {
this.portalContainer = this.document.createElement('div');
this.viewRef = this.templateRef.createEmbeddedView(this);
forEach(this.viewRef.rootNodes, (node) => {
this.portalContainer.appendChild(node);
});
this.appRef.attachView(this.viewRef);
this.document.body.appendChild(this.portalContainer);
}
open() {
this.close();
this.addContent();
}
close() {
if (this.viewRef && this.portalContainer) {
this.document.body.removeChild(this.portalContainer);
this.viewRef.destroy();
this.viewRef = null;
this.portalContainer = null;
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PortalComponent, deps: [{ token: i0.ApplicationRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PortalComponent, selector: "d-portal", viewQueries: [{ propertyName: "templateRef", first: true, predicate: ["templateRef"], descendants: true, static: true }], ngImport: i0, template: `
<ng-template #templateRef>
<ng-content></ng-content>
</ng-template>`, isInline: true }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PortalComponent, decorators: [{
type: Component,
args: [{
selector: 'd-portal',
template: `
<ng-template #templateRef>
<ng-content></ng-content>
</ng-template>`,
preserveWhitespaces: false,
}]
}], ctorParameters: () => [{ type: i0.ApplicationRef }, { type: undefined, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }], propDecorators: { templateRef: [{
type: ViewChild,
args: ['templateRef', { static: true }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldnVpL3BvcnRhbC9wb3J0YWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLFNBQVMsRUFFVCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDOztBQVVwQyxNQUFNLE9BQU8sZUFBZTtJQU0xQixZQUFvQixNQUFzQixFQUE0QixHQUFRO1FBQTFELFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQTRCLFFBQUcsR0FBSCxHQUFHLENBQUs7UUFDNUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQzNCLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekQsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDOytHQWhDVSxlQUFlLGdEQU0wQixRQUFRO21HQU5qRCxlQUFlLDBLQU5oQjs7O21DQUd1Qjs7NEZBR3RCLGVBQWU7a0JBUjNCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLFFBQVEsRUFBRTs7O21DQUd1QjtvQkFDakMsbUJBQW1CLEVBQUUsS0FBSztpQkFDM0I7OzBCQU84QyxNQUFNOzJCQUFDLFFBQVE7eUNBSGhCLFdBQVc7c0JBQXRELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDb21wb25lbnQsXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgSW5qZWN0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2QtcG9ydGFsJyxcbiAgdGVtcGxhdGU6IGBcbiAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPmAsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBQb3J0YWxDb21wb25lbnQge1xuICB2aWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8YW55PjtcbiAgcG9ydGFsQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgQFZpZXdDaGlsZCgndGVtcGxhdGVSZWYnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgZG9jdW1lbnQ6IERvY3VtZW50O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZiwgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2M6IGFueSkge1xuICAgIHRoaXMuZG9jdW1lbnQgPSB0aGlzLmRvYztcbiAgfVxuXG4gIGFkZENvbnRlbnQoKSB7XG4gICAgdGhpcy5wb3J0YWxDb250YWluZXIgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMudmlld1JlZiA9IHRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMpO1xuICAgIGZvckVhY2godGhpcy52aWV3UmVmLnJvb3ROb2RlcywgKG5vZGUpID0+IHtcbiAgICAgIHRoaXMucG9ydGFsQ29udGFpbmVyLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgIH0pO1xuICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcodGhpcy52aWV3UmVmKTtcbiAgICB0aGlzLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5wb3J0YWxDb250YWluZXIpO1xuICB9XG5cbiAgb3BlbigpIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gICAgdGhpcy5hZGRDb250ZW50KCk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICBpZiAodGhpcy52aWV3UmVmICYmIHRoaXMucG9ydGFsQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5wb3J0YWxDb250YWluZXIpO1xuICAgICAgdGhpcy52aWV3UmVmLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMudmlld1JlZiA9IG51bGw7XG4gICAgICB0aGlzLnBvcnRhbENvbnRhaW5lciA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iXX0=