@libs-ui/services-dynamic-component 0.1.1-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dynamic-component.service.d.ts +22 -0
- package/esm2022/dynamic-component.service.mjs +115 -0
- package/esm2022/index.mjs +3 -0
- package/esm2022/libs-ui-services-dynamic-component.mjs +5 -0
- package/esm2022/set-inputs.mjs +7 -0
- package/fesm2022/libs-ui-services-dynamic-component.mjs +129 -0
- package/fesm2022/libs-ui-services-dynamic-component.mjs.map +1 -0
- package/index.d.ts +2 -0
- package/package.json +25 -0
- package/set-inputs.d.ts +4 -0
package/README.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ComponentRef, OnDestroy } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class LibsUiDynamicComponentService implements OnDestroy {
|
|
4
|
+
private timeOut?;
|
|
5
|
+
private elementLayoutContent;
|
|
6
|
+
private elementBody;
|
|
7
|
+
private mapStylesToParentDocument;
|
|
8
|
+
private appRef;
|
|
9
|
+
private idElementLayoutContentDefault;
|
|
10
|
+
set IdElementLayoutContentDefault(id: string);
|
|
11
|
+
resolveComponentFactory(component: any): ComponentRef<any>;
|
|
12
|
+
addToBody(componentRef?: ComponentRef<any>, isAddParentDocument?: boolean, timerDelayUpdateStyleToParent?: number): string;
|
|
13
|
+
addToElement(componentRef: any, elementAdd: any): any;
|
|
14
|
+
addToElementLayoutContentDefault(componentRef: any, id?: string): void;
|
|
15
|
+
addToIdAttributeElement(componentRef: any, id: string): HTMLElement | undefined;
|
|
16
|
+
remove(componentRef: any, frameId?: string, ignoreDestroyComponent?: boolean): void;
|
|
17
|
+
private updateStyleToParentDocument;
|
|
18
|
+
private removeStyleToParentDocument;
|
|
19
|
+
ngOnDestroy(): void;
|
|
20
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiDynamicComponentService, never>;
|
|
21
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<LibsUiDynamicComponentService>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import { ApplicationRef, Injectable, createComponent, inject } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class LibsUiDynamicComponentService {
|
|
5
|
+
timeOut;
|
|
6
|
+
elementLayoutContent = new Map();
|
|
7
|
+
elementBody;
|
|
8
|
+
mapStylesToParentDocument = new WeakMap();
|
|
9
|
+
appRef = inject(ApplicationRef);
|
|
10
|
+
idElementLayoutContentDefault = 'libs-ui-layout-content';
|
|
11
|
+
set IdElementLayoutContentDefault(id) {
|
|
12
|
+
this.idElementLayoutContentDefault = id;
|
|
13
|
+
}
|
|
14
|
+
resolveComponentFactory(component) {
|
|
15
|
+
return createComponent(component, { environmentInjector: this.appRef.injector });
|
|
16
|
+
}
|
|
17
|
+
addToBody(componentRef, isAddParentDocument, timerDelayUpdateStyleToParent) {
|
|
18
|
+
if (!componentRef || !componentRef.hostView) {
|
|
19
|
+
return '';
|
|
20
|
+
}
|
|
21
|
+
this.appRef.attachView(componentRef.hostView);
|
|
22
|
+
const domElem = componentRef.hostView.rootNodes[0];
|
|
23
|
+
if (isAddParentDocument) {
|
|
24
|
+
window.parent.document.body.appendChild(domElem);
|
|
25
|
+
this.updateStyleToParentDocument(componentRef, timerDelayUpdateStyleToParent);
|
|
26
|
+
return '';
|
|
27
|
+
}
|
|
28
|
+
if (!this.elementBody) {
|
|
29
|
+
this.elementBody = document.body;
|
|
30
|
+
}
|
|
31
|
+
this.elementBody.appendChild(domElem);
|
|
32
|
+
return '';
|
|
33
|
+
}
|
|
34
|
+
addToElement(componentRef, elementAdd) {
|
|
35
|
+
if (!componentRef || !componentRef.hostView || !elementAdd) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
this.appRef.attachView(componentRef.hostView);
|
|
39
|
+
const domElem = componentRef.hostView.rootNodes[0];
|
|
40
|
+
return elementAdd.appendChild(domElem);
|
|
41
|
+
}
|
|
42
|
+
addToElementLayoutContentDefault(componentRef, id = this.idElementLayoutContentDefault) {
|
|
43
|
+
this.addToIdAttributeElement(componentRef, id);
|
|
44
|
+
}
|
|
45
|
+
addToIdAttributeElement(componentRef, id) {
|
|
46
|
+
if (!this.elementLayoutContent.has(id)) {
|
|
47
|
+
this.elementLayoutContent.set(id, document.getElementById(id));
|
|
48
|
+
}
|
|
49
|
+
if (!componentRef || !componentRef.hostView) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
this.appRef.attachView(componentRef.hostView);
|
|
53
|
+
const domElem = componentRef.hostView.rootNodes[0];
|
|
54
|
+
return this.elementLayoutContent.get(id)?.appendChild(domElem);
|
|
55
|
+
}
|
|
56
|
+
remove(componentRef, frameId, ignoreDestroyComponent) {
|
|
57
|
+
if (!componentRef) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
this.removeStyleToParentDocument(componentRef);
|
|
61
|
+
if (componentRef.hostView) {
|
|
62
|
+
this.appRef.detachView(componentRef.hostView);
|
|
63
|
+
}
|
|
64
|
+
if (!ignoreDestroyComponent && componentRef.destroy) {
|
|
65
|
+
componentRef.destroy();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
updateStyleToParentDocument(componentRef, timerDelayUpdateStyleToParent) {
|
|
69
|
+
if (this.timeOut) {
|
|
70
|
+
clearTimeout(this.timeOut);
|
|
71
|
+
}
|
|
72
|
+
this.timeOut = setTimeout(() => {
|
|
73
|
+
const documentParent = window.parent.document;
|
|
74
|
+
if (documentParent && !this.mapStylesToParentDocument.has(componentRef)) {
|
|
75
|
+
const styleTags = new Array();
|
|
76
|
+
Array.from(document.head.querySelectorAll('style')).forEach((styleTag) => {
|
|
77
|
+
const cloneStyleTag = styleTag.cloneNode(true);
|
|
78
|
+
styleTags.push(cloneStyleTag);
|
|
79
|
+
documentParent?.head.appendChild(cloneStyleTag);
|
|
80
|
+
});
|
|
81
|
+
this.mapStylesToParentDocument.set(componentRef, styleTags);
|
|
82
|
+
}
|
|
83
|
+
}, timerDelayUpdateStyleToParent || 250);
|
|
84
|
+
}
|
|
85
|
+
removeStyleToParentDocument(componentRef) {
|
|
86
|
+
if (!componentRef) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const styleTagsPopup = this.mapStylesToParentDocument.get(componentRef);
|
|
90
|
+
const documentParent = window.parent.document;
|
|
91
|
+
if (!styleTagsPopup || !styleTagsPopup.length || !documentParent) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
styleTagsPopup.forEach((styleTag) => {
|
|
95
|
+
documentParent?.head.removeChild(styleTag);
|
|
96
|
+
});
|
|
97
|
+
this.mapStylesToParentDocument.delete(componentRef);
|
|
98
|
+
}
|
|
99
|
+
ngOnDestroy() {
|
|
100
|
+
if (this.timeOut) {
|
|
101
|
+
clearTimeout(this.timeOut);
|
|
102
|
+
this.timeOut = undefined;
|
|
103
|
+
}
|
|
104
|
+
this.elementLayoutContent.clear();
|
|
105
|
+
}
|
|
106
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiDynamicComponentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
107
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiDynamicComponentService, providedIn: 'root' });
|
|
108
|
+
}
|
|
109
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiDynamicComponentService, decorators: [{
|
|
110
|
+
type: Injectable,
|
|
111
|
+
args: [{
|
|
112
|
+
providedIn: 'root',
|
|
113
|
+
}]
|
|
114
|
+
}] });
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jb21wb25lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvc2VydmljZXMvZHluYW1pYy1jb21wb25lbnQvc3JjL2R5bmFtaWMtY29tcG9uZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQWlDLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDOztBQUk5SCxNQUFNLE9BQU8sNkJBQTZCO0lBQ2hDLE9BQU8sQ0FBVTtJQUNqQixvQkFBb0IsR0FBNkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUMzRCxXQUFXLENBQXNCO0lBQ2pDLHlCQUF5QixHQUE0QyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQ25GLE1BQU0sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDaEMsNkJBQTZCLEdBQUcsd0JBQXdCLENBQUM7SUFFakUsSUFBVyw2QkFBNkIsQ0FBQyxFQUFVO1FBQ2pELElBQUksQ0FBQyw2QkFBNkIsR0FBRyxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVNLHVCQUF1QixDQUFDLFNBQWM7UUFDM0MsT0FBTyxlQUFlLENBQUMsU0FBUyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFTSxTQUFTLENBQUMsWUFBZ0MsRUFBRSxtQkFBNkIsRUFBRSw2QkFBc0M7UUFDdEgsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1QyxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsTUFBTSxPQUFPLEdBQUksWUFBWSxDQUFDLFFBQWlDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBZ0IsQ0FBQztRQUU1RixJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsMkJBQTJCLENBQUMsWUFBWSxFQUFFLDZCQUE2QixDQUFDLENBQUM7WUFFOUUsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDbkMsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXRDLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVNLFlBQVksQ0FBQyxZQUFpQixFQUFFLFVBQWU7UUFDcEQsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMzRCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBSSxZQUFZLENBQUMsUUFBaUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFnQixDQUFDO1FBRTVGLE9BQU8sVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU0sZ0NBQWdDLENBQUMsWUFBaUIsRUFBRSxLQUFhLElBQUksQ0FBQyw2QkFBNkI7UUFDeEcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU0sdUJBQXVCLENBQUMsWUFBaUIsRUFBRSxFQUFVO1FBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQWdCLENBQUMsQ0FBQztRQUNoRixDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1QyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBSSxZQUFZLENBQUMsUUFBaUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFnQixDQUFDO1FBRTVGLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVNLE1BQU0sQ0FBQyxZQUFpQixFQUFFLE9BQWdCLEVBQUUsc0JBQWdDO1FBQ2pGLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvQyxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELElBQUksQ0FBQyxzQkFBc0IsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEQsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRU8sMkJBQTJCLENBQUMsWUFBK0IsRUFBRSw2QkFBc0M7UUFDekcsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQzdCLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBRTlDLElBQUksY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUN4RSxNQUFNLFNBQVMsR0FBRyxJQUFJLEtBQUssRUFBUSxDQUFDO2dCQUVwQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtvQkFDdkUsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFFL0MsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDOUIsY0FBYyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2xELENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzlELENBQUM7UUFDSCxDQUFDLEVBQUUsNkJBQTZCLElBQUksR0FBRyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVPLDJCQUEyQixDQUFDLFlBQStCO1FBQ2pFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEUsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFFOUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNqRSxPQUFPO1FBQ1QsQ0FBQztRQUNELGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNsQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQzNCLENBQUM7UUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDcEMsQ0FBQzt3R0ExSFUsNkJBQTZCOzRHQUE3Qiw2QkFBNkIsY0FGNUIsTUFBTTs7NEZBRVAsNkJBQTZCO2tCQUh6QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEFwcGxpY2F0aW9uUmVmLCBDb21wb25lbnRSZWYsIEVtYmVkZGVkVmlld1JlZiwgSW5qZWN0YWJsZSwgY3JlYXRlQ29tcG9uZW50LCBpbmplY3QsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSB0aW1lT3V0PzogbnVtYmVyO1xuICBwcml2YXRlIGVsZW1lbnRMYXlvdXRDb250ZW50OiBNYXA8c3RyaW5nLCBIVE1MRWxlbWVudD4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgZWxlbWVudEJvZHkhOiBIVE1MRWxlbWVudCB8IG51bGw7XG4gIHByaXZhdGUgbWFwU3R5bGVzVG9QYXJlbnREb2N1bWVudDogV2Vha01hcDxDb21wb25lbnRSZWY8YW55PiwgQXJyYXk8Tm9kZT4+ID0gbmV3IFdlYWtNYXAoKTtcbiAgcHJpdmF0ZSBhcHBSZWYgPSBpbmplY3QoQXBwbGljYXRpb25SZWYpO1xuICBwcml2YXRlIGlkRWxlbWVudExheW91dENvbnRlbnREZWZhdWx0ID0gJ2xpYnMtdWktbGF5b3V0LWNvbnRlbnQnO1xuXG4gIHB1YmxpYyBzZXQgSWRFbGVtZW50TGF5b3V0Q29udGVudERlZmF1bHQoaWQ6IHN0cmluZykge1xuICAgIHRoaXMuaWRFbGVtZW50TGF5b3V0Q29udGVudERlZmF1bHQgPSBpZDtcbiAgfVxuXG4gIHB1YmxpYyByZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnQ6IGFueSk6IENvbXBvbmVudFJlZjxhbnk+IHtcbiAgICByZXR1cm4gY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCwgeyBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmFwcFJlZi5pbmplY3RvciB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUb0JvZHkoY29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPGFueT4sIGlzQWRkUGFyZW50RG9jdW1lbnQ/OiBib29sZWFuLCB0aW1lckRlbGF5VXBkYXRlU3R5bGVUb1BhcmVudD86IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKCFjb21wb25lbnRSZWYgfHwgIWNvbXBvbmVudFJlZi5ob3N0Vmlldykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICBjb25zdCBkb21FbGVtID0gKGNvbXBvbmVudFJlZi5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgaWYgKGlzQWRkUGFyZW50RG9jdW1lbnQpIHtcbiAgICAgIHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb21FbGVtKTtcbiAgICAgIHRoaXMudXBkYXRlU3R5bGVUb1BhcmVudERvY3VtZW50KGNvbXBvbmVudFJlZiwgdGltZXJEZWxheVVwZGF0ZVN0eWxlVG9QYXJlbnQpO1xuXG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmICghdGhpcy5lbGVtZW50Qm9keSkge1xuICAgICAgdGhpcy5lbGVtZW50Qm9keSA9IGRvY3VtZW50LmJvZHk7XG4gICAgfVxuICAgIHRoaXMuZWxlbWVudEJvZHkuYXBwZW5kQ2hpbGQoZG9tRWxlbSk7XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBwdWJsaWMgYWRkVG9FbGVtZW50KGNvbXBvbmVudFJlZjogYW55LCBlbGVtZW50QWRkOiBhbnkpIHtcbiAgICBpZiAoIWNvbXBvbmVudFJlZiB8fCAhY29tcG9uZW50UmVmLmhvc3RWaWV3IHx8ICFlbGVtZW50QWRkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICBjb25zdCBkb21FbGVtID0gKGNvbXBvbmVudFJlZi5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgcmV0dXJuIGVsZW1lbnRBZGQuYXBwZW5kQ2hpbGQoZG9tRWxlbSk7XG4gIH1cblxuICBwdWJsaWMgYWRkVG9FbGVtZW50TGF5b3V0Q29udGVudERlZmF1bHQoY29tcG9uZW50UmVmOiBhbnksIGlkOiBzdHJpbmcgPSB0aGlzLmlkRWxlbWVudExheW91dENvbnRlbnREZWZhdWx0KSB7XG4gICAgdGhpcy5hZGRUb0lkQXR0cmlidXRlRWxlbWVudChjb21wb25lbnRSZWYsIGlkKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUb0lkQXR0cmlidXRlRWxlbWVudChjb21wb25lbnRSZWY6IGFueSwgaWQ6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5lbGVtZW50TGF5b3V0Q29udGVudC5oYXMoaWQpKSB7XG4gICAgICB0aGlzLmVsZW1lbnRMYXlvdXRDb250ZW50LnNldChpZCwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpIGFzIEhUTUxFbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKCFjb21wb25lbnRSZWYgfHwgIWNvbXBvbmVudFJlZi5ob3N0Vmlldykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgY29uc3QgZG9tRWxlbSA9IChjb21wb25lbnRSZWYuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcblxuICAgIHJldHVybiB0aGlzLmVsZW1lbnRMYXlvdXRDb250ZW50LmdldChpZCk/LmFwcGVuZENoaWxkKGRvbUVsZW0pO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZShjb21wb25lbnRSZWY6IGFueSwgZnJhbWVJZD86IHN0cmluZywgaWdub3JlRGVzdHJveUNvbXBvbmVudD86IGJvb2xlYW4pIHtcbiAgICBpZiAoIWNvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZVN0eWxlVG9QYXJlbnREb2N1bWVudChjb21wb25lbnRSZWYpO1xuICAgIGlmIChjb21wb25lbnRSZWYuaG9zdFZpZXcpIHtcbiAgICAgIHRoaXMuYXBwUmVmLmRldGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICB9XG4gICAgaWYgKCFpZ25vcmVEZXN0cm95Q29tcG9uZW50ICYmIGNvbXBvbmVudFJlZi5kZXN0cm95KSB7XG4gICAgICBjb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3R5bGVUb1BhcmVudERvY3VtZW50KGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT4sIHRpbWVyRGVsYXlVcGRhdGVTdHlsZVRvUGFyZW50PzogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMudGltZU91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZU91dCk7XG4gICAgfVxuICAgIHRoaXMudGltZU91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZG9jdW1lbnRQYXJlbnQgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50O1xuXG4gICAgICBpZiAoZG9jdW1lbnRQYXJlbnQgJiYgIXRoaXMubWFwU3R5bGVzVG9QYXJlbnREb2N1bWVudC5oYXMoY29tcG9uZW50UmVmKSkge1xuICAgICAgICBjb25zdCBzdHlsZVRhZ3MgPSBuZXcgQXJyYXk8Tm9kZT4oKTtcblxuICAgICAgICBBcnJheS5mcm9tKGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvckFsbCgnc3R5bGUnKSkuZm9yRWFjaCgoc3R5bGVUYWcpID0+IHtcbiAgICAgICAgICBjb25zdCBjbG9uZVN0eWxlVGFnID0gc3R5bGVUYWcuY2xvbmVOb2RlKHRydWUpO1xuXG4gICAgICAgICAgc3R5bGVUYWdzLnB1c2goY2xvbmVTdHlsZVRhZyk7XG4gICAgICAgICAgZG9jdW1lbnRQYXJlbnQ/LmhlYWQuYXBwZW5kQ2hpbGQoY2xvbmVTdHlsZVRhZyk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1hcFN0eWxlc1RvUGFyZW50RG9jdW1lbnQuc2V0KGNvbXBvbmVudFJlZiwgc3R5bGVUYWdzKTtcbiAgICAgIH1cbiAgICB9LCB0aW1lckRlbGF5VXBkYXRlU3R5bGVUb1BhcmVudCB8fCAyNTApO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVTdHlsZVRvUGFyZW50RG9jdW1lbnQoY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55Pikge1xuICAgIGlmICghY29tcG9uZW50UmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0eWxlVGFnc1BvcHVwID0gdGhpcy5tYXBTdHlsZXNUb1BhcmVudERvY3VtZW50LmdldChjb21wb25lbnRSZWYpO1xuICAgIGNvbnN0IGRvY3VtZW50UGFyZW50ID0gd2luZG93LnBhcmVudC5kb2N1bWVudDtcblxuICAgIGlmICghc3R5bGVUYWdzUG9wdXAgfHwgIXN0eWxlVGFnc1BvcHVwLmxlbmd0aCB8fCAhZG9jdW1lbnRQYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3R5bGVUYWdzUG9wdXAuZm9yRWFjaCgoc3R5bGVUYWcpID0+IHtcbiAgICAgIGRvY3VtZW50UGFyZW50Py5oZWFkLnJlbW92ZUNoaWxkKHN0eWxlVGFnKTtcbiAgICB9KTtcbiAgICB0aGlzLm1hcFN0eWxlc1RvUGFyZW50RG9jdW1lbnQuZGVsZXRlKGNvbXBvbmVudFJlZik7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy50aW1lT3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lT3V0KTtcbiAgICAgIHRoaXMudGltZU91dCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aGlzLmVsZW1lbnRMYXlvdXRDb250ZW50LmNsZWFyKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './dynamic-component.service';
|
|
2
|
+
export * from './set-inputs';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2R5bmFtaWMtY29tcG9uZW50L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9keW5hbWljLWNvbXBvbmVudC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2V0LWlucHV0cyc7XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicy11aS1zZXJ2aWNlcy1keW5hbWljLWNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvc2VydmljZXMvZHluYW1pYy1jb21wb25lbnQvc3JjL2xpYnMtdWktc2VydmljZXMtZHluYW1pYy1jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export const setInputs = (componentRef, inputs, required) => {
|
|
2
|
+
Object.entries(inputs).forEach(([key, value]) => componentRef.setInput(key, value));
|
|
3
|
+
};
|
|
4
|
+
export const setInput = (componentRef, input, value) => {
|
|
5
|
+
componentRef.setInput(input, value);
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LWlucHV0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvc2VydmljZXMvZHluYW1pYy1jb21wb25lbnQvc3JjL3NldC1pbnB1dHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQThCLFlBQTZCLEVBQUUsTUFBMkIsRUFBRSxRQUFZLEVBQVEsRUFBRTtJQUN2SSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3RGLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFJLFlBQTZCLEVBQUUsS0FBNkIsRUFBRSxLQUErQyxFQUFRLEVBQUU7SUFDakosWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFeHRyYWN0SW5wdXRzIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBzZXRJbnB1dHMgPSA8VCwgUiBleHRlbmRzIGJvb2xlYW4gPSB0cnVlPihjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxUPiwgaW5wdXRzOiBFeHRyYWN0SW5wdXRzPFQsIFI+LCByZXF1aXJlZD86IFIpOiB2b2lkID0+IHtcbiAgT2JqZWN0LmVudHJpZXMoaW5wdXRzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IGNvbXBvbmVudFJlZi5zZXRJbnB1dChrZXksIHZhbHVlKSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0SW5wdXQgPSA8VD4oY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8VD4sIGlucHV0OiBrZXlvZiBFeHRyYWN0SW5wdXRzPFQ+LCB2YWx1ZTogRXh0cmFjdElucHV0czxUPltrZXlvZiBFeHRyYWN0SW5wdXRzPFQ+XSk6IHZvaWQgPT4ge1xuICBjb21wb25lbnRSZWYuc2V0SW5wdXQoaW5wdXQgYXMgc3RyaW5nLCB2YWx1ZSk7XG59O1xuIl19
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, ApplicationRef, createComponent, Injectable } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
|
+
class LibsUiDynamicComponentService {
|
|
6
|
+
timeOut;
|
|
7
|
+
elementLayoutContent = new Map();
|
|
8
|
+
elementBody;
|
|
9
|
+
mapStylesToParentDocument = new WeakMap();
|
|
10
|
+
appRef = inject(ApplicationRef);
|
|
11
|
+
idElementLayoutContentDefault = 'libs-ui-layout-content';
|
|
12
|
+
set IdElementLayoutContentDefault(id) {
|
|
13
|
+
this.idElementLayoutContentDefault = id;
|
|
14
|
+
}
|
|
15
|
+
resolveComponentFactory(component) {
|
|
16
|
+
return createComponent(component, { environmentInjector: this.appRef.injector });
|
|
17
|
+
}
|
|
18
|
+
addToBody(componentRef, isAddParentDocument, timerDelayUpdateStyleToParent) {
|
|
19
|
+
if (!componentRef || !componentRef.hostView) {
|
|
20
|
+
return '';
|
|
21
|
+
}
|
|
22
|
+
this.appRef.attachView(componentRef.hostView);
|
|
23
|
+
const domElem = componentRef.hostView.rootNodes[0];
|
|
24
|
+
if (isAddParentDocument) {
|
|
25
|
+
window.parent.document.body.appendChild(domElem);
|
|
26
|
+
this.updateStyleToParentDocument(componentRef, timerDelayUpdateStyleToParent);
|
|
27
|
+
return '';
|
|
28
|
+
}
|
|
29
|
+
if (!this.elementBody) {
|
|
30
|
+
this.elementBody = document.body;
|
|
31
|
+
}
|
|
32
|
+
this.elementBody.appendChild(domElem);
|
|
33
|
+
return '';
|
|
34
|
+
}
|
|
35
|
+
addToElement(componentRef, elementAdd) {
|
|
36
|
+
if (!componentRef || !componentRef.hostView || !elementAdd) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
this.appRef.attachView(componentRef.hostView);
|
|
40
|
+
const domElem = componentRef.hostView.rootNodes[0];
|
|
41
|
+
return elementAdd.appendChild(domElem);
|
|
42
|
+
}
|
|
43
|
+
addToElementLayoutContentDefault(componentRef, id = this.idElementLayoutContentDefault) {
|
|
44
|
+
this.addToIdAttributeElement(componentRef, id);
|
|
45
|
+
}
|
|
46
|
+
addToIdAttributeElement(componentRef, id) {
|
|
47
|
+
if (!this.elementLayoutContent.has(id)) {
|
|
48
|
+
this.elementLayoutContent.set(id, document.getElementById(id));
|
|
49
|
+
}
|
|
50
|
+
if (!componentRef || !componentRef.hostView) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
this.appRef.attachView(componentRef.hostView);
|
|
54
|
+
const domElem = componentRef.hostView.rootNodes[0];
|
|
55
|
+
return this.elementLayoutContent.get(id)?.appendChild(domElem);
|
|
56
|
+
}
|
|
57
|
+
remove(componentRef, frameId, ignoreDestroyComponent) {
|
|
58
|
+
if (!componentRef) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
this.removeStyleToParentDocument(componentRef);
|
|
62
|
+
if (componentRef.hostView) {
|
|
63
|
+
this.appRef.detachView(componentRef.hostView);
|
|
64
|
+
}
|
|
65
|
+
if (!ignoreDestroyComponent && componentRef.destroy) {
|
|
66
|
+
componentRef.destroy();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
updateStyleToParentDocument(componentRef, timerDelayUpdateStyleToParent) {
|
|
70
|
+
if (this.timeOut) {
|
|
71
|
+
clearTimeout(this.timeOut);
|
|
72
|
+
}
|
|
73
|
+
this.timeOut = setTimeout(() => {
|
|
74
|
+
const documentParent = window.parent.document;
|
|
75
|
+
if (documentParent && !this.mapStylesToParentDocument.has(componentRef)) {
|
|
76
|
+
const styleTags = new Array();
|
|
77
|
+
Array.from(document.head.querySelectorAll('style')).forEach((styleTag) => {
|
|
78
|
+
const cloneStyleTag = styleTag.cloneNode(true);
|
|
79
|
+
styleTags.push(cloneStyleTag);
|
|
80
|
+
documentParent?.head.appendChild(cloneStyleTag);
|
|
81
|
+
});
|
|
82
|
+
this.mapStylesToParentDocument.set(componentRef, styleTags);
|
|
83
|
+
}
|
|
84
|
+
}, timerDelayUpdateStyleToParent || 250);
|
|
85
|
+
}
|
|
86
|
+
removeStyleToParentDocument(componentRef) {
|
|
87
|
+
if (!componentRef) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const styleTagsPopup = this.mapStylesToParentDocument.get(componentRef);
|
|
91
|
+
const documentParent = window.parent.document;
|
|
92
|
+
if (!styleTagsPopup || !styleTagsPopup.length || !documentParent) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
styleTagsPopup.forEach((styleTag) => {
|
|
96
|
+
documentParent?.head.removeChild(styleTag);
|
|
97
|
+
});
|
|
98
|
+
this.mapStylesToParentDocument.delete(componentRef);
|
|
99
|
+
}
|
|
100
|
+
ngOnDestroy() {
|
|
101
|
+
if (this.timeOut) {
|
|
102
|
+
clearTimeout(this.timeOut);
|
|
103
|
+
this.timeOut = undefined;
|
|
104
|
+
}
|
|
105
|
+
this.elementLayoutContent.clear();
|
|
106
|
+
}
|
|
107
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiDynamicComponentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
108
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiDynamicComponentService, providedIn: 'root' });
|
|
109
|
+
}
|
|
110
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiDynamicComponentService, decorators: [{
|
|
111
|
+
type: Injectable,
|
|
112
|
+
args: [{
|
|
113
|
+
providedIn: 'root',
|
|
114
|
+
}]
|
|
115
|
+
}] });
|
|
116
|
+
|
|
117
|
+
const setInputs = (componentRef, inputs, required) => {
|
|
118
|
+
Object.entries(inputs).forEach(([key, value]) => componentRef.setInput(key, value));
|
|
119
|
+
};
|
|
120
|
+
const setInput = (componentRef, input, value) => {
|
|
121
|
+
componentRef.setInput(input, value);
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Generated bundle index. Do not edit.
|
|
126
|
+
*/
|
|
127
|
+
|
|
128
|
+
export { LibsUiDynamicComponentService, setInput, setInputs };
|
|
129
|
+
//# sourceMappingURL=libs-ui-services-dynamic-component.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"libs-ui-services-dynamic-component.mjs","sources":["../../../../../libs-ui/services/dynamic-component/src/dynamic-component.service.ts","../../../../../libs-ui/services/dynamic-component/src/set-inputs.ts","../../../../../libs-ui/services/dynamic-component/src/libs-ui-services-dynamic-component.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ApplicationRef, ComponentRef, EmbeddedViewRef, Injectable, createComponent, inject, OnDestroy } from '@angular/core';\n@Injectable({\n providedIn: 'root',\n})\nexport class LibsUiDynamicComponentService implements OnDestroy {\n private timeOut?: number;\n private elementLayoutContent: Map<string, HTMLElement> = new Map();\n private elementBody!: HTMLElement | null;\n private mapStylesToParentDocument: WeakMap<ComponentRef<any>, Array<Node>> = new WeakMap();\n private appRef = inject(ApplicationRef);\n private idElementLayoutContentDefault = 'libs-ui-layout-content';\n\n public set IdElementLayoutContentDefault(id: string) {\n this.idElementLayoutContentDefault = id;\n }\n\n public resolveComponentFactory(component: any): ComponentRef<any> {\n return createComponent(component, { environmentInjector: this.appRef.injector });\n }\n\n public addToBody(componentRef?: ComponentRef<any>, isAddParentDocument?: boolean, timerDelayUpdateStyleToParent?: number): string {\n if (!componentRef || !componentRef.hostView) {\n return '';\n }\n\n this.appRef.attachView(componentRef.hostView);\n const domElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n\n if (isAddParentDocument) {\n window.parent.document.body.appendChild(domElem);\n this.updateStyleToParentDocument(componentRef, timerDelayUpdateStyleToParent);\n\n return '';\n }\n if (!this.elementBody) {\n this.elementBody = document.body;\n }\n this.elementBody.appendChild(domElem);\n\n return '';\n }\n\n public addToElement(componentRef: any, elementAdd: any) {\n if (!componentRef || !componentRef.hostView || !elementAdd) {\n return;\n }\n this.appRef.attachView(componentRef.hostView);\n const domElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n\n return elementAdd.appendChild(domElem);\n }\n\n public addToElementLayoutContentDefault(componentRef: any, id: string = this.idElementLayoutContentDefault) {\n this.addToIdAttributeElement(componentRef, id);\n }\n\n public addToIdAttributeElement(componentRef: any, id: string) {\n if (!this.elementLayoutContent.has(id)) {\n this.elementLayoutContent.set(id, document.getElementById(id) as HTMLElement);\n }\n if (!componentRef || !componentRef.hostView) {\n return;\n }\n this.appRef.attachView(componentRef.hostView);\n const domElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n\n return this.elementLayoutContent.get(id)?.appendChild(domElem);\n }\n\n public remove(componentRef: any, frameId?: string, ignoreDestroyComponent?: boolean) {\n if (!componentRef) {\n return;\n }\n this.removeStyleToParentDocument(componentRef);\n if (componentRef.hostView) {\n this.appRef.detachView(componentRef.hostView);\n }\n if (!ignoreDestroyComponent && componentRef.destroy) {\n componentRef.destroy();\n }\n }\n\n private updateStyleToParentDocument(componentRef: ComponentRef<any>, timerDelayUpdateStyleToParent?: number) {\n if (this.timeOut) {\n clearTimeout(this.timeOut);\n }\n this.timeOut = setTimeout(() => {\n const documentParent = window.parent.document;\n\n if (documentParent && !this.mapStylesToParentDocument.has(componentRef)) {\n const styleTags = new Array<Node>();\n\n Array.from(document.head.querySelectorAll('style')).forEach((styleTag) => {\n const cloneStyleTag = styleTag.cloneNode(true);\n\n styleTags.push(cloneStyleTag);\n documentParent?.head.appendChild(cloneStyleTag);\n });\n this.mapStylesToParentDocument.set(componentRef, styleTags);\n }\n }, timerDelayUpdateStyleToParent || 250);\n }\n\n private removeStyleToParentDocument(componentRef: ComponentRef<any>) {\n if (!componentRef) {\n return;\n }\n const styleTagsPopup = this.mapStylesToParentDocument.get(componentRef);\n const documentParent = window.parent.document;\n\n if (!styleTagsPopup || !styleTagsPopup.length || !documentParent) {\n return;\n }\n styleTagsPopup.forEach((styleTag) => {\n documentParent?.head.removeChild(styleTag);\n });\n this.mapStylesToParentDocument.delete(componentRef);\n }\n\n ngOnDestroy() {\n if (this.timeOut) {\n clearTimeout(this.timeOut);\n this.timeOut = undefined;\n }\n\n this.elementLayoutContent.clear();\n }\n}\n","import { ComponentRef } from '@angular/core';\nimport { ExtractInputs } from '@libs-ui/interfaces-types';\n\nexport const setInputs = <T, R extends boolean = true>(componentRef: ComponentRef<T>, inputs: ExtractInputs<T, R>, required?: R): void => {\n Object.entries(inputs).forEach(([key, value]) => componentRef.setInput(key, value));\n};\n\nexport const setInput = <T>(componentRef: ComponentRef<T>, input: keyof ExtractInputs<T>, value: ExtractInputs<T>[keyof ExtractInputs<T>]): void => {\n componentRef.setInput(input as string, value);\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@libs-ui/services-dynamic-component",
|
|
3
|
+
"version": "0.1.1-1",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/core": ">=18.0.0",
|
|
6
|
+
"@libs-ui/utils": "0.1.1-1"
|
|
7
|
+
},
|
|
8
|
+
"sideEffects": false,
|
|
9
|
+
"module": "fesm2022/libs-ui-services-dynamic-component.mjs",
|
|
10
|
+
"typings": "index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
"./package.json": {
|
|
13
|
+
"default": "./package.json"
|
|
14
|
+
},
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./index.d.ts",
|
|
17
|
+
"esm2022": "./esm2022/libs-ui-services-dynamic-component.mjs",
|
|
18
|
+
"esm": "./esm2022/libs-ui-services-dynamic-component.mjs",
|
|
19
|
+
"default": "./fesm2022/libs-ui-services-dynamic-component.mjs"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"tslib": "^2.3.0"
|
|
24
|
+
}
|
|
25
|
+
}
|
package/set-inputs.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ComponentRef } from '@angular/core';
|
|
2
|
+
import { ExtractInputs } from '@libs-ui/interfaces-types';
|
|
3
|
+
export declare const setInputs: <T, R extends boolean = true>(componentRef: ComponentRef<T>, inputs: ExtractInputs<T, R>, required?: R) => void;
|
|
4
|
+
export declare const setInput: <T>(componentRef: ComponentRef<T>, input: keyof ExtractInputs<T>, value: ExtractInputs<T>[keyof ExtractInputs<T>]) => void;
|