@dotglitch/ngx-common 1.1.39 → 1.1.41
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.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AfterViewInit, OnChanges, OnDestroy, SimpleChanges, ViewContainerRef } from '@angular/core';
|
|
1
|
+
import { AfterViewInit, ApplicationRef, Injector, OnChanges, OnDestroy, SimpleChanges, Type, ViewContainerRef } from '@angular/core';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { ThemeService } from '../../services/theme.service';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
@@ -13,6 +13,24 @@ import * as i0 from "@angular/core";
|
|
|
13
13
|
export declare class ReactMagicWrapperComponent implements OnChanges, OnDestroy, AfterViewInit {
|
|
14
14
|
private ngContainer;
|
|
15
15
|
private ngTheme;
|
|
16
|
+
/**
|
|
17
|
+
* Wrap an angular component inside of a React memo object.
|
|
18
|
+
* Will attempt to bind @Input and @Output properties if provided,
|
|
19
|
+
* and will bind the react arguments directly as @Input properties.
|
|
20
|
+
*
|
|
21
|
+
* @experimental
|
|
22
|
+
* @param componentClass Angular component
|
|
23
|
+
* @param envInjector An `EnvironmentInjector` instance to be used for the component
|
|
24
|
+
* @param injector An `ElementInjector` instance
|
|
25
|
+
* @param _inputs
|
|
26
|
+
* @param _outputs
|
|
27
|
+
* @returns
|
|
28
|
+
*/
|
|
29
|
+
static WrapAngularComponent: (componentClass: Type<any>, appRef: Omit<ApplicationRef, '_runningTick'>, injector: Injector, _inputs?: {
|
|
30
|
+
[key: string]: any;
|
|
31
|
+
}, _outputs?: {
|
|
32
|
+
[key: string]: Function;
|
|
33
|
+
}, additionalChildren?: React.ReactNode[]) => React.NamedExoticComponent<object>;
|
|
16
34
|
/**
|
|
17
35
|
* The react component to be wrapped.
|
|
18
36
|
* ! Must be overridden for this wrapper to work
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
1
|
+
import { Component, createComponent } from '@angular/core';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { createRoot } from 'react-dom/client';
|
|
4
|
+
import { ulid } from 'ulidx';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
import * as i1 from "../../services/theme.service";
|
|
6
7
|
/**
|
|
@@ -12,6 +13,65 @@ import * as i1 from "../../services/theme.service";
|
|
|
12
13
|
* `override readonly ngReactComponent = ReactFlowWrappableComponent;`
|
|
13
14
|
*/
|
|
14
15
|
export class ReactMagicWrapperComponent {
|
|
16
|
+
/**
|
|
17
|
+
* Wrap an angular component inside of a React memo object.
|
|
18
|
+
* Will attempt to bind @Input and @Output properties if provided,
|
|
19
|
+
* and will bind the react arguments directly as @Input properties.
|
|
20
|
+
*
|
|
21
|
+
* @experimental
|
|
22
|
+
* @param componentClass Angular component
|
|
23
|
+
* @param envInjector An `EnvironmentInjector` instance to be used for the component
|
|
24
|
+
* @param injector An `ElementInjector` instance
|
|
25
|
+
* @param _inputs
|
|
26
|
+
* @param _outputs
|
|
27
|
+
* @returns
|
|
28
|
+
*/
|
|
29
|
+
static { this.WrapAngularComponent = (componentClass, appRef, injector, _inputs = {}, _outputs = {}, additionalChildren = []) => React.memo((args) => {
|
|
30
|
+
const id = ulid();
|
|
31
|
+
React.useEffect(() => {
|
|
32
|
+
const component = createComponent(componentClass, {
|
|
33
|
+
environmentInjector: appRef.injector,
|
|
34
|
+
elementInjector: injector,
|
|
35
|
+
hostElement: document.getElementById(id)
|
|
36
|
+
});
|
|
37
|
+
appRef.attachView(component.hostView);
|
|
38
|
+
// @ts-ignore
|
|
39
|
+
// component.hostView = hostView;
|
|
40
|
+
Object.assign(_inputs, args);
|
|
41
|
+
const { inputs, outputs } = componentClass['ɵcmp'];
|
|
42
|
+
// Returns a list of entries that need to be set
|
|
43
|
+
// This makes it so that unnecessary setters are not invoked.
|
|
44
|
+
const updated = Object.entries(inputs).filter(([parentKey, childKey]) => {
|
|
45
|
+
return component.instance[childKey] != _inputs[parentKey];
|
|
46
|
+
});
|
|
47
|
+
updated.forEach(([parentKey, childKey]) => {
|
|
48
|
+
if (_inputs.hasOwnProperty(parentKey))
|
|
49
|
+
component.instance[childKey] = _inputs[parentKey];
|
|
50
|
+
});
|
|
51
|
+
const outputSubscriptions = {};
|
|
52
|
+
// Get a list of unregistered outputs
|
|
53
|
+
const newOutputs = Object.entries(outputs).filter(([parentKey, childKey]) => {
|
|
54
|
+
return !outputSubscriptions[parentKey];
|
|
55
|
+
});
|
|
56
|
+
// Reverse bind via subscription
|
|
57
|
+
newOutputs.forEach(([parentKey, childKey]) => {
|
|
58
|
+
if (_outputs.hasOwnProperty(parentKey)) {
|
|
59
|
+
const target = component.instance[childKey];
|
|
60
|
+
const outputs = _outputs;
|
|
61
|
+
const sub = target.subscribe(outputs[parentKey]); // Subscription
|
|
62
|
+
outputSubscriptions[parentKey] = sub;
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
// Wrap the destroy method to safely release the subscriptions
|
|
66
|
+
const originalDestroy = component.onDestroy?.bind(component);
|
|
67
|
+
component.onDestroy = (cb) => {
|
|
68
|
+
Object.values(outputSubscriptions).forEach(s => s.unsubscribe());
|
|
69
|
+
originalDestroy?.(cb);
|
|
70
|
+
};
|
|
71
|
+
component.changeDetectorRef.detectChanges();
|
|
72
|
+
}, []);
|
|
73
|
+
return React.createElement('div', {}, React.createElement("div", { id }), ...additionalChildren);
|
|
74
|
+
}); }
|
|
15
75
|
constructor(ngContainer, ngTheme) {
|
|
16
76
|
this.ngContainer = ngContainer;
|
|
17
77
|
this.ngTheme = ngTheme;
|
|
@@ -68,4 +128,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
68
128
|
standalone: true
|
|
69
129
|
}]
|
|
70
130
|
}], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i1.ThemeService }] });
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtbWFnaWMtd3JhcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2NvbXBvbmVudHMvcmVhY3QtbWFnaWMtd3JhcHBlci9yZWFjdC1tYWdpYy13cmFwcGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBeUQsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLFVBQVUsRUFBUSxNQUFNLGtCQUFrQixDQUFDOzs7QUFJcEQ7Ozs7Ozs7R0FPRztBQU1ILE1BQU0sT0FBTywwQkFBMEI7SUFpQm5DLFlBQ1ksV0FBNkIsRUFDN0IsT0FBcUI7UUFEckIsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQzdCLFlBQU8sR0FBUCxPQUFPLENBQWM7UUFUekIsb0JBQWUsR0FBRztZQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZCLENBQUMsQ0FBQztTQUNMLENBQUM7SUFNRixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEVBQThFLENBQUMsQ0FBQztJQUN4RyxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXVCO1FBQy9CLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sT0FBTztRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsT0FBTztRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUVELG9EQUFvRDtRQUNwRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpFLHVDQUF1QztRQUN2QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkQsNENBQTRDO1FBQzVDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFckQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLDBDQUEwQztRQUMxQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFDLDJCQUEyQjtRQUMzQixvREFBb0Q7UUFDcEQsc0NBQXNDO1FBQ3RDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWpFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRixDQUFDOzhHQWpFUSwwQkFBMEI7a0dBQTFCLDBCQUEwQix3R0FIekIsRUFBRTs7MkZBR0gsMEJBQTBCO2tCQUx0QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx5QkFBeUI7b0JBQ25DLFFBQVEsRUFBRSxFQUFFO29CQUNaLFVBQVUsRUFBRSxJQUFJO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXMsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZVJvb3QsIFJvb3QgfSBmcm9tICdyZWFjdC1kb20vY2xpZW50JztcblxuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUuc2VydmljZSc7XG5cbi8qKlxuICogRXh0ZW5kIHRoaXMgY29tcG9uZW50IHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVcbiAqIGJpbmRpbmdzIHRvIGEgUmVhY3QgY29tcG9uZW50LlxuICpcbiAqICEgWW91IF9tdXN0XyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYG5nUmVhY3RDb21wb25lbnRgXG4gKiBGYWlsdXJlIHRvIGRvIHNvIHdpbGwgcmVzdWx0IGluIGVycm9yc1xuICogYG92ZXJyaWRlIHJlYWRvbmx5IG5nUmVhY3RDb21wb25lbnQgPSBSZWFjdEZsb3dXcmFwcGFibGVDb21wb25lbnQ7YFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1yZWFjdC1tYWdpYy13cmFwcGVyJyxcbiAgICB0ZW1wbGF0ZTogYGAsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBSZWFjdE1hZ2ljV3JhcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZWFjdCBjb21wb25lbnQgdG8gYmUgd3JhcHBlZC5cbiAgICAgKiAhIE11c3QgYmUgb3ZlcnJpZGRlbiBmb3IgdGhpcyB3cmFwcGVyIHRvIHdvcmtcbiAgICAgKi9cbiAgICBuZ1JlYWN0Q29tcG9uZW50OiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDxhbnk+IHwgUmVhY3QuQ29tcG9uZW50Q2xhc3M8YW55PiB8IHN0cmluZztcblxuICAgIHByaXZhdGUgX3Jvb3Q6IFJvb3Q7XG4gICAgcHVibGljIHRoZW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBuZ1N1YnNjcmlwdGlvbnMgPSBbXG4gICAgICAgIHRoaXMubmdUaGVtZS5zdWJzY3JpYmUodCA9PiB7XG4gICAgICAgICAgICB0aGlzLnRoZW1lID0gdDtcbiAgICAgICAgICAgIHRoaXMubmdPbkNoYW5nZXMoKTtcbiAgICAgICAgfSlcbiAgICBdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgbmdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgbmdUaGVtZTogVGhlbWVTZXJ2aWNlXG4gICAgKSB7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5uZ1JlYWN0Q29tcG9uZW50KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVhY3RNYWdpY1dyYXBwZXJDb21wb25lbnQgY2Fubm90IHN0YXJ0IHdpdGhvdXQgYSBwcm92aWRlZCBuZ1JlYWN0Q29tcG9uZW50IVwiKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzPzogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuX3JlbmRlcigpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9yb290LnVubW91bnQoKTtcbiAgICAgICAgdGhpcy5uZ1N1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVuZGVyKCkge1xuICAgICAgICBpZiAoIXRoaXMubmdSZWFjdENvbXBvbmVudCkgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMuX3Jvb3QpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSBjcmVhdGVSb290KHRoaXMubmdDb250YWluZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExpc3QgYWxsIGtleXMgdGhhdCBkbyBub3Qgc3RhcnQgd2l0aCBgX2Agbm9yIGBuZ2BcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpLmZpbHRlcihrID0+ICEvXig/Ol98bmcpLy50ZXN0KGspKTtcblxuICAgICAgICAvLyBHZXQgYWxsIHByb3BlcnR5IGtleXMgZnJvbSB0aGUgY2xhc3NcbiAgICAgICAgY29uc3QgcHJvcEtleXMgPSBrZXlzLmZpbHRlcihrID0+ICFrLnN0YXJ0c1dpdGgoXCJvblwiKSk7XG4gICAgICAgIC8vIEdldCBhbGwgZXZlbnQgaGFuZGxlciBrZXlzIGZyb20gdGhlIGNsYXNzXG4gICAgICAgIGNvbnN0IGV2dEtleXMgPSBrZXlzLmZpbHRlcihrID0+IGsuc3RhcnRzV2l0aChcIm9uXCIpKTtcblxuICAgICAgICBjb25zdCBwcm9wcyA9IHt9O1xuICAgICAgICAvLyBQcm9qZWN0IGFsbCBrZXkgcHJvcGVydGllcyBvbnRvIGBwcm9wc2BcbiAgICAgICAgcHJvcEtleXMuZm9yRWFjaChrID0+IHByb3BzW2tdID0gdGhpc1trXSk7XG5cbiAgICAgICAgLy8gQmluZCBhbGwgZXZlbnQgaGFuZGxlcnMuXG4gICAgICAgIC8vICEgaW1wb3J0YW50IEFuZ3VsYXIgdXNlcyBFdmVudEVtaXR0ZXIsIFJlYWN0IHVzZXNcbiAgICAgICAgLy8gYSBkaWZmZXJlbnQgbWV0aG9kIG9mIGV2ZW50IGJpbmRpbmdcbiAgICAgICAgZXZ0S2V5cy5mb3JFYWNoKGsgPT4gcHJvcHNba10gPSAoLi4uYXJncykgPT4gdGhpc1trXS5uZXh0KGFyZ3MpKTtcblxuICAgICAgICB0aGlzLl9yb290LnJlbmRlcihSZWFjdC5jcmVhdGVFbGVtZW50KHRoaXMubmdSZWFjdENvbXBvbmVudCwgeyBwcm9wczogcHJvcHMgYXMgYW55IH0pKTtcbiAgICB9XG59XG4iXX0=
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtbWFnaWMtd3JhcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2NvbXBvbmVudHMvcmVhY3QtbWFnaWMtd3JhcHBlci9yZWFjdC1tYWdpYy13cmFwcGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLFNBQVMsRUFBK0ksZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZPLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxVQUFVLEVBQVEsTUFBTSxrQkFBa0IsQ0FBQztBQUdwRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sT0FBTyxDQUFDOzs7QUFHN0I7Ozs7Ozs7R0FPRztBQU1ILE1BQU0sT0FBTywwQkFBMEI7SUFFbkM7Ozs7Ozs7Ozs7OztPQVlHO2FBQ0kseUJBQW9CLEdBQUcsQ0FDMUIsY0FBeUIsRUFDekIsTUFBNEMsRUFDNUMsUUFBa0IsRUFDbEIsVUFBa0MsRUFBRSxFQUNwQyxXQUF3QyxFQUFFLEVBQzFDLHFCQUF3QyxFQUFFLEVBQzVDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFFckIsTUFBTSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDbEIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDakIsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLGNBQWMsRUFBRTtnQkFDOUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLFFBQVE7Z0JBQ3BDLGVBQWUsRUFBRSxRQUFRO2dCQUN6QixXQUFXLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7YUFDM0MsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEMsYUFBYTtZQUNi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Q0FBQyxDQUFDLENBQUM7UUFDdkQsNENBQTRDO1FBQzVDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFckQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLDBDQUEwQztRQUMxQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFDLDJCQUEyQjtRQUMzQixvREFBb0Q7UUFDcEQsc0NBQXNDO1FBQ3RDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWpFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRixDQUFDOzhHQXJKUSwwQkFBMEI7a0dBQTFCLDBCQUEwQix3R0FIekIsRUFBRTs7MkZBR0gsMEJBQTBCO2tCQUx0QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx5QkFBeUI7b0JBQ25DLFFBQVEsRUFBRSxFQUFFO29CQUNaLFVBQVUsRUFBRSxJQUFJO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIEFwcGxpY2F0aW9uUmVmLCBDb21wb25lbnQsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgRW52aXJvbm1lbnRJbmplY3RvciwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXMsIFR5cGUsIFZpZXdDb250YWluZXJSZWYsIFZpZXdSZWYsIGNyZWF0ZUNvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3JlYXRlUm9vdCwgUm9vdCB9IGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnO1xuXG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZS5zZXJ2aWNlJztcbmltcG9ydCB7IHVsaWQgfSBmcm9tICd1bGlkeCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBFeHRlbmQgdGhpcyBjb21wb25lbnQgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZVxuICogYmluZGluZ3MgdG8gYSBSZWFjdCBjb21wb25lbnQuXG4gKlxuICogISBZb3UgX211c3RfIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBgbmdSZWFjdENvbXBvbmVudGBcbiAqIEZhaWx1cmUgdG8gZG8gc28gd2lsbCByZXN1bHQgaW4gZXJyb3JzXG4gKiBgb3ZlcnJpZGUgcmVhZG9ubHkgbmdSZWFjdENvbXBvbmVudCA9IFJlYWN0Rmxvd1dyYXBwYWJsZUNvbXBvbmVudDtgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLXJlYWN0LW1hZ2ljLXdyYXBwZXInLFxuICAgIHRlbXBsYXRlOiBgYCxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFJlYWN0TWFnaWNXcmFwcGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuXG4gICAgLyoqXG4gICAgICogV3JhcCBhbiBhbmd1bGFyIGNvbXBvbmVudCBpbnNpZGUgb2YgYSBSZWFjdCBtZW1vIG9iamVjdC5cbiAgICAgKiBXaWxsIGF0dGVtcHQgdG8gYmluZCBASW5wdXQgYW5kIEBPdXRwdXQgcHJvcGVydGllcyBpZiBwcm92aWRlZCxcbiAgICAgKiBhbmQgd2lsbCBiaW5kIHRoZSByZWFjdCBhcmd1bWVudHMgZGlyZWN0bHkgYXMgQElucHV0IHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBAZXhwZXJpbWVudGFsXG4gICAgICogQHBhcmFtIGNvbXBvbmVudENsYXNzIEFuZ3VsYXIgY29tcG9uZW50XG4gICAgICogQHBhcmFtIGVudkluamVjdG9yICAgIEFuIGBFbnZpcm9ubWVudEluamVjdG9yYCBpbnN0YW5jZSB0byBiZSB1c2VkIGZvciB0aGUgY29tcG9uZW50XG4gICAgICogQHBhcmFtIGluamVjdG9yICAgICAgIEFuIGBFbGVtZW50SW5qZWN0b3JgIGluc3RhbmNlXG4gICAgICogQHBhcmFtIF9pbnB1dHNcbiAgICAgKiBAcGFyYW0gX291dHB1dHNcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBXcmFwQW5ndWxhckNvbXBvbmVudCA9IChcbiAgICAgICAgY29tcG9uZW50Q2xhc3M6IFR5cGU8YW55PixcbiAgICAgICAgYXBwUmVmOiBPbWl0PEFwcGxpY2F0aW9uUmVmLCAnX3J1bm5pbmdUaWNrJz4sXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgX2lucHV0czogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9LFxuICAgICAgICBfb3V0cHV0czogeyBba2V5OiBzdHJpbmddOiBGdW5jdGlvbiB9ID0ge30sXG4gICAgICAgIGFkZGl0aW9uYWxDaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlW10gPSBbXVxuICAgICkgPT4gUmVhY3QubWVtbygoYXJncykgPT4ge1xuXG4gICAgICAgIGNvbnN0IGlkID0gdWxpZCgpO1xuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudENsYXNzLCB7XG4gICAgICAgICAgICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogYXBwUmVmLmluamVjdG9yLFxuICAgICAgICAgICAgICAgIGVsZW1lbnRJbmplY3RvcjogaW5qZWN0b3IsXG4gICAgICAgICAgICAgICAgaG9zdEVsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFwcFJlZi5hdHRhY2hWaWV3KGNvbXBvbmVudC5ob3N0Vmlldyk7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAvLyBjb21wb25lbnQuaG9zdFZpZXcgPSBob3N0VmlldztcblxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihfaW5wdXRzLCBhcmdzKTtcblxuICAgICAgICAgICAgY29uc3QgeyBpbnB1dHMsIG91dHB1dHMgfSA9IGNvbXBvbmVudENsYXNzWyfJtWNtcCddO1xuXG4gICAgICAgICAgICAvLyBSZXR1cm5zIGEgbGlzdCBvZiBlbnRyaWVzIHRoYXQgbmVlZCB0byBiZSBzZXRcbiAgICAgICAgICAgIC8vIFRoaXMgbWFrZXMgaXQgc28gdGhhdCB1bm5lY2Vzc2FyeSBzZXR0ZXJzIGFyZSBub3QgaW52b2tlZC5cbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSBPYmplY3QuZW50cmllcyhpbnB1dHMpLmZpbHRlcigoW3BhcmVudEtleSwgY2hpbGRLZXldOiBbc3RyaW5nLCBzdHJpbmddKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5pbnN0YW5jZVtjaGlsZEtleV0gIT0gX2lucHV0c1twYXJlbnRLZXldO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHVwZGF0ZWQuZm9yRWFjaCgoW3BhcmVudEtleSwgY2hpbGRLZXldOiBbc3RyaW5nLCBzdHJpbmddKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKF9pbnB1dHMuaGFzT3duUHJvcGVydHkocGFyZW50S2V5KSlcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50Lmluc3RhbmNlW2NoaWxkS2V5XSA9IF9pbnB1dHNbcGFyZW50S2V5XTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBvdXRwdXRTdWJzY3JpcHRpb25zOiB7IFtrZXk6IHN0cmluZ106IFN1YnNjcmlwdGlvbiB9ID0ge307XG4gICAgICAgICAgICAvLyBHZXQgYSBsaXN0IG9mIHVucmVnaXN0ZXJlZCBvdXRwdXRzXG4gICAgICAgICAgICBjb25zdCBuZXdPdXRwdXRzID0gT2JqZWN0LmVudHJpZXMob3V0cHV0cykuZmlsdGVyKChbcGFyZW50S2V5LCBjaGlsZEtleV06IFtzdHJpbmcsIHN0cmluZ10pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIW91dHB1dFN1YnNjcmlwdGlvbnNbcGFyZW50S2V5XTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBSZXZlcnNlIGJpbmQgdmlhIHN1YnNjcmlwdGlvblxuICAgICAgICAgICAgbmV3T3V0cHV0cy5mb3JFYWNoKChbcGFyZW50S2V5LCBjaGlsZEtleV06IFtzdHJpbmcsIHN0cmluZ10pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoX291dHB1dHMuaGFzT3duUHJvcGVydHkocGFyZW50S2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQ6IEV2ZW50RW1pdHRlcjx1bmtub3duPiA9IGNvbXBvbmVudC5pbnN0YW5jZVtjaGlsZEtleV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dHMgPSBfb3V0cHV0cztcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWIgPSB0YXJnZXQuc3Vic2NyaWJlKG91dHB1dHNbcGFyZW50S2V5XSk7IC8vIFN1YnNjcmlwdGlvblxuXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFN1YnNjcmlwdGlvbnNbcGFyZW50S2V5XSA9IHN1YjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gV3JhcCB0aGUgZGVzdHJveSBtZXRob2QgdG8gc2FmZWx5IHJlbGVhc2UgdGhlIHN1YnNjcmlwdGlvbnNcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGVzdHJveSA9IGNvbXBvbmVudC5vbkRlc3Ryb3k/LmJpbmQoY29tcG9uZW50KTtcbiAgICAgICAgICAgIGNvbXBvbmVudC5vbkRlc3Ryb3kgPSAoY2IpID0+IHtcbiAgICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKG91dHB1dFN1YnNjcmlwdGlvbnMpLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsRGVzdHJveT8uKGNiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29tcG9uZW50LmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KCdkaXYnLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgaWQgfSksXG4gICAgICAgICAgICAuLi5hZGRpdGlvbmFsQ2hpbGRyZW5cbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZWFjdCBjb21wb25lbnQgdG8gYmUgd3JhcHBlZC5cbiAgICAgKiAhIE11c3QgYmUgb3ZlcnJpZGRlbiBmb3IgdGhpcyB3cmFwcGVyIHRvIHdvcmtcbiAgICAgKi9cbiAgICBuZ1JlYWN0Q29tcG9uZW50OiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDxhbnk+IHwgUmVhY3QuQ29tcG9uZW50Q2xhc3M8YW55PiB8IHN0cmluZztcblxuICAgIHByaXZhdGUgX3Jvb3Q6IFJvb3Q7XG4gICAgcHVibGljIHRoZW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBuZ1N1YnNjcmlwdGlvbnMgPSBbXG4gICAgICAgIHRoaXMubmdUaGVtZS5zdWJzY3JpYmUodCA9PiB7XG4gICAgICAgICAgICB0aGlzLnRoZW1lID0gdDtcbiAgICAgICAgICAgIHRoaXMubmdPbkNoYW5nZXMoKTtcbiAgICAgICAgfSlcbiAgICBdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgbmdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgbmdUaGVtZTogVGhlbWVTZXJ2aWNlXG4gICAgKSB7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5uZ1JlYWN0Q29tcG9uZW50KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVhY3RNYWdpY1dyYXBwZXJDb21wb25lbnQgY2Fubm90IHN0YXJ0IHdpdGhvdXQgYSBwcm92aWRlZCBuZ1JlYWN0Q29tcG9uZW50IVwiKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzPzogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuX3JlbmRlcigpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9yb290LnVubW91bnQoKTtcbiAgICAgICAgdGhpcy5uZ1N1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVuZGVyKCkge1xuICAgICAgICBpZiAoIXRoaXMubmdSZWFjdENvbXBvbmVudCkgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMuX3Jvb3QpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSBjcmVhdGVSb290KHRoaXMubmdDb250YWluZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExpc3QgYWxsIGtleXMgdGhhdCBkbyBub3Qgc3RhcnQgd2l0aCBgX2Agbm9yIGBuZ2BcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpLmZpbHRlcihrID0+ICEvXig/Ol98bmcpLy50ZXN0KGspKTtcblxuICAgICAgICAvLyBHZXQgYWxsIHByb3BlcnR5IGtleXMgZnJvbSB0aGUgY2xhc3NcbiAgICAgICAgY29uc3QgcHJvcEtleXMgPSBrZXlzLmZpbHRlcihrID0+ICFrLnN0YXJ0c1dpdGgoXCJvblwiKSk7XG4gICAgICAgIC8vIEdldCBhbGwgZXZlbnQgaGFuZGxlciBrZXlzIGZyb20gdGhlIGNsYXNzXG4gICAgICAgIGNvbnN0IGV2dEtleXMgPSBrZXlzLmZpbHRlcihrID0+IGsuc3RhcnRzV2l0aChcIm9uXCIpKTtcblxuICAgICAgICBjb25zdCBwcm9wcyA9IHt9O1xuICAgICAgICAvLyBQcm9qZWN0IGFsbCBrZXkgcHJvcGVydGllcyBvbnRvIGBwcm9wc2BcbiAgICAgICAgcHJvcEtleXMuZm9yRWFjaChrID0+IHByb3BzW2tdID0gdGhpc1trXSk7XG5cbiAgICAgICAgLy8gQmluZCBhbGwgZXZlbnQgaGFuZGxlcnMuXG4gICAgICAgIC8vICEgaW1wb3J0YW50IEFuZ3VsYXIgdXNlcyBFdmVudEVtaXR0ZXIsIFJlYWN0IHVzZXNcbiAgICAgICAgLy8gYSBkaWZmZXJlbnQgbWV0aG9kIG9mIGV2ZW50IGJpbmRpbmdcbiAgICAgICAgZXZ0S2V5cy5mb3JFYWNoKGsgPT4gcHJvcHNba10gPSAoLi4uYXJncykgPT4gdGhpc1trXS5uZXh0KGFyZ3MpKTtcblxuICAgICAgICB0aGlzLl9yb290LnJlbmRlcihSZWFjdC5jcmVhdGVFbGVtZW50KHRoaXMubmdSZWFjdENvbXBvbmVudCwgeyBwcm9wczogcHJvcHMgYXMgYW55IH0pKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { TemplateRef, Component, Optional, Inject, Input, HostListener, Directive, InjectionToken, Pipe, Injectable, EventEmitter, isDevMode, ViewContainerRef, ViewChild, Output, NgModule, ViewEncapsulation, SecurityContext, ContentChild, ViewChildren } from '@angular/core';
|
|
2
|
+
import { TemplateRef, Component, Optional, Inject, Input, HostListener, Directive, InjectionToken, Pipe, Injectable, EventEmitter, isDevMode, ViewContainerRef, ViewChild, Output, NgModule, ViewEncapsulation, SecurityContext, ContentChild, ViewChildren, createComponent } from '@angular/core';
|
|
3
3
|
import * as i1$1 from '@angular/material/dialog';
|
|
4
4
|
import { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';
|
|
5
5
|
import { NgTemplateOutlet, NgComponentOutlet, DOCUMENT, NgIf, NgForOf, DatePipe } from '@angular/common';
|
|
@@ -11597,6 +11597,65 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
11597
11597
|
* `override readonly ngReactComponent = ReactFlowWrappableComponent;`
|
|
11598
11598
|
*/
|
|
11599
11599
|
class ReactMagicWrapperComponent {
|
|
11600
|
+
/**
|
|
11601
|
+
* Wrap an angular component inside of a React memo object.
|
|
11602
|
+
* Will attempt to bind @Input and @Output properties if provided,
|
|
11603
|
+
* and will bind the react arguments directly as @Input properties.
|
|
11604
|
+
*
|
|
11605
|
+
* @experimental
|
|
11606
|
+
* @param componentClass Angular component
|
|
11607
|
+
* @param envInjector An `EnvironmentInjector` instance to be used for the component
|
|
11608
|
+
* @param injector An `ElementInjector` instance
|
|
11609
|
+
* @param _inputs
|
|
11610
|
+
* @param _outputs
|
|
11611
|
+
* @returns
|
|
11612
|
+
*/
|
|
11613
|
+
static { this.WrapAngularComponent = (componentClass, appRef, injector, _inputs = {}, _outputs = {}, additionalChildren = []) => React.memo((args) => {
|
|
11614
|
+
const id = ulid();
|
|
11615
|
+
React.useEffect(() => {
|
|
11616
|
+
const component = createComponent(componentClass, {
|
|
11617
|
+
environmentInjector: appRef.injector,
|
|
11618
|
+
elementInjector: injector,
|
|
11619
|
+
hostElement: document.getElementById(id)
|
|
11620
|
+
});
|
|
11621
|
+
appRef.attachView(component.hostView);
|
|
11622
|
+
// @ts-ignore
|
|
11623
|
+
// component.hostView = hostView;
|
|
11624
|
+
Object.assign(_inputs, args);
|
|
11625
|
+
const { inputs, outputs } = componentClass['ɵcmp'];
|
|
11626
|
+
// Returns a list of entries that need to be set
|
|
11627
|
+
// This makes it so that unnecessary setters are not invoked.
|
|
11628
|
+
const updated = Object.entries(inputs).filter(([parentKey, childKey]) => {
|
|
11629
|
+
return component.instance[childKey] != _inputs[parentKey];
|
|
11630
|
+
});
|
|
11631
|
+
updated.forEach(([parentKey, childKey]) => {
|
|
11632
|
+
if (_inputs.hasOwnProperty(parentKey))
|
|
11633
|
+
component.instance[childKey] = _inputs[parentKey];
|
|
11634
|
+
});
|
|
11635
|
+
const outputSubscriptions = {};
|
|
11636
|
+
// Get a list of unregistered outputs
|
|
11637
|
+
const newOutputs = Object.entries(outputs).filter(([parentKey, childKey]) => {
|
|
11638
|
+
return !outputSubscriptions[parentKey];
|
|
11639
|
+
});
|
|
11640
|
+
// Reverse bind via subscription
|
|
11641
|
+
newOutputs.forEach(([parentKey, childKey]) => {
|
|
11642
|
+
if (_outputs.hasOwnProperty(parentKey)) {
|
|
11643
|
+
const target = component.instance[childKey];
|
|
11644
|
+
const outputs = _outputs;
|
|
11645
|
+
const sub = target.subscribe(outputs[parentKey]); // Subscription
|
|
11646
|
+
outputSubscriptions[parentKey] = sub;
|
|
11647
|
+
}
|
|
11648
|
+
});
|
|
11649
|
+
// Wrap the destroy method to safely release the subscriptions
|
|
11650
|
+
const originalDestroy = component.onDestroy?.bind(component);
|
|
11651
|
+
component.onDestroy = (cb) => {
|
|
11652
|
+
Object.values(outputSubscriptions).forEach(s => s.unsubscribe());
|
|
11653
|
+
originalDestroy?.(cb);
|
|
11654
|
+
};
|
|
11655
|
+
component.changeDetectorRef.detectChanges();
|
|
11656
|
+
}, []);
|
|
11657
|
+
return React.createElement('div', {}, React.createElement("div", { id }), ...additionalChildren);
|
|
11658
|
+
}); }
|
|
11600
11659
|
constructor(ngContainer, ngTheme) {
|
|
11601
11660
|
this.ngContainer = ngContainer;
|
|
11602
11661
|
this.ngTheme = ngTheme;
|