@zdigambar/ngx-element 3.0.0 → 5.0.0
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 +1 -1
- package/esm2020/lib/ngx-element.component.mjs +105 -0
- package/esm2020/lib/ngx-element.module.mjs +34 -0
- package/esm2020/lib/ngx-element.service.mjs +135 -0
- package/esm2020/zdigambar-ngx-element.mjs +5 -0
- package/fesm2015/zdigambar-ngx-element.mjs +281 -0
- package/fesm2015/zdigambar-ngx-element.mjs.map +1 -0
- package/{fesm2015/zdigambar-ngx-element.js → fesm2020/zdigambar-ngx-element.mjs} +37 -38
- package/fesm2020/zdigambar-ngx-element.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/lib/lazy-component-loaded-event.d.ts +1 -0
- package/lib/lazy-component-loaded-event.d.ts.map +1 -0
- package/lib/ngx-element.component.d.ts +4 -0
- package/lib/ngx-element.component.d.ts.map +1 -0
- package/lib/ngx-element.module.d.ts +6 -0
- package/lib/ngx-element.module.d.ts.map +1 -0
- package/lib/ngx-element.service.d.ts +4 -0
- package/lib/ngx-element.service.d.ts.map +1 -0
- package/lib/tokens.d.ts +1 -0
- package/lib/tokens.d.ts.map +1 -0
- package/package.json +24 -12
- package/public-api.d.ts +1 -0
- package/public-api.d.ts.map +1 -0
- package/zdigambar-ngx-element.d.ts.map +1 -0
- package/bundles/zdigambar-ngx-element.umd.js +0 -810
- package/bundles/zdigambar-ngx-element.umd.js.map +0 -1
- package/esm2015/lib/ngx-element.component.js +0 -105
- package/esm2015/lib/ngx-element.module.js +0 -33
- package/esm2015/lib/ngx-element.service.js +0 -136
- package/esm2015/zdigambar-ngx-element.js +0 -8
- package/fesm2015/zdigambar-ngx-element.js.map +0 -1
- package/zdigambar-ngx-element.d.ts +0 -7
- package/zdigambar-ngx-element.metadata.json +0 -1
- /package/{esm2015/lib/lazy-component-loaded-event.js → esm2020/lib/lazy-component-loaded-event.mjs} +0 -0
- /package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +0 -0
- /package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
package/README.md
CHANGED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { Component, Input, ViewChild, ViewContainerRef, ReflectiveInjector } from '@angular/core';
|
|
2
|
+
import { merge } from 'rxjs';
|
|
3
|
+
import { map } from 'rxjs/operators';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./ngx-element.service";
|
|
6
|
+
export class NgxElementComponent {
|
|
7
|
+
constructor(ngxElementService, elementRef) {
|
|
8
|
+
this.ngxElementService = ngxElementService;
|
|
9
|
+
this.elementRef = elementRef;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Subscribe to event emitters of a lazy loaded and dynamically instantiated Angular component
|
|
13
|
+
* and dispatch them as Custom Events on the NgxElementComponent that is used in a template.
|
|
14
|
+
*/
|
|
15
|
+
setProxiedOutputs(factory) {
|
|
16
|
+
const eventEmitters = factory.outputs.map(({ propName, templateName }) => {
|
|
17
|
+
const emitter = this.componentRef.instance[propName];
|
|
18
|
+
return emitter.pipe(map((value) => ({ name: templateName, value })));
|
|
19
|
+
});
|
|
20
|
+
const outputEvents = merge(...eventEmitters);
|
|
21
|
+
this.ngElementEventsSubscription = outputEvents.subscribe(subscription => {
|
|
22
|
+
const customEvent = document.createEvent('CustomEvent');
|
|
23
|
+
customEvent.initCustomEvent(subscription.name, false, false, subscription.value);
|
|
24
|
+
this.elementRef.nativeElement.dispatchEvent(customEvent);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
ngOnInit() {
|
|
28
|
+
this.ngxElementService.getComponentToLoad(this.selector).subscribe(event => {
|
|
29
|
+
this.componentToLoad = event.componentClass;
|
|
30
|
+
this.componentFactoryResolver = this.ngxElementService.getComponentFactoryResolver(this.componentToLoad);
|
|
31
|
+
this.injector = this.ngxElementService.getInjector(this.componentToLoad);
|
|
32
|
+
const attributes = this.getElementAttributes();
|
|
33
|
+
this.createComponent(attributes);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
createComponent(attributes) {
|
|
37
|
+
this.container.clear();
|
|
38
|
+
const factory = this.componentFactoryResolver.resolveComponentFactory(this.componentToLoad);
|
|
39
|
+
this.refInjector = ReflectiveInjector.resolveAndCreate([{ provide: this.componentToLoad, useValue: this.componentToLoad }], this.injector);
|
|
40
|
+
this.componentRef = this.container.createComponent(factory, 0, this.refInjector);
|
|
41
|
+
this.setAttributes(attributes);
|
|
42
|
+
this.listenToAttributeChanges();
|
|
43
|
+
this.setProxiedOutputs(factory);
|
|
44
|
+
}
|
|
45
|
+
setAttributes(attributes) {
|
|
46
|
+
attributes.forEach(attr => {
|
|
47
|
+
this.componentRef.instance[attr.name] = attr.value;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
getElementAttributes() {
|
|
51
|
+
const attrs = this.elementRef.nativeElement.attributes;
|
|
52
|
+
const attributes = [];
|
|
53
|
+
for (let attr, i = 0; i < attrs.length; i++) {
|
|
54
|
+
attr = attrs[i];
|
|
55
|
+
if (attr.nodeName.match('^data-')) {
|
|
56
|
+
attributes.push({
|
|
57
|
+
name: this.camelCaseAttribute(attr.nodeName),
|
|
58
|
+
value: attr.nodeValue
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return attributes;
|
|
63
|
+
}
|
|
64
|
+
camelCaseAttribute(attribute) {
|
|
65
|
+
const attr = attribute.replace('data-', '');
|
|
66
|
+
const chunks = attr.split('-');
|
|
67
|
+
if (chunks.length > 1) {
|
|
68
|
+
return chunks[0] + chunks.slice(1).map(chunk => chunk.replace(/^\w/, c => c.toUpperCase())).join('');
|
|
69
|
+
}
|
|
70
|
+
return attr;
|
|
71
|
+
}
|
|
72
|
+
listenToAttributeChanges() {
|
|
73
|
+
const observer = new MutationObserver(mutations => {
|
|
74
|
+
mutations.forEach(mutation => {
|
|
75
|
+
if (mutation.type === 'attributes') {
|
|
76
|
+
const attributes = this.getElementAttributes();
|
|
77
|
+
this.setAttributes(attributes);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
observer.observe(this.elementRef.nativeElement, {
|
|
82
|
+
attributes: true
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
ngOnDestroy() {
|
|
86
|
+
this.componentRef.destroy();
|
|
87
|
+
this.ngElementEventsSubscription.unsubscribe();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
NgxElementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxElementComponent, deps: [{ token: i1.NgxElementService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
91
|
+
NgxElementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: NgxElementComponent, selector: "lib-ngx-element", inputs: { selector: "selector" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: `
|
|
92
|
+
<ng-template #container></ng-template>
|
|
93
|
+
`, isInline: true });
|
|
94
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxElementComponent, decorators: [{
|
|
95
|
+
type: Component,
|
|
96
|
+
args: [{ selector: 'lib-ngx-element', template: `
|
|
97
|
+
<ng-template #container></ng-template>
|
|
98
|
+
` }]
|
|
99
|
+
}], ctorParameters: function () { return [{ type: i1.NgxElementService }, { type: i0.ElementRef }]; }, propDecorators: { selector: [{
|
|
100
|
+
type: Input
|
|
101
|
+
}], container: [{
|
|
102
|
+
type: ViewChild,
|
|
103
|
+
args: ['container', { read: ViewContainerRef }]
|
|
104
|
+
}] } });
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWVsZW1lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWVsZW1lbnQvc3JjL2xpYi9uZ3gtZWxlbWVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBR0wsU0FBUyxFQUNULGdCQUFnQixFQU1oQixrQkFBa0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLEtBQUssRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7OztBQVNuQyxNQUFNLE9BQU8sbUJBQW1CO0lBWTlCLFlBQ1UsaUJBQW9DLEVBQ3BDLFVBQXNCO1FBRHRCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUM3QixDQUFDO0lBRUo7OztPQUdHO0lBQ0ssaUJBQWlCLENBQUMsT0FBOEI7UUFDdEQsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUMsRUFBRSxFQUFFO1lBQ3JFLE1BQU0sT0FBTyxHQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBZ0IsQ0FBQyxRQUFRLENBQXNCLENBQUM7WUFDbkYsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxZ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WUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNqRCxDQUFDOztnSEFoSFUsbUJBQW1CO29HQUFuQixtQkFBbUIsNEtBSUMsZ0JBQWdCLDZCQVRyQzs7R0FFVDsyRkFHVSxtQkFBbUI7a0JBUC9CLFNBQVM7K0JBQ0UsaUJBQWlCLFlBQ2pCOztHQUVUO2lJQU1RLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQzRDLFNBQVM7c0JBQTFELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRGYWN0b3J5LFxuICBDb21wb25lbnRSZWYsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVHlwZSxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIE9uRGVzdHJveSxcbiAgRXZlbnRFbWl0dGVyLFxuICBFbGVtZW50UmVmLFxuICBJbmplY3RvcixcbiAgUmVmbGVjdGl2ZUluamVjdG9yXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOZ3hFbGVtZW50U2VydmljZX0gZnJvbSAnLi9uZ3gtZWxlbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7bWVyZ2UsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItbmd4LWVsZW1lbnQnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy10ZW1wbGF0ZSAjY29udGFpbmVyPjwvbmctdGVtcGxhdGU+XG4gIGAsXG4gIHN0eWxlczogW11cbn0pXG5leHBvcnQgY2xhc3MgTmd4RWxlbWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwcml2YXRlIG5nRWxlbWVudEV2ZW50c1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBASW5wdXQoKSBzZWxlY3Rvcjogc3RyaW5nO1xuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7cmVhZDogVmlld0NvbnRhaW5lclJlZn0pIGNvbnRhaW5lcjtcblxuICBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+O1xuICBjb21wb25lbnRUb0xvYWQ6IFR5cGU8YW55PjtcbiAgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI7XG4gIGluamVjdG9yOiBJbmplY3RvcjtcbiAgcmVmSW5qZWN0b3I6IFJlZmxlY3RpdmVJbmplY3RvcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5neEVsZW1lbnRTZXJ2aWNlOiBOZ3hFbGVtZW50U2VydmljZSxcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gZXZlbnQgZW1pdHRlcnMgb2YgYSBsYXp5IGxvYWRlZCBhbmQgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIEFuZ3VsYXIgY29tcG9uZW50XG4gICAqIGFuZCBkaXNwYXRjaCB0aGVtIGFzIEN1c3RvbSBFdmVudHMgb24gdGhlIE5neEVsZW1lbnRDb21wb25lbnQgdGhhdCBpcyB1c2VkIGluIGEgdGVtcGxhdGUuXG4gICAqL1xuICBwcml2YXRlIHNldFByb3hpZWRPdXRwdXRzKGZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8YW55Pik6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50RW1pdHRlcnMgPSBmYWN0b3J5Lm91dHB1dHMubWFwKCh7cHJvcE5hbWUsIHRlbXBsYXRlTmFtZX0pID0+IHtcbiAgICAgIGNvbnN0IGVtaXR0ZXIgPSAodGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgYW55KVtwcm9wTmFtZV0gYXMgRXZlbnRFbWl0dGVyPGFueT47XG4gICAgICByZXR1cm4gZW1pdHRlci5waXBlKG1hcCgodmFsdWU6IGFueSkgPT4gKHtuYW1lOiB0ZW1wbGF0ZU5hbWUsIHZhbHVlfSkpKTtcbiAgICB9KTtcbiAgICBjb25zdCBvdXRwdXRFdmVudHMgPSBtZXJnZSguLi5ldmVudEVtaXR0ZXJzKTtcbiAgICB0aGlzLm5nRWxlbWVudEV2ZW50c1N1YnNjcmlwdGlvbiA9IG91dHB1dEV2ZW50cy5zdWJzY3JpYmUoc3Vic2NyaXB0aW9uID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7XG4gICAgICBjdXN0b21FdmVudC5pbml0Q3VzdG9tRXZlbnQoc3Vic2NyaXB0aW9uLm5hbWUsIGZhbHNlLCBmYWxzZSwgc3Vic2NyaXB0aW9uLnZhbHVlKTtcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5uZ3hFbGVtZW50U2VydmljZS5nZXRDb21wb25lbnRUb0xvYWQodGhpcy5zZWxlY3Rvcikuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50VG9Mb2FkID0gZXZlbnQuY29tcG9uZW50Q2xhc3M7XG4gICAgICB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlciA9IHRoaXMubmd4RWxlbWVudFNlcnZpY2UuZ2V0Q29tcG9uZW50RmFjdG9yeVJlc29sdmVyKHRoaXMuY29tcG9uZW50VG9Mb2FkKTtcbiAgICAgIHRoaXMuaW5qZWN0b3IgPSB0aGlzLm5neEVsZW1lbnRTZXJ2aWNlLmdldEluamVjdG9yKHRoaXMuY29tcG9uZW50VG9Mb2FkKTtcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHRoaXMuZ2V0RWxlbWVudEF0dHJpYnV0ZXMoKTtcbiAgICAgIHRoaXMuY3JlYXRlQ29tcG9uZW50KGF0dHJpYnV0ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlQ29tcG9uZW50KGF0dHJpYnV0ZXMpIHtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGVhcigpO1xuICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0aGlzLmNvbXBvbmVudFRvTG9hZCk7XG5cbiAgICB0aGlzLnJlZkluamVjdG9yID0gUmVmbGVjdGl2ZUluamVjdG9yLnJlc29sdmVBbmRDcmVhdGUoXG4gICAgICBbe3Byb3ZpZGU6IHRoaXMuY29tcG9uZW50VG9Mb2FkLCB1c2VWYWx1ZTogdGhpcy5jb21wb25lbnRUb0xvYWR9XSwgdGhpcy5pbmplY3RvclxuICAgICk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLmNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoZmFjdG9yeSwgMCwgdGhpcy5yZWZJbmplY3Rvcik7XG5cbiAgICB0aGlzLnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7XG4gICAgdGhpcy5saXN0ZW5Ub0F0dHJpYnV0ZUNoYW5nZXMoKTtcbiAgICB0aGlzLnNldFByb3hpZWRPdXRwdXRzKGZhY3RvcnkpO1xuICB9XG5cbiAgc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKSB7XG4gICAgYXR0cmlidXRlcy5mb3JFYWNoKGF0dHIgPT4ge1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2VbYXR0ci5uYW1lXSA9IGF0dHIudmFsdWU7XG4gICAgfSk7XG4gIH1cblxuICBnZXRFbGVtZW50QXR0cmlidXRlcygpIHtcbiAgICBjb25zdCBhdHRycyA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmF0dHJpYnV0ZXM7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgYXR0ciwgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgYXR0ciA9IGF0dHJzW2ldO1xuXG4gICAgICBpZiAoYXR0ci5ub2RlTmFtZS5tYXRjaCgnXmRhdGEtJykpIHtcbiAgICAgICAgYXR0cmlidXRlcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiB0aGlzLmNhbWVsQ2FzZUF0dHJpYnV0ZShhdHRyLm5vZGVOYW1lKSxcbiAgICAgICAgICB2YWx1ZTogYXR0ci5ub2RlVmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gIH1cblxuICBjYW1lbENhc2VBdHRyaWJ1dGUoYXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhdHRyID0gYXR0cmlidXRlLnJlcGxhY2UoJ2RhdGEtJywgJycpO1xuICAgIGNvbnN0IGNodW5rcyA9IGF0dHIuc3BsaXQoJy0nKTtcblxuICAgIGlmIChjaHVua3MubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIGNodW5rc1swXSArIGNodW5rcy5zbGljZSgxKS5tYXAoY2h1bmsgPT4gY2h1bmsucmVwbGFjZSgvXlxcdy8sIGMgPT4gYy50b1VwcGVyQ2FzZSgpKSkuam9pbignJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHI7XG4gIH1cblxuICBsaXN0ZW5Ub0F0dHJpYnV0ZUNoYW5nZXMoKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihtdXRhdGlvbnMgPT4ge1xuICAgICAgbXV0YXRpb25zLmZvckVhY2gobXV0YXRpb24gPT4ge1xuICAgICAgICBpZiAobXV0YXRpb24udHlwZSA9PT0gJ2F0dHJpYnV0ZXMnKSB7XG4gICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHRoaXMuZ2V0RWxlbWVudEF0dHJpYnV0ZXMoKTtcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwge1xuICAgICAgYXR0cmlidXRlczogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgIHRoaXMubmdFbGVtZW50RXZlbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn0iXX0=
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { createCustomElement } from '@angular/elements';
|
|
3
|
+
import { NgxElementComponent } from './ngx-element.component';
|
|
4
|
+
import { LAZY_CMPS_PATH_TOKEN } from './tokens';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class NgxElementModule {
|
|
7
|
+
constructor(injector) {
|
|
8
|
+
this.injector = injector;
|
|
9
|
+
const ngxElement = createCustomElement(NgxElementComponent, { injector });
|
|
10
|
+
customElements.define('ngx-element', ngxElement);
|
|
11
|
+
}
|
|
12
|
+
static forRoot(modulePaths) {
|
|
13
|
+
return {
|
|
14
|
+
ngModule: NgxElementModule,
|
|
15
|
+
providers: [
|
|
16
|
+
{
|
|
17
|
+
provide: LAZY_CMPS_PATH_TOKEN,
|
|
18
|
+
useValue: modulePaths
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
ngDoBootstrap() { }
|
|
24
|
+
}
|
|
25
|
+
NgxElementModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxElementModule, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.NgModule });
|
|
26
|
+
NgxElementModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: NgxElementModule, declarations: [NgxElementComponent] });
|
|
27
|
+
NgxElementModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxElementModule });
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxElementModule, decorators: [{
|
|
29
|
+
type: NgModule,
|
|
30
|
+
args: [{
|
|
31
|
+
declarations: [NgxElementComponent]
|
|
32
|
+
}]
|
|
33
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }]; } });
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWVsZW1lbnQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWVsZW1lbnQvc3JjL2xpYi9uZ3gtZWxlbWVudC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUtoRCxNQUFNLE9BQU8sZ0JBQWdCO0lBRTNCLFlBQW9CLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDcEMsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQWtCO1FBQy9CLE9BQU87WUFDTCxRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLFNBQVMsRUFBRTtnQkFDVDtvQkFDRSxPQUFPLEVBQUUsb0JBQW9CO29CQUM3QixRQUFRLEVBQUUsV0FBVztpQkFDdEI7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxLQUFJLENBQUM7OzZHQW5CUCxnQkFBZ0I7OEdBQWhCLGdCQUFnQixpQkFGVixtQkFBbUI7OEdBRXpCLGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQUg1QixRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLG1CQUFtQixDQUFDO2lCQUN0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBJbmplY3RvciwgTW9kdWxlV2l0aFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY3JlYXRlQ3VzdG9tRWxlbWVudCB9IGZyb20gJ0Bhbmd1bGFyL2VsZW1lbnRzJztcbmltcG9ydCB7IE5neEVsZW1lbnRDb21wb25lbnQgfSBmcm9tICcuL25neC1lbGVtZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMQVpZX0NNUFNfUEFUSF9UT0tFTiB9IGZyb20gJy4vdG9rZW5zJztcblxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW05neEVsZW1lbnRDb21wb25lbnRdXHJcbn0pXG5leHBvcnQgY2xhc3MgTmd4RWxlbWVudE1vZHVsZSB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBjb25zdCBuZ3hFbGVtZW50ID0gY3JlYXRlQ3VzdG9tRWxlbWVudChOZ3hFbGVtZW50Q29tcG9uZW50LCB7IGluamVjdG9yIH0pO1xuICAgIGN1c3RvbUVsZW1lbnRzLmRlZmluZSgnbmd4LWVsZW1lbnQnLCBuZ3hFbGVtZW50KTtcbiAgfVxuXG4gIHN0YXRpYyBmb3JSb290KG1vZHVsZVBhdGhzOiBhbnlbXSk6IE1vZHVsZVdpdGhQcm92aWRlcnM8Tmd4RWxlbWVudE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogTmd4RWxlbWVudE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogTEFaWV9DTVBTX1BBVEhfVE9LRU4sXG4gICAgICAgICAgdXNlVmFsdWU6IG1vZHVsZVBhdGhzXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG5cbiAgbmdEb0Jvb3RzdHJhcCgpIHt9XG59XG4iXX0=
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { Injectable, Inject, NgModuleFactory, ComponentFactoryResolver } from '@angular/core';
|
|
2
|
+
import { LAZY_CMPS_PATH_TOKEN } from './tokens';
|
|
3
|
+
import { from } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class NgxElementService {
|
|
6
|
+
constructor(modulePaths, compiler, injector) {
|
|
7
|
+
this.compiler = compiler;
|
|
8
|
+
this.injector = injector;
|
|
9
|
+
this.loadedComponents = new Map();
|
|
10
|
+
this.elementsLoading = new Map();
|
|
11
|
+
this.injectors = new Map();
|
|
12
|
+
this.componentFactoryResolvers = new Map();
|
|
13
|
+
const ELEMENT_MODULE_PATHS = new Map();
|
|
14
|
+
modulePaths.forEach(route => {
|
|
15
|
+
ELEMENT_MODULE_PATHS.set(route.selector, route);
|
|
16
|
+
});
|
|
17
|
+
this.componentsToLoad = ELEMENT_MODULE_PATHS;
|
|
18
|
+
}
|
|
19
|
+
receiveContext(component, injector) {
|
|
20
|
+
this.injectors.set(component, injector);
|
|
21
|
+
this.componentFactoryResolvers.set(component, injector.get(ComponentFactoryResolver));
|
|
22
|
+
}
|
|
23
|
+
getInjector(component) {
|
|
24
|
+
return this.injectors.get(component);
|
|
25
|
+
}
|
|
26
|
+
getComponentFactoryResolver(component) {
|
|
27
|
+
return this.componentFactoryResolvers.get(component);
|
|
28
|
+
}
|
|
29
|
+
getComponentsToLoad() {
|
|
30
|
+
return this.componentsToLoad;
|
|
31
|
+
}
|
|
32
|
+
getComponentToLoad(selector) {
|
|
33
|
+
// Returns observable that completes when the lazy module has been loaded.
|
|
34
|
+
const registered = this.loadComponent(selector);
|
|
35
|
+
return from(registered);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Allows to lazy load a component given its selector.
|
|
39
|
+
* If the component selector has been registered, it's according module
|
|
40
|
+
* will be fetched lazily
|
|
41
|
+
* @param componentTag selector of the component to load
|
|
42
|
+
*/
|
|
43
|
+
loadComponent(componentSelector) {
|
|
44
|
+
if (this.elementsLoading.has(componentSelector)) {
|
|
45
|
+
return this.elementsLoading.get(componentSelector);
|
|
46
|
+
}
|
|
47
|
+
if (this.componentsToLoad.has(componentSelector)) {
|
|
48
|
+
const cmpRegistryEntry = this.componentsToLoad.get(componentSelector);
|
|
49
|
+
const path = cmpRegistryEntry.loadChildren;
|
|
50
|
+
const loadPromise = new Promise((resolve, reject) => {
|
|
51
|
+
path()
|
|
52
|
+
.then(elementModuleOrFactory => {
|
|
53
|
+
/**
|
|
54
|
+
* With View Engine, the NgModule factory is created and provided when loaded.
|
|
55
|
+
* With Ivy, only the NgModule class is provided loaded and must be compiled.
|
|
56
|
+
* This uses the same mechanism as the deprecated `SystemJsNgModuleLoader` in
|
|
57
|
+
* in `packages/core/src/linker/system_js_ng_module_factory_loader.ts`
|
|
58
|
+
* to pass on the NgModuleFactory, or compile the NgModule and return its NgModuleFactory.
|
|
59
|
+
*/
|
|
60
|
+
if (elementModuleOrFactory instanceof NgModuleFactory) {
|
|
61
|
+
return elementModuleOrFactory;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
try {
|
|
65
|
+
return this.compiler.compileModuleAsync(elementModuleOrFactory);
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
// return the error
|
|
69
|
+
reject(err);
|
|
70
|
+
// break the promise chain
|
|
71
|
+
throw err;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
})
|
|
75
|
+
.then(moduleFactory => {
|
|
76
|
+
const elementModuleRef = moduleFactory.create(this.injector);
|
|
77
|
+
let componentClass;
|
|
78
|
+
if (typeof elementModuleRef.instance.customElementComponent === 'object') {
|
|
79
|
+
componentClass = elementModuleRef.instance.customElementComponent[componentSelector];
|
|
80
|
+
if (!componentClass) {
|
|
81
|
+
// tslint:disable-next-line: no-string-throw
|
|
82
|
+
throw `You specified multiple component elements in module ${elementModuleRef} but there was no match for tag
|
|
83
|
+
${componentSelector} in ${JSON.stringify(elementModuleRef.instance.customElementComponent)}.
|
|
84
|
+
Make sure the selector in the module is aligned with the one specified in the lazy module definition.`;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
componentClass = elementModuleRef.instance.customElementComponent;
|
|
89
|
+
}
|
|
90
|
+
// Register injector of the lazy module.
|
|
91
|
+
// This is needed to share the entryComponents between the lazy module and the application
|
|
92
|
+
const moduleInjector = elementModuleRef.injector;
|
|
93
|
+
this.receiveContext(componentClass, moduleInjector);
|
|
94
|
+
this.loadedComponents.set(componentSelector, componentClass);
|
|
95
|
+
this.elementsLoading.delete(componentSelector);
|
|
96
|
+
this.componentsToLoad.delete(componentSelector);
|
|
97
|
+
resolve({
|
|
98
|
+
selector: componentSelector,
|
|
99
|
+
componentClass
|
|
100
|
+
});
|
|
101
|
+
})
|
|
102
|
+
.catch(err => {
|
|
103
|
+
this.elementsLoading.delete(componentSelector);
|
|
104
|
+
return Promise.reject(err);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
this.elementsLoading.set(componentSelector, loadPromise);
|
|
108
|
+
return loadPromise;
|
|
109
|
+
}
|
|
110
|
+
else if (this.loadedComponents.has(componentSelector)) {
|
|
111
|
+
// component already loaded
|
|
112
|
+
return new Promise(resolve => {
|
|
113
|
+
resolve({
|
|
114
|
+
selector: componentSelector,
|
|
115
|
+
componentClass: this.loadedComponents.get(componentSelector)
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
throw new Error(`Unrecognized component "${componentSelector}". Make sure it is registered in the component registry`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
NgxElementService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxElementService, deps: [{ token: LAZY_CMPS_PATH_TOKEN }, { token: i0.Compiler }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
125
|
+
NgxElementService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxElementService, providedIn: 'root' });
|
|
126
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxElementService, decorators: [{
|
|
127
|
+
type: Injectable,
|
|
128
|
+
args: [{
|
|
129
|
+
providedIn: 'root'
|
|
130
|
+
}]
|
|
131
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
132
|
+
type: Inject,
|
|
133
|
+
args: [LAZY_CMPS_PATH_TOKEN]
|
|
134
|
+
}] }, { type: i0.Compiler }, { type: i0.Injector }]; } });
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWVsZW1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1lbGVtZW50L3NyYy9saWIvbmd4LWVsZW1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQTRCLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hILE9BQU8sRUFBRSxvQkFBb0IsRUFBb0IsTUFBTSxVQUFVLENBQUM7QUFFbEUsT0FBTyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFLeEMsTUFBTSxPQUFPLGlCQUFpQjtJQVE1QixZQUVFLFdBRUcsRUFDSyxRQUFrQixFQUNsQixRQUFrQjtRQURsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFacEIscUJBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQXFCLENBQUM7UUFDaEQsb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBdUMsQ0FBQztRQUV6RSxjQUFTLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7UUFDM0MsOEJBQXlCLEdBQUcsSUFBSSxHQUFHLEVBQXVDLENBQUM7UUFVekUsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO1FBQ3BELFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUIsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsb0JBQW9CLENBQUM7SUFDL0MsQ0FBQztJQUVELGNBQWMsQ0FBQyxTQUFvQixFQUFFLFFBQWtCO1FBQ3JELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztR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QkFBb0I7a0hBVG5CLGlCQUFpQixjQUZoQixNQUFNOzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVVJLE1BQU07MkJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBOZ01vZHVsZUZhY3RvcnksIFR5cGUsIENvbXBpbGVyLCBJbmplY3RvciwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMQVpZX0NNUFNfUEFUSF9UT0tFTiwgTGF6eUNvbXBvbmVudERlZiB9IGZyb20gJy4vdG9rZW5zJztcbmltcG9ydCB7IExhenlDbXBMb2FkZWRFdmVudCB9IGZyb20gJy4vbGF6eS1jb21wb25lbnQtbG9hZGVkLWV2ZW50JztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20gfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTmd4RWxlbWVudFNlcnZpY2Uge1xuICBwcml2YXRlIGNvbXBvbmVudHNUb0xvYWQ6IE1hcDxzdHJpbmcsIExhenlDb21wb25lbnREZWY+O1xuICBwcml2YXRlIGxvYWRlZENvbXBvbmVudHMgPSBuZXcgTWFwPHN0cmluZywgVHlwZTxhbnk+PigpO1xuICBwcml2YXRlIGVsZW1lbnRzTG9hZGluZyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPExhenlDbXBMb2FkZWRFdmVudD4+KCk7XG5cbiAgaW5qZWN0b3JzID0gbmV3IE1hcDxUeXBlPGFueT4sIEluamVjdG9yPigpO1xuICBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJzID0gbmV3IE1hcDxUeXBlPGFueT4sIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KExBWllfQ01QU19QQVRIX1RPS0VOKVxuICAgIG1vZHVsZVBhdGhzOiB7XG4gICAgICBzZWxlY3Rvcjogc3RyaW5nXG4gICAgfVtdLFxuICAgIHByaXZhdGUgY29tcGlsZXI6IENvbXBpbGVyLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yXG4gICkge1xuICAgIGNvbnN0IEVMRU1FTlRfTU9EVUxFX1BBVEhTID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICBtb2R1bGVQYXRocy5mb3JFYWNoKHJvdXRlID0+IHtcbiAgICAgIEVMRU1FTlRfTU9EVUxFX1BBVEhTLnNldChyb3V0ZS5zZWxlY3Rvciwgcm91dGUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jb21wb25lbnRzVG9Mb2FkID0gRUxFTUVOVF9NT0RVTEVfUEFUSFM7XG4gIH1cblxuICByZWNlaXZlQ29udGV4dChjb21wb25lbnQ6IFR5cGU8YW55PiwgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgdGhpcy5pbmplY3RvcnMuc2V0KGNvbXBvbmVudCwgaW5qZWN0b3IpO1xuICAgIHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVycy5zZXQoY29tcG9uZW50LCBpbmplY3Rvci5nZXQoQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyKSk7XG4gIH1cblxuICBnZXRJbmplY3Rvcihjb21wb25lbnQ6IFR5cGU8YW55Pik6IEluamVjdG9yIHtcbiAgICByZXR1cm4gdGhpcy5pbmplY3RvcnMuZ2V0KGNvbXBvbmVudCk7XG4gIH1cblxuICBnZXRDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIoY29tcG9uZW50OiBUeXBlPGFueT4pOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcnMuZ2V0KGNvbXBvbmVudCk7XG4gIH1cblxuICBnZXRDb21wb25lbnRzVG9Mb2FkKCkge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudHNUb0xvYWQ7XG4gIH1cblxuICBnZXRDb21wb25lbnRUb0xvYWQoc2VsZWN0b3I6IHN0cmluZyk6IE9ic2VydmFibGU8TGF6eUNtcExvYWRlZEV2ZW50PiB7XG4gICAgLy8gUmV0dXJucyBvYnNlcnZhYmxlIHRoYXQgY29tcGxldGVzIHdoZW4gdGhlIGxhenkgbW9kdWxlIGhhcyBiZWVuIGxvYWRlZC5cbiAgICBjb25zdCByZWdpc3RlcmVkID0gdGhpcy5sb2FkQ29tcG9uZW50KHNlbGVjdG9yKTtcbiAgICByZXR1cm4gZnJvbShyZWdpc3RlcmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgdG8gbGF6eSBsb2FkIGEgY29tcG9uZW50IGdpdmVuIGl0cyBzZWxlY3Rvci5cbiAgICogSWYgdGhlIGNvbXBvbmVudCBzZWxlY3RvciBoYXMgYmVlbiByZWdpc3RlcmVkLCBpdCdzIGFjY29yZGluZyBtb2R1bGVcbiAgICogd2lsbCBiZSBmZXRjaGVkIGxhemlseVxuICAgKiBAcGFyYW0gY29tcG9uZW50VGFnIHNlbGVjdG9yIG9mIHRoZSBjb21wb25lbnQgdG8gbG9hZFxuICAgKi9cbiAgbG9hZENvbXBvbmVudChjb21wb25lbnRTZWxlY3Rvcjogc3RyaW5nKTogUHJvbWlzZTxMYXp5Q21wTG9hZGVkRXZlbnQ+IHtcbiAgICBpZiAodGhpcy5lbGVtZW50c0xvYWRpbmcuaGFzKGNvbXBvbmVudFNlbGVjdG9yKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudHNMb2FkaW5nLmdldChjb21wb25lbnRTZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29tcG9uZW50c1RvTG9hZC5oYXMoY29tcG9uZW50U2VsZWN0b3IpKSB7XG4gICAgICBjb25zdCBjbXBSZWdpc3RyeUVudHJ5ID0gdGhpcy5jb21wb25lbnRzVG9Mb2FkLmdldChjb21wb25lbnRTZWxlY3Rvcik7XG4gICAgICBjb25zdCBwYXRoID0gY21wUmVnaXN0cnlFbnRyeS5sb2FkQ2hpbGRyZW47XG5cbiAgICAgIGNvbnN0IGxvYWRQcm9taXNlID0gbmV3IFByb21pc2U8TGF6eUNtcExvYWRlZEV2ZW50PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIChwYXRoKCkgYXMgUHJvbWlzZTxOZ01vZHVsZUZhY3Rvcnk8YW55PiB8IFR5cGU8YW55Pj4pXG4gICAgICAgICAgLnRoZW4oZWxlbWVudE1vZHVsZU9yRmFjdG9yeSA9PiB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFdpdGggVmlldyBFbmdpbmUsIHRoZSBOZ01vZHVsZSBmYWN0b3J5IGlzIGNyZWF0ZWQgYW5kIHByb3ZpZGVkIHdoZW4gbG9hZGVkLlxuICAgICAgICAgICAgICogV2l0aCBJdnksIG9ubHkgdGhlIE5nTW9kdWxlIGNsYXNzIGlzIHByb3ZpZGVkIGxvYWRlZCBhbmQgbXVzdCBiZSBjb21waWxlZC5cbiAgICAgICAgICAgICAqIFRoaXMgdXNlcyB0aGUgc2FtZSBtZWNoYW5pc20gYXMgdGhlIGRlcHJlY2F0ZWQgYFN5c3RlbUpzTmdNb2R1bGVMb2FkZXJgIGluXG4gICAgICAgICAgICAgKiBpbiBgcGFja2FnZXMvY29yZS9zcmMvbGlua2VyL3N5c3RlbV9qc19uZ19tb2R1bGVfZmFjdG9yeV9sb2FkZXIudHNgXG4gICAgICAgICAgICAgKiB0byBwYXNzIG9uIHRoZSBOZ01vZHVsZUZhY3RvcnksIG9yIGNvbXBpbGUgdGhlIE5nTW9kdWxlIGFuZCByZXR1cm4gaXRzIE5nTW9kdWxlRmFjdG9yeS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKGVsZW1lbnRNb2R1bGVPckZhY3RvcnkgaW5zdGFuY2VvZiBOZ01vZHVsZUZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRNb2R1bGVPckZhY3Rvcnk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVyLmNvbXBpbGVNb2R1bGVBc3luYyhlbGVtZW50TW9kdWxlT3JGYWN0b3J5KTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSBlcnJvclxuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuXG4gICAgICAgICAgICAgICAgLy8gYnJlYWsgdGhlIHByb21pc2UgY2hhaW5cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC50aGVuKG1vZHVsZUZhY3RvcnkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50TW9kdWxlUmVmID0gbW9kdWxlRmFjdG9yeS5jcmVhdGUodGhpcy5pbmplY3Rvcik7XG4gICAgICAgICAgICAgIGxldCBjb21wb25lbnRDbGFzcztcblxuICAgICAgICAgICAgICBpZiAodHlwZW9mIGVsZW1lbnRNb2R1bGVSZWYuaW5zdGFuY2UuY3VzdG9tRWxlbWVudENvbXBvbmVudCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRDbGFzcyA9IGVsZW1lbnRNb2R1bGVSZWYuaW5zdGFuY2UuY3VzdG9tRWxlbWVudENvbXBvbmVudFtjb21wb25lbnRTZWxlY3Rvcl07XG5cbiAgICAgICAgICAgICAgICBpZiAoIWNvbXBvbmVudENsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXN0cmluZy10aHJvd1xuICAgICAgICAgICAgICAgICAgdGhyb3cgYFlvdSBzcGVjaWZpZWQgbXVsdGlwbGUgY29tcG9uZW50IGVsZW1lbnRzIGluIG1vZHVsZSAke2VsZW1lbnRNb2R1bGVSZWZ9IGJ1dCB0aGVyZSB3YXMgbm8gbWF0Y2ggZm9yIHRhZ1xuICAgICAgICAgICAgICAgICAgICAgICAgJHtjb21wb25lbnRTZWxlY3Rvcn0gaW4gJHtKU09OLnN0cmluZ2lmeShlbGVtZW50TW9kdWxlUmVmLmluc3RhbmNlLmN1c3RvbUVsZW1lbnRDb21wb25lbnQpfS5cbiAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlIHN1cmUgdGhlIHNlbGVjdG9yIGluIHRoZSBtb2R1bGUgaXMgYWxpZ25lZCB3aXRoIHRoZSBvbmUgc3BlY2lmaWVkIGluIHRoZSBsYXp5IG1vZHVsZSBkZWZpbml0aW9uLmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudENsYXNzID0gZWxlbWVudE1vZHVsZVJlZi5pbnN0YW5jZS5jdXN0b21FbGVtZW50Q29tcG9uZW50O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gUmVnaXN0ZXIgaW5qZWN0b3Igb2YgdGhlIGxhenkgbW9kdWxlLlxuICAgICAgICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBzaGFyZSB0aGUgZW50cnlDb21wb25lbnRzIGJldHdlZW4gdGhlIGxhenkgbW9kdWxlIGFuZCB0aGUgYXBwbGljYXRpb25cbiAgICAgICAgICAgICAgY29uc3QgbW9kdWxlSW5qZWN0b3IgPSBlbGVtZW50TW9kdWxlUmVmLmluamVjdG9yO1xuICAgICAgICAgICAgICB0aGlzLnJlY2VpdmVDb250ZXh0KGNvbXBvbmVudENsYXNzLCBtb2R1bGVJbmplY3Rvcik7XG5cbiAgICAgICAgICAgICAgdGhpcy5sb2FkZWRDb21wb25lbnRzLnNldChjb21wb25lbnRTZWxlY3RvciwgY29tcG9uZW50Q2xhc3MpO1xuICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRzTG9hZGluZy5kZWxldGUoY29tcG9uZW50U2VsZWN0b3IpO1xuICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudHNUb0xvYWQuZGVsZXRlKGNvbXBvbmVudFNlbGVjdG9yKTtcblxuICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogY29tcG9uZW50U2VsZWN0b3IsXG4gICAgICAgICAgICAgICAgY29tcG9uZW50Q2xhc3NcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHNMb2FkaW5nLmRlbGV0ZShjb21wb25lbnRTZWxlY3Rvcik7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmVsZW1lbnRzTG9hZGluZy5zZXQoY29tcG9uZW50U2VsZWN0b3IsIGxvYWRQcm9taXNlKTtcbiAgICAgIHJldHVybiBsb2FkUHJvbWlzZTtcblxuICAgIH0gZWxzZSBpZiAodGhpcy5sb2FkZWRDb21wb25lbnRzLmhhcyhjb21wb25lbnRTZWxlY3RvcikpIHtcbiAgICAgIC8vIGNvbXBvbmVudCBhbHJlYWR5IGxvYWRlZFxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICBzZWxlY3RvcjogY29tcG9uZW50U2VsZWN0b3IsXG4gICAgICAgICAgY29tcG9uZW50Q2xhc3M6IHRoaXMubG9hZGVkQ29tcG9uZW50cy5nZXQoY29tcG9uZW50U2VsZWN0b3IpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVucmVjb2duaXplZCBjb21wb25lbnQgXCIke2NvbXBvbmVudFNlbGVjdG9yfVwiLiBNYWtlIHN1cmUgaXQgaXMgcmVnaXN0ZXJlZCBpbiB0aGUgY29tcG9uZW50IHJlZ2lzdHJ5YFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn0iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemRpZ2FtYmFyLW5neC1lbGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvbmd4LWVsZW1lbnQvc3JjL3pkaWdhbWJhci1uZ3gtZWxlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, ComponentFactoryResolver, NgModuleFactory, Injectable, Inject, ReflectiveInjector, ViewContainerRef, Component, Input, ViewChild, NgModule } from '@angular/core';
|
|
3
|
+
import { createCustomElement } from '@angular/elements';
|
|
4
|
+
import { from, merge } from 'rxjs';
|
|
5
|
+
import { map } from 'rxjs/operators';
|
|
6
|
+
|
|
7
|
+
/* Injection token to provide the element path modules. */
|
|
8
|
+
const LAZY_CMPS_PATH_TOKEN = new InjectionToken('ngx-lazy-cmp-registry');
|
|
9
|
+
|
|
10
|
+
class NgxElementService {
|
|
11
|
+
constructor(modulePaths, compiler, injector) {
|
|
12
|
+
this.compiler = compiler;
|
|
13
|
+
this.injector = injector;
|
|
14
|
+
this.loadedComponents = new Map();
|
|
15
|
+
this.elementsLoading = new Map();
|
|
16
|
+
this.injectors = new Map();
|
|
17
|
+
this.componentFactoryResolvers = new Map();
|
|
18
|
+
const ELEMENT_MODULE_PATHS = new Map();
|
|
19
|
+
modulePaths.forEach(route => {
|
|
20
|
+
ELEMENT_MODULE_PATHS.set(route.selector, route);
|
|
21
|
+
});
|
|
22
|
+
this.componentsToLoad = ELEMENT_MODULE_PATHS;
|
|
23
|
+
}
|
|
24
|
+
receiveContext(component, injector) {
|
|
25
|
+
this.injectors.set(component, injector);
|
|
26
|
+
this.componentFactoryResolvers.set(component, injector.get(ComponentFactoryResolver));
|
|
27
|
+
}
|
|
28
|
+
getInjector(component) {
|
|
29
|
+
return this.injectors.get(component);
|
|
30
|
+
}
|
|
31
|
+
getComponentFactoryResolver(component) {
|
|
32
|
+
return this.componentFactoryResolvers.get(component);
|
|
33
|
+
}
|
|
34
|
+
getComponentsToLoad() {
|
|
35
|
+
return this.componentsToLoad;
|
|
36
|
+
}
|
|
37
|
+
getComponentToLoad(selector) {
|
|
38
|
+
// Returns observable that completes when the lazy module has been loaded.
|
|
39
|
+
const registered = this.loadComponent(selector);
|
|
40
|
+
return from(registered);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Allows to lazy load a component given its selector.
|
|
44
|
+
* If the component selector has been registered, it's according module
|
|
45
|
+
* will be fetched lazily
|
|
46
|
+
* @param componentTag selector of the component to load
|
|
47
|
+
*/
|
|
48
|
+
loadComponent(componentSelector) {
|
|
49
|
+
if (this.elementsLoading.has(componentSelector)) {
|
|
50
|
+
return this.elementsLoading.get(componentSelector);
|
|
51
|
+
}
|
|
52
|
+
if (this.componentsToLoad.has(componentSelector)) {
|
|
53
|
+
const cmpRegistryEntry = this.componentsToLoad.get(componentSelector);
|
|
54
|
+
const path = cmpRegistryEntry.loadChildren;
|
|
55
|
+
const loadPromise = new Promise((resolve, reject) => {
|
|
56
|
+
path()
|
|
57
|
+
.then(elementModuleOrFactory => {
|
|
58
|
+
/**
|
|
59
|
+
* With View Engine, the NgModule factory is created and provided when loaded.
|
|
60
|
+
* With Ivy, only the NgModule class is provided loaded and must be compiled.
|
|
61
|
+
* This uses the same mechanism as the deprecated `SystemJsNgModuleLoader` in
|
|
62
|
+
* in `packages/core/src/linker/system_js_ng_module_factory_loader.ts`
|
|
63
|
+
* to pass on the NgModuleFactory, or compile the NgModule and return its NgModuleFactory.
|
|
64
|
+
*/
|
|
65
|
+
if (elementModuleOrFactory instanceof NgModuleFactory) {
|
|
66
|
+
return elementModuleOrFactory;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
try {
|
|
70
|
+
return this.compiler.compileModuleAsync(elementModuleOrFactory);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
// return the error
|
|
74
|
+
reject(err);
|
|
75
|
+
// break the promise chain
|
|
76
|
+
throw err;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
})
|
|
80
|
+
.then(moduleFactory => {
|
|
81
|
+
const elementModuleRef = moduleFactory.create(this.injector);
|
|
82
|
+
let componentClass;
|
|
83
|
+
if (typeof elementModuleRef.instance.customElementComponent === 'object') {
|
|
84
|
+
componentClass = elementModuleRef.instance.customElementComponent[componentSelector];
|
|
85
|
+
if (!componentClass) {
|
|
86
|
+
// tslint:disable-next-line: no-string-throw
|
|
87
|
+
throw `You specified multiple component elements in module ${elementModuleRef} but there was no match for tag
|
|
88
|
+
${componentSelector} in ${JSON.stringify(elementModuleRef.instance.customElementComponent)}.
|
|
89
|
+
Make sure the selector in the module is aligned with the one specified in the lazy module definition.`;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
componentClass = elementModuleRef.instance.customElementComponent;
|
|
94
|
+
}
|
|
95
|
+
// Register injector of the lazy module.
|
|
96
|
+
// This is needed to share the entryComponents between the lazy module and the application
|
|
97
|
+
const moduleInjector = elementModuleRef.injector;
|
|
98
|
+
this.receiveContext(componentClass, moduleInjector);
|
|
99
|
+
this.loadedComponents.set(componentSelector, componentClass);
|
|
100
|
+
this.elementsLoading.delete(componentSelector);
|
|
101
|
+
this.componentsToLoad.delete(componentSelector);
|
|
102
|
+
resolve({
|
|
103
|
+
selector: componentSelector,
|
|
104
|
+
componentClass
|
|
105
|
+
});
|
|
106
|
+
})
|
|
107
|
+
.catch(err => {
|
|
108
|
+
this.elementsLoading.delete(componentSelector);
|
|
109
|
+
return Promise.reject(err);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
this.elementsLoading.set(componentSelector, loadPromise);
|
|
113
|
+
return loadPromise;
|
|
114
|
+
}
|
|
115
|
+
else if (this.loadedComponents.has(componentSelector)) {
|
|
116
|
+
// component already loaded
|
|
117
|
+
return new Promise(resolve => {
|
|
118
|
+
resolve({
|
|
119
|
+
selector: componentSelector,
|
|
120
|
+
componentClass: this.loadedComponents.get(componentSelector)
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
throw new Error(`Unrecognized component "${componentSelector}". Make sure it is registered in the component registry`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
NgxElementService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxElementService, deps: [{ token: LAZY_CMPS_PATH_TOKEN }, { token: i0.Compiler }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
130
|
+
NgxElementService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxElementService, providedIn: 'root' });
|
|
131
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxElementService, decorators: [{
|
|
132
|
+
type: Injectable,
|
|
133
|
+
args: [{
|
|
134
|
+
providedIn: 'root'
|
|
135
|
+
}]
|
|
136
|
+
}], ctorParameters: function () {
|
|
137
|
+
return [{ type: undefined, decorators: [{
|
|
138
|
+
type: Inject,
|
|
139
|
+
args: [LAZY_CMPS_PATH_TOKEN]
|
|
140
|
+
}] }, { type: i0.Compiler }, { type: i0.Injector }];
|
|
141
|
+
} });
|
|
142
|
+
|
|
143
|
+
class NgxElementComponent {
|
|
144
|
+
constructor(ngxElementService, elementRef) {
|
|
145
|
+
this.ngxElementService = ngxElementService;
|
|
146
|
+
this.elementRef = elementRef;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Subscribe to event emitters of a lazy loaded and dynamically instantiated Angular component
|
|
150
|
+
* and dispatch them as Custom Events on the NgxElementComponent that is used in a template.
|
|
151
|
+
*/
|
|
152
|
+
setProxiedOutputs(factory) {
|
|
153
|
+
const eventEmitters = factory.outputs.map(({ propName, templateName }) => {
|
|
154
|
+
const emitter = this.componentRef.instance[propName];
|
|
155
|
+
return emitter.pipe(map((value) => ({ name: templateName, value })));
|
|
156
|
+
});
|
|
157
|
+
const outputEvents = merge(...eventEmitters);
|
|
158
|
+
this.ngElementEventsSubscription = outputEvents.subscribe(subscription => {
|
|
159
|
+
const customEvent = document.createEvent('CustomEvent');
|
|
160
|
+
customEvent.initCustomEvent(subscription.name, false, false, subscription.value);
|
|
161
|
+
this.elementRef.nativeElement.dispatchEvent(customEvent);
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
ngOnInit() {
|
|
165
|
+
this.ngxElementService.getComponentToLoad(this.selector).subscribe(event => {
|
|
166
|
+
this.componentToLoad = event.componentClass;
|
|
167
|
+
this.componentFactoryResolver = this.ngxElementService.getComponentFactoryResolver(this.componentToLoad);
|
|
168
|
+
this.injector = this.ngxElementService.getInjector(this.componentToLoad);
|
|
169
|
+
const attributes = this.getElementAttributes();
|
|
170
|
+
this.createComponent(attributes);
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
createComponent(attributes) {
|
|
174
|
+
this.container.clear();
|
|
175
|
+
const factory = this.componentFactoryResolver.resolveComponentFactory(this.componentToLoad);
|
|
176
|
+
this.refInjector = ReflectiveInjector.resolveAndCreate([{ provide: this.componentToLoad, useValue: this.componentToLoad }], this.injector);
|
|
177
|
+
this.componentRef = this.container.createComponent(factory, 0, this.refInjector);
|
|
178
|
+
this.setAttributes(attributes);
|
|
179
|
+
this.listenToAttributeChanges();
|
|
180
|
+
this.setProxiedOutputs(factory);
|
|
181
|
+
}
|
|
182
|
+
setAttributes(attributes) {
|
|
183
|
+
attributes.forEach(attr => {
|
|
184
|
+
this.componentRef.instance[attr.name] = attr.value;
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
getElementAttributes() {
|
|
188
|
+
const attrs = this.elementRef.nativeElement.attributes;
|
|
189
|
+
const attributes = [];
|
|
190
|
+
for (let attr, i = 0; i < attrs.length; i++) {
|
|
191
|
+
attr = attrs[i];
|
|
192
|
+
if (attr.nodeName.match('^data-')) {
|
|
193
|
+
attributes.push({
|
|
194
|
+
name: this.camelCaseAttribute(attr.nodeName),
|
|
195
|
+
value: attr.nodeValue
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return attributes;
|
|
200
|
+
}
|
|
201
|
+
camelCaseAttribute(attribute) {
|
|
202
|
+
const attr = attribute.replace('data-', '');
|
|
203
|
+
const chunks = attr.split('-');
|
|
204
|
+
if (chunks.length > 1) {
|
|
205
|
+
return chunks[0] + chunks.slice(1).map(chunk => chunk.replace(/^\w/, c => c.toUpperCase())).join('');
|
|
206
|
+
}
|
|
207
|
+
return attr;
|
|
208
|
+
}
|
|
209
|
+
listenToAttributeChanges() {
|
|
210
|
+
const observer = new MutationObserver(mutations => {
|
|
211
|
+
mutations.forEach(mutation => {
|
|
212
|
+
if (mutation.type === 'attributes') {
|
|
213
|
+
const attributes = this.getElementAttributes();
|
|
214
|
+
this.setAttributes(attributes);
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
observer.observe(this.elementRef.nativeElement, {
|
|
219
|
+
attributes: true
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
ngOnDestroy() {
|
|
223
|
+
this.componentRef.destroy();
|
|
224
|
+
this.ngElementEventsSubscription.unsubscribe();
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
NgxElementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxElementComponent, deps: [{ token: NgxElementService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
228
|
+
NgxElementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: NgxElementComponent, selector: "lib-ngx-element", inputs: { selector: "selector" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: `
|
|
229
|
+
<ng-template #container></ng-template>
|
|
230
|
+
`, isInline: true });
|
|
231
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxElementComponent, decorators: [{
|
|
232
|
+
type: Component,
|
|
233
|
+
args: [{ selector: 'lib-ngx-element', template: `
|
|
234
|
+
<ng-template #container></ng-template>
|
|
235
|
+
` }]
|
|
236
|
+
}], ctorParameters: function () { return [{ type: NgxElementService }, { type: i0.ElementRef }]; }, propDecorators: { selector: [{
|
|
237
|
+
type: Input
|
|
238
|
+
}], container: [{
|
|
239
|
+
type: ViewChild,
|
|
240
|
+
args: ['container', { read: ViewContainerRef }]
|
|
241
|
+
}] } });
|
|
242
|
+
|
|
243
|
+
class NgxElementModule {
|
|
244
|
+
constructor(injector) {
|
|
245
|
+
this.injector = injector;
|
|
246
|
+
const ngxElement = createCustomElement(NgxElementComponent, { injector });
|
|
247
|
+
customElements.define('ngx-element', ngxElement);
|
|
248
|
+
}
|
|
249
|
+
static forRoot(modulePaths) {
|
|
250
|
+
return {
|
|
251
|
+
ngModule: NgxElementModule,
|
|
252
|
+
providers: [
|
|
253
|
+
{
|
|
254
|
+
provide: LAZY_CMPS_PATH_TOKEN,
|
|
255
|
+
useValue: modulePaths
|
|
256
|
+
}
|
|
257
|
+
]
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
ngDoBootstrap() { }
|
|
261
|
+
}
|
|
262
|
+
NgxElementModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxElementModule, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.NgModule });
|
|
263
|
+
NgxElementModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: NgxElementModule, declarations: [NgxElementComponent] });
|
|
264
|
+
NgxElementModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxElementModule });
|
|
265
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxElementModule, decorators: [{
|
|
266
|
+
type: NgModule,
|
|
267
|
+
args: [{
|
|
268
|
+
declarations: [NgxElementComponent]
|
|
269
|
+
}]
|
|
270
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }]; } });
|
|
271
|
+
|
|
272
|
+
/*
|
|
273
|
+
* Public API Surface of ngx-element
|
|
274
|
+
*/
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Generated bundle index. Do not edit.
|
|
278
|
+
*/
|
|
279
|
+
|
|
280
|
+
export { NgxElementModule };
|
|
281
|
+
//# sourceMappingURL=zdigambar-ngx-element.mjs.map
|