@memberjunction/ng-skip-chat 2.76.0 → 2.77.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/dist/lib/base-managed-component.d.ts +39 -0
- package/dist/lib/base-managed-component.d.ts.map +1 -0
- package/dist/lib/base-managed-component.js +62 -0
- package/dist/lib/base-managed-component.js.map +1 -0
- package/dist/lib/dynamic-report/base-report.d.ts.map +1 -1
- package/dist/lib/dynamic-report/base-report.js +12 -3
- package/dist/lib/dynamic-report/base-report.js.map +1 -1
- package/dist/lib/dynamic-report/dynamic-ui-component.d.ts +4 -3
- package/dist/lib/dynamic-report/dynamic-ui-component.d.ts.map +1 -1
- package/dist/lib/dynamic-report/dynamic-ui-component.js +52 -53
- package/dist/lib/dynamic-report/dynamic-ui-component.js.map +1 -1
- package/dist/lib/report-cache.d.ts +1 -0
- package/dist/lib/report-cache.d.ts.map +1 -1
- package/dist/lib/report-cache.js +34 -20
- package/dist/lib/report-cache.js.map +1 -1
- package/dist/lib/skip-chat/skip-chat.component.d.ts +2 -2
- package/dist/lib/skip-chat/skip-chat.component.d.ts.map +1 -1
- package/dist/lib/skip-chat/skip-chat.component.js +31 -31
- package/dist/lib/skip-chat/skip-chat.component.js.map +1 -1
- package/package.json +15 -15
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { OnDestroy } from '@angular/core';
|
|
2
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Base class for Angular components that provides automatic resource cleanup.
|
|
6
|
+
* Uses React Runtime's resource manager for centralized management.
|
|
7
|
+
*/
|
|
8
|
+
export declare abstract class BaseManagedComponent extends BaseAngularComponent implements OnDestroy {
|
|
9
|
+
protected componentId: string;
|
|
10
|
+
constructor();
|
|
11
|
+
/**
|
|
12
|
+
* Wrapper for setTimeout that automatically tracks and cleans up timeouts
|
|
13
|
+
*/
|
|
14
|
+
protected setTimeout(callback: () => void, delay: number, metadata?: Record<string, any>): number;
|
|
15
|
+
/**
|
|
16
|
+
* Wrapper for setInterval that automatically tracks and cleans up intervals
|
|
17
|
+
*/
|
|
18
|
+
protected setInterval(callback: () => void, delay: number, metadata?: Record<string, any>): number;
|
|
19
|
+
/**
|
|
20
|
+
* Clear a specific timeout
|
|
21
|
+
*/
|
|
22
|
+
protected clearTimeout(id: number): void;
|
|
23
|
+
/**
|
|
24
|
+
* Clear a specific interval
|
|
25
|
+
*/
|
|
26
|
+
protected clearInterval(id: number): void;
|
|
27
|
+
/**
|
|
28
|
+
* Register an event listener with automatic cleanup
|
|
29
|
+
*/
|
|
30
|
+
protected addEventListener(target: EventTarget, type: string, listener: EventListener, options?: AddEventListenerOptions): void;
|
|
31
|
+
/**
|
|
32
|
+
* Register a cleanup callback to be called on component destroy
|
|
33
|
+
*/
|
|
34
|
+
protected registerCleanup(cleanup: () => void): void;
|
|
35
|
+
ngOnDestroy(): void;
|
|
36
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BaseManagedComponent, never>;
|
|
37
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BaseManagedComponent, never, never, {}, {}, never, never, false, never>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=base-managed-component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-managed-component.d.ts","sourceRoot":"","sources":["../../src/lib/base-managed-component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAErE;;;GAGG;AACH,8BACsB,oBAAqB,SAAQ,oBAAqB,YAAW,SAAS;IACxF,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;;IAQ9B;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;IAIjG;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;IAIlG;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIzC;;OAEG;IACH,SAAS,CAAC,gBAAgB,CACtB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,uBAAuB,GAClC,IAAI;IAIP;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAIpD,WAAW,IAAI,IAAI;yCAxDD,oBAAoB;2CAApB,oBAAoB;CA4DzC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Directive } from '@angular/core';
|
|
2
|
+
import { resourceManager } from '@memberjunction/react-runtime';
|
|
3
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* Base class for Angular components that provides automatic resource cleanup.
|
|
7
|
+
* Uses React Runtime's resource manager for centralized management.
|
|
8
|
+
*/
|
|
9
|
+
export class BaseManagedComponent extends BaseAngularComponent {
|
|
10
|
+
componentId;
|
|
11
|
+
constructor() {
|
|
12
|
+
super();
|
|
13
|
+
// Generate unique component ID for resource tracking
|
|
14
|
+
this.componentId = `${this.constructor.name}-${Date.now()}-${Math.random()}`;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Wrapper for setTimeout that automatically tracks and cleans up timeouts
|
|
18
|
+
*/
|
|
19
|
+
setTimeout(callback, delay, metadata) {
|
|
20
|
+
return resourceManager.setTimeout(this.componentId, callback, delay, metadata);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Wrapper for setInterval that automatically tracks and cleans up intervals
|
|
24
|
+
*/
|
|
25
|
+
setInterval(callback, delay, metadata) {
|
|
26
|
+
return resourceManager.setInterval(this.componentId, callback, delay, metadata);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Clear a specific timeout
|
|
30
|
+
*/
|
|
31
|
+
clearTimeout(id) {
|
|
32
|
+
resourceManager.clearTimeout(this.componentId, id);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Clear a specific interval
|
|
36
|
+
*/
|
|
37
|
+
clearInterval(id) {
|
|
38
|
+
resourceManager.clearInterval(this.componentId, id);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Register an event listener with automatic cleanup
|
|
42
|
+
*/
|
|
43
|
+
addEventListener(target, type, listener, options) {
|
|
44
|
+
resourceManager.addEventListener(this.componentId, target, type, listener, options);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Register a cleanup callback to be called on component destroy
|
|
48
|
+
*/
|
|
49
|
+
registerCleanup(cleanup) {
|
|
50
|
+
resourceManager.registerCleanup(this.componentId, cleanup);
|
|
51
|
+
}
|
|
52
|
+
ngOnDestroy() {
|
|
53
|
+
// Clean up all resources associated with this component
|
|
54
|
+
resourceManager.cleanupComponent(this.componentId);
|
|
55
|
+
}
|
|
56
|
+
static ɵfac = function BaseManagedComponent_Factory(t) { return new (t || BaseManagedComponent)(); };
|
|
57
|
+
static ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: BaseManagedComponent, features: [i0.ɵɵInheritDefinitionFeature] });
|
|
58
|
+
}
|
|
59
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BaseManagedComponent, [{
|
|
60
|
+
type: Directive
|
|
61
|
+
}], () => [], null); })();
|
|
62
|
+
//# sourceMappingURL=base-managed-component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-managed-component.js","sourceRoot":"","sources":["../../src/lib/base-managed-component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAErE;;;GAGG;AAEH,MAAM,OAAgB,oBAAqB,SAAQ,oBAAoB;IACzD,WAAW,CAAS;IAE9B;QACI,KAAK,EAAE,CAAC;QACR,qDAAqD;QACrD,IAAI,CAAC,WAAW,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;IACjF,CAAC;IAED;;OAEG;IACO,UAAU,CAAC,QAAoB,EAAE,KAAa,EAAE,QAA8B;QACpF,OAAO,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACnF,CAAC;IAED;;OAEG;IACO,WAAW,CAAC,QAAoB,EAAE,KAAa,EAAE,QAA8B;QACrF,OAAO,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpF,CAAC;IAED;;OAEG;IACO,YAAY,CAAC,EAAU;QAC7B,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACO,aAAa,CAAC,EAAU;QAC9B,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACO,gBAAgB,CACtB,MAAmB,EACnB,IAAY,EACZ,QAAuB,EACvB,OAAiC;QAEjC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxF,CAAC;IAED;;OAEG;IACO,eAAe,CAAC,OAAmB;QACzC,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED,WAAW;QACP,wDAAwD;QACxD,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC;8EA3DiB,oBAAoB;6DAApB,oBAAoB;;iFAApB,oBAAoB;cADzC,SAAS"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-report.d.ts","sourceRoot":"","sources":["../../../src/lib/dynamic-report/base-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAwB,YAAY,EAAyB,MAAM,eAAe,CAAC;AAE5H,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAG3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAmB,+BAA+B,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE9G,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;;
|
|
1
|
+
{"version":3,"file":"base-report.d.ts","sourceRoot":"","sources":["../../../src/lib/dynamic-report/base-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAwB,YAAY,EAAyB,MAAM,eAAe,CAAC;AAE5H,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAG3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAmB,+BAA+B,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE9G,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;;AAGnD,8BACsB,qBAAuB,SAAQ,oBAAqB,YAAW,aAAa;IA4BpF,SAAS,CAAC,KAAK,EAAE,iBAAiB;IA3BrC,QAAQ,EAAE,+BAA+B,GAAG,SAAS,CAAC;IACtD,sBAAsB,EAAE,OAAO,CAAS;IACxC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IACrC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACvC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC3C,WAAW,EAAG,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;IAE3B,gBAAgB;iBAA8B,MAAM;eAAS,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM;;OAAyB;IAEjJ;;;OAGG;IACO,wBAAwB,uBAA8B;IAEhE;;OAEG;IACO,gBAAgB,uBAA8B;IAExD;;OAEG;IACO,cAAc,8BAAqC;gBAGvC,KAAK,EAAE,iBAAiB;IAI9C,eAAe;IAKR,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACvC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEhD,OAAO,CAAC,MAAM,CAAC,YAAY,CAIxB;IACH,OAAO,CAAC,OAAO,CAAkB;IACpB,qBAAqB;IAoC3B,oBAAoB,CAAC,aAAa,EAAE,aAAa;IAKxD,IAAW,OAAO,IAAI,cAAc,EAAE,CAErC;IAED,SAAS,KAAK,UAAU,IAAI,MAAM,CAWjC;IACD,IAAW,OAAO,IAAI,OAAO,CAE5B;IACD,IAAW,OAAO,IAAI,OAAO,CAE5B;IACD,IAAW,aAAa,IAAI,OAAO,CAElC;IAED;;;OAGG;IACI,kBAAkB,IAAI,MAAM;IASnC;;OAEG;IACH,IAAW,gBAAgB,IAAI,OAAO,CAErC;IACD,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAS;IAE7C;;OAEG;IACU,cAAc;IA2B3B,SAAS,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAI7H;;OAEG;cACa,uBAAuB,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAyBpI;;;OAGG;IACU,eAAe;yCAxMR,qBAAqB;2CAArB,qBAAqB;CA+Q1C"}
|
|
@@ -3,6 +3,7 @@ import { LogError } from "@memberjunction/core";
|
|
|
3
3
|
import { ConvertMarkdownStringToHtmlList } from "@memberjunction/global";
|
|
4
4
|
import { BaseAngularComponent } from "@memberjunction/ng-base-types";
|
|
5
5
|
import { SkipConversationReportCache } from "../report-cache";
|
|
6
|
+
import { CacheManager } from '@memberjunction/react-runtime';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
export class SkipDynamicReportBase extends BaseAngularComponent {
|
|
8
9
|
cdRef;
|
|
@@ -36,7 +37,12 @@ export class SkipDynamicReportBase extends BaseAngularComponent {
|
|
|
36
37
|
}
|
|
37
38
|
matchingReportID = null;
|
|
38
39
|
matchingReportName = null;
|
|
39
|
-
|
|
40
|
+
// Use CacheManager with TTL and size limits instead of unbounded static array
|
|
41
|
+
static _reportCache = new CacheManager({
|
|
42
|
+
maxSize: 100, // Maximum 100 report entries
|
|
43
|
+
defaultTTL: 30 * 60 * 1000, // 30 minute TTL
|
|
44
|
+
maxMemory: 1 * 1024 * 1024 // 1MB max memory
|
|
45
|
+
});
|
|
40
46
|
_loaded = false;
|
|
41
47
|
async RefreshMatchingReport() {
|
|
42
48
|
if (this.SkipData && !this._loaded && this.ConversationDetailID && this.ConversationID) {
|
|
@@ -44,7 +50,9 @@ export class SkipDynamicReportBase extends BaseAngularComponent {
|
|
|
44
50
|
if (this.ShowCreateReportButton) {
|
|
45
51
|
// check to see if a report has been created that is linked to this ConvoID/ConvoDetailID
|
|
46
52
|
// if so don't allow the user to create another report, show a link to the existing one
|
|
47
|
-
|
|
53
|
+
// Create cache key from conversation and detail IDs
|
|
54
|
+
const cacheKey = `${this.ConversationID}_${this.ConversationDetailID}`;
|
|
55
|
+
const cachedItem = SkipDynamicReportBase._reportCache.get(cacheKey);
|
|
48
56
|
if (cachedItem) {
|
|
49
57
|
this.matchingReportID = cachedItem.reportId;
|
|
50
58
|
this.matchingReportName = cachedItem.reportName;
|
|
@@ -58,7 +66,8 @@ export class SkipDynamicReportBase extends BaseAngularComponent {
|
|
|
58
66
|
this.matchingReportID = item.ID;
|
|
59
67
|
this.matchingReportName = item.Name;
|
|
60
68
|
// cache for future to avoid db call
|
|
61
|
-
|
|
69
|
+
const cacheKey = `${this.ConversationID}_${this.ConversationDetailID}`;
|
|
70
|
+
SkipDynamicReportBase._reportCache.set(cacheKey, {
|
|
62
71
|
reportId: item.ID,
|
|
63
72
|
conversationId: this.ConversationID,
|
|
64
73
|
reportName: item.Name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-report.js","sourceRoot":"","sources":["../../../src/lib/dynamic-report/base-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+C,SAAS,EAAE,YAAY,EAAE,KAAK,EAAU,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5H,OAAO,EAAuC,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;AAGxG,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AAEzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;;
|
|
1
|
+
{"version":3,"file":"base-report.js","sourceRoot":"","sources":["../../../src/lib/dynamic-report/base-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+C,SAAS,EAAE,YAAY,EAAE,KAAK,EAAU,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5H,OAAO,EAAuC,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;AAGxG,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AAEzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;;AAG7D,MAAM,OAAgB,qBAAuB,SAAQ,oBAAoB;IA4BjD;IA3Bb,QAAQ,CAA8C;IACtD,sBAAsB,GAAY,KAAK,CAAC;IACxC,cAAc,GAAkB,IAAI,CAAC;IACrC,gBAAgB,GAAkB,IAAI,CAAC;IACvC,oBAAoB,GAAkB,IAAI,CAAC;IAC3C,WAAW,CAAe;IAC1B,YAAY,CAAgB;IAE3B,gBAAgB,GAAG,IAAI,YAAY,EAAmG,CAAC;IAEjJ;;;OAGG;IACO,wBAAwB,GAAG,IAAI,YAAY,EAAU,CAAC;IAEhE;;OAEG;IACO,gBAAgB,GAAG,IAAI,YAAY,EAAU,CAAC;IAExD;;OAEG;IACO,cAAc,GAAG,IAAI,YAAY,EAAiB,CAAC;IAG7D,YAAsB,KAAwB;QAC5C,KAAK,EAAE,CAAC;QADY,UAAK,GAAL,KAAK,CAAmB;IAE9C,CAAC;IAED,eAAe;QACb,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAGM,gBAAgB,GAAkB,IAAI,CAAC;IACvC,kBAAkB,GAAkB,IAAI,CAAC;IAChD,8EAA8E;IACtE,MAAM,CAAC,YAAY,GAAG,IAAI,YAAY,CAAiG;QAC7I,OAAO,EAAE,GAAG,EAAG,6BAA6B;QAC5C,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAG,gBAAgB;QAC7C,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAG,iBAAiB;KAC/C,CAAC,CAAC;IACK,OAAO,GAAY,KAAK,CAAC;IAC1B,KAAK,CAAC,qBAAqB;QAChC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACvF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAChC,yFAAyF;gBACzF,uFAAuF;gBACvF,oDAAoD;gBACpD,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACvE,MAAM,UAAU,GAAG,qBAAqB,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACpE,IAAI,UAAU,EAAE,CAAC;oBACf,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,QAAQ,CAAC;oBAC5C,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC,UAAU,CAAC;gBAClD,CAAC;qBACI,CAAC;oBACJ,6FAA6F;oBAC7F,MAAM,OAAO,GAAG,MAAM,2BAA2B,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;oBAC1H,MAAM,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB,KAAK,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnH,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAClD,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;wBAChC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC;wBAChC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC;wBACpC,oCAAoC;wBACpC,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;wBACvE,qBAAqB,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE;4BAC/C,QAAQ,EAAE,IAAI,CAAC,EAAE;4BACjB,cAAc,EAAE,IAAI,CAAC,cAAc;4BACnC,UAAU,EAAE,IAAI,CAAC,IAAI;4BACrB,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;yBAChD,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,iFAAiF;YAC/G,CAAC;QACH,CAAC;IACH,CAAC;IAEM,oBAAoB,CAAC,aAA4B;QACtD,8CAA8C;QAC9C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC;IAED,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,EAAE,gBAAgB,IAAI,EAAE,CAAC;IACjD,CAAC;IAED,IAAc,UAAU;QACtB,8HAA8H;QAC9H,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACzD,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,6DAA6D;YAC7D,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,gBAAuB,CAAC,CAAC,gFAAgF;YACjJ,IAAI,gBAAgB,EAAE,CAAC;gBACrB,EAAE,GAAG,gBAAgB,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACzD,CAAC;QACH,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IACD,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,UAAU,KAAK,MAAM,CAAC;IACpC,CAAC;IACD,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,CAAC;IACnE,CAAC;IACD,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,UAAU,KAAK,aAAa,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACI,kBAAkB;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;QACzC,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,OAAO,+BAA+B,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAClE,CAAC;;YAEG,OAAO,+BAA+B,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IACS,iBAAiB,GAAY,KAAK,CAAC;IAE7C;;OAEG;IACI,KAAK,CAAC,cAAc;QACvB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACnG,MAAM,IAAI,KAAK,CAAC,uGAAuG,CAAC,CAAC;QAC3H,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACpD,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC7B,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC;gBACxC,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,UAAU,CAAC;gBAC5C,wCAAwC;gBACxC,IAAI,CAAC,qBAAqB,CAAC,WAAW,MAAM,CAAC,UAAU,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;gBAElF,oDAAoD;gBACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,CAAe,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;gBACjH,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;oBACrC,uDAAuD;oBACvD,2BAA2B,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAe,EAAE,MAAM,CAAC,CAAC;gBAC3F,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,yBAAyB;YACxE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;gBACjE,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YACjC,CAAC;QACH,CAAC;IACL,CAAC;IAES,qBAAqB,CAAC,OAAe,EAAE,KAAwD,EAAE,SAAkB;QACzH,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAC,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,uBAAuB;QACnC,+HAA+H;QAC/H,MAAM,QAAQ,GAAG;;;;;;;QAOf,CAAC;QACH,MAAM,CAAC,GAAwB,IAAI,CAAC,aAAa,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE;YACxC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;SAClD,CAAC,CAAC;QACH,IAAI,MAAM,IAAI,MAAM,CAAC,oCAAoC;YACrD,OAAO,MAAM,CAAC,oCAAoC,CAAC;;YAEnD,OAAO;gBACP,OAAO,EAAE,KAAK;gBACd,YAAY,EAAE,mBAAmB;gBACjC,QAAQ,EAAE,EAAE;gBACZ,UAAU,EAAE,EAAE;aACb,CAAC;IACV,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,eAAe;QAC1B,IAAI,CAAC;YAEH,IAAG,CAAC,IAAI,CAAC,QAAQ,EAAC,CAAC;gBACjB,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;gBAChE,OAAO;YACT,CAAC;YAED,IAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,EAAC,CAAC;gBAC9C,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;gBAClE,OAAM;YACR,CAAC;YAED,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAEjE,MAAM,GAAG,GAAW;;;;;;;;;QASlB,CAAC;YAEH,MAAM,CAAC,GAAwB,IAAI,CAAC,aAAa,CAAC;YAClD,MAAM,MAAM,GAA+C,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE;gBACjF,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa;gBAC9C,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU;aACtC,CAAC,CAAC;YAEH,MAAM,SAAS,GAAoB,MAAM,CAAC,uBAAuB,CAAC;YAClE,IAAG,CAAC,SAAS,CAAC,OAAO,EAAC,CAAC;gBACrB,QAAQ,CAAC,sDAAsD,CAAC,CAAC;gBACjE,IAAI,CAAC,qBAAqB,CAAC,yBAAyB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;gBACrE,OAAO;YACT,CAAC;YAED,qCAAqC;YACrC,MAAM,WAAW,GAAoC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAClF,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,sBAAsB;YACrE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,GAAG,WAAW,CAAC,gBAAgB,CAAC,CAAC,kCAAkC;YACjG,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC,kCAAkC;YAEvF,yJAAyJ;YACzJ,WAAW,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC5D,WAAW,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC5D,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YAClD,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxD,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,2JAA2J;YAC1M,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,8CAA8C;YACnG,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,6HAA6H;YACnM,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,0DAA0D;YAE3G,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAE9D,MAAM,UAAU,GAAY,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YAC3D,IAAG,CAAC,UAAU,EAAC,CAAC;gBACd,QAAQ,CAAC,uDAAuD,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;gBAC7G,IAAI,CAAC,qBAAqB,CAAC,yBAAyB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACvE,CAAC;iBACG,CAAC;gBACH,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QACD,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,qBAAqB,CAAC,yBAAyB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACrE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;+EA9QmB,qBAAqB;6DAArB,qBAAqB;;iFAArB,qBAAqB;cAD1C,SAAS;kDAEC,QAAQ;kBAAhB,KAAK;YACG,sBAAsB;kBAA9B,KAAK;YACG,cAAc;kBAAtB,KAAK;YACG,gBAAgB;kBAAxB,KAAK;YACG,oBAAoB;kBAA5B,KAAK;YACG,WAAW;kBAAnB,KAAK;YACG,YAAY;kBAApB,KAAK;YAEI,gBAAgB;kBAAzB,MAAM;YAMG,wBAAwB;kBAAjC,MAAM;YAKG,gBAAgB;kBAAzB,MAAM;YAKG,cAAc;kBAAvB,MAAM"}
|
|
@@ -37,10 +37,11 @@ export declare class SkipDynamicUIComponentComponent implements AfterViewInit, O
|
|
|
37
37
|
private isResizing;
|
|
38
38
|
private startY;
|
|
39
39
|
private startHeight;
|
|
40
|
-
componentSpecs: Map<number, any>;
|
|
41
40
|
userStates: Map<number, any>;
|
|
42
41
|
utilities: ComponentUtilities | null;
|
|
43
42
|
componentStyles: ComponentStyles | null;
|
|
43
|
+
private _flattenedDataContext;
|
|
44
|
+
private _lastDataContextHash;
|
|
44
45
|
private static librariesInitialized;
|
|
45
46
|
constructor(sanitizer: DomSanitizer, cdr: ChangeDetectorRef, ngZone: NgZone, adapter: AngularAdapterService);
|
|
46
47
|
/**
|
|
@@ -148,9 +149,9 @@ export declare class SkipDynamicUIComponentComponent implements AfterViewInit, O
|
|
|
148
149
|
*/
|
|
149
150
|
private setupReportOptions;
|
|
150
151
|
/**
|
|
151
|
-
*
|
|
152
|
+
* Initialize user state for a specific option index
|
|
152
153
|
*/
|
|
153
|
-
private
|
|
154
|
+
private initializeUserStateForOption;
|
|
154
155
|
/**
|
|
155
156
|
* Handle state change events from React components
|
|
156
157
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-ui-component.d.ts","sourceRoot":"","sources":["../../../src/lib/dynamic-report/dynamic-ui-component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAa,YAAY,EAAS,SAAS,EAAwB,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"dynamic-ui-component.d.ts","sourceRoot":"","sources":["../../../src/lib/dynamic-report/dynamic-ui-component.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ViewChildren, HostListener } from '@angular/core';
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChildren, HostListener, ChangeDetectionStrategy } from '@angular/core';
|
|
2
2
|
import { CompositeKey, LogError, Metadata } from '@memberjunction/core';
|
|
3
3
|
import { BuildComponentCompleteCode } from '@memberjunction/interactive-component-types';
|
|
4
4
|
import { DrillDownInfo } from '../drill-down-info';
|
|
@@ -167,7 +167,7 @@ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_mj_re
|
|
|
167
167
|
} if (rf & 2) {
|
|
168
168
|
const ɵ$index_4_r3 = i0.ɵɵnextContext(2).$index;
|
|
169
169
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
170
|
-
i0.ɵɵproperty("component", ctx_r1.
|
|
170
|
+
i0.ɵɵproperty("component", ctx_r1.reportOptions[ɵ$index_4_r3].option)("data", ctx_r1.getFlattenedDataContext())("state", ctx_r1.userStates.get(ɵ$index_4_r3) || i0.ɵɵpureFunction0(5, _c0))("utilities", ctx_r1.utilities)("styles", ctx_r1.componentStyles || undefined);
|
|
171
171
|
} }
|
|
172
172
|
function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_26_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
173
173
|
i0.ɵɵelementStart(0, "details", 45)(1, "summary", 51);
|
|
@@ -286,7 +286,7 @@ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Templ
|
|
|
286
286
|
i0.ɵɵadvance();
|
|
287
287
|
i0.ɵɵattribute("data-tab-index", ɵ$index_4_r3);
|
|
288
288
|
i0.ɵɵadvance();
|
|
289
|
-
i0.ɵɵproperty("ngIf", !ctx_r1.currentError && ctx_r1.
|
|
289
|
+
i0.ɵɵproperty("ngIf", !ctx_r1.currentError && ctx_r1.reportOptions[ɵ$index_4_r3] && ɵ$index_4_r3 === ctx_r1.selectedReportOptionIndex);
|
|
290
290
|
i0.ɵɵadvance();
|
|
291
291
|
i0.ɵɵconditional(ctx_r1.currentError && ctx_r1.selectedReportOptionIndex === ɵ$index_4_r3 ? 26 : -1);
|
|
292
292
|
} }
|
|
@@ -505,7 +505,7 @@ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_25_mj_react_c
|
|
|
505
505
|
i0.ɵɵelementEnd();
|
|
506
506
|
} if (rf & 2) {
|
|
507
507
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
508
|
-
i0.ɵɵproperty("component", ctx_r1.
|
|
508
|
+
i0.ɵɵproperty("component", ctx_r1.reportOptions[0].option)("data", ctx_r1.getFlattenedDataContext())("state", ctx_r1.userStates.get(0) || i0.ɵɵpureFunction0(5, _c0))("utilities", ctx_r1.utilities)("styles", ctx_r1.componentStyles || undefined);
|
|
509
509
|
} }
|
|
510
510
|
function SkipDynamicUIComponentComponent_Conditional_1_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
511
511
|
i0.ɵɵelementStart(0, "div", 21);
|
|
@@ -514,7 +514,7 @@ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_25_Template(r
|
|
|
514
514
|
} if (rf & 2) {
|
|
515
515
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
516
516
|
i0.ɵɵadvance();
|
|
517
|
-
i0.ɵɵproperty("ngIf", ctx_r1.
|
|
517
|
+
i0.ɵɵproperty("ngIf", ctx_r1.reportOptions[0]);
|
|
518
518
|
} }
|
|
519
519
|
function SkipDynamicUIComponentComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
520
520
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
@@ -598,11 +598,13 @@ export class SkipDynamicUIComponentComponent {
|
|
|
598
598
|
isResizing = false;
|
|
599
599
|
startY = 0;
|
|
600
600
|
startHeight = 0;
|
|
601
|
-
// Cache for component specs
|
|
602
|
-
componentSpecs = new Map();
|
|
601
|
+
// Cache for user states only - component specs come from data
|
|
603
602
|
userStates = new Map();
|
|
604
603
|
utilities = null;
|
|
605
604
|
componentStyles = null;
|
|
605
|
+
// Memoized flattened data context to prevent ExpressionChangedAfterItHasBeenCheckedError
|
|
606
|
+
_flattenedDataContext = null;
|
|
607
|
+
_lastDataContextHash = null;
|
|
606
608
|
// Event handlers from React components
|
|
607
609
|
static librariesInitialized = false;
|
|
608
610
|
constructor(sanitizer, cdr, ngZone, adapter) {
|
|
@@ -665,12 +667,9 @@ export class SkipDynamicUIComponentComponent {
|
|
|
665
667
|
// Update the component info - this can fail if placeholders are missing
|
|
666
668
|
this.UIComponentCode = BuildComponentCompleteCode(selectedOption.option);
|
|
667
669
|
this.ComponentObjectName = selectedOption.option.name;
|
|
668
|
-
//
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
// Trigger change detection after modifying componentSpecs
|
|
672
|
-
this.cdr.detectChanges();
|
|
673
|
-
}
|
|
670
|
+
// No need to cache component specs - they come from the data
|
|
671
|
+
// Just trigger change detection to render the new component
|
|
672
|
+
this.cdr.detectChanges();
|
|
674
673
|
}
|
|
675
674
|
catch (error) {
|
|
676
675
|
console.error('Failed to build component code:', error);
|
|
@@ -735,8 +734,8 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
|
|
|
735
734
|
retryCurrentOption() {
|
|
736
735
|
// Clear the error
|
|
737
736
|
this.currentError = null;
|
|
738
|
-
//
|
|
739
|
-
|
|
737
|
+
// Just clear the error and re-render
|
|
738
|
+
// Component spec comes from reportOptions data
|
|
740
739
|
// Trigger change detection
|
|
741
740
|
this.cdr.detectChanges();
|
|
742
741
|
}
|
|
@@ -937,25 +936,33 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
|
|
|
937
936
|
const runtimeUtils = createRuntimeUtilities();
|
|
938
937
|
this.utilities = runtimeUtils.buildUtilities();
|
|
939
938
|
this.componentStyles = SetupStyles();
|
|
940
|
-
//
|
|
939
|
+
// Initialize user states for all options
|
|
941
940
|
// Use Promise.resolve to avoid ExpressionChangedAfterItHasBeenCheckedError
|
|
942
941
|
if (this.reportOptions.length > 0) {
|
|
943
942
|
Promise.resolve().then(() => {
|
|
944
943
|
this.reportOptions.forEach((_, index) => {
|
|
945
|
-
this.
|
|
944
|
+
if (!this.userStates.has(index)) {
|
|
945
|
+
this.userStates.set(index, {});
|
|
946
|
+
}
|
|
946
947
|
});
|
|
947
948
|
this.cdr.detectChanges();
|
|
948
949
|
});
|
|
949
950
|
}
|
|
950
951
|
}
|
|
951
952
|
ngOnDestroy() {
|
|
952
|
-
// Clean up
|
|
953
|
-
this.componentSpecs.clear();
|
|
953
|
+
// Clean up user states
|
|
954
954
|
this.userStates.clear();
|
|
955
|
+
// Ensure resize listeners are removed if still active
|
|
956
|
+
if (this.isResizing) {
|
|
957
|
+
this.stopResize();
|
|
958
|
+
}
|
|
955
959
|
// The MJReactComponent handles its own cleanup
|
|
956
960
|
}
|
|
957
961
|
ngOnChanges(changes) {
|
|
958
962
|
if (changes['SkipData']) {
|
|
963
|
+
// Clear cached data context when SkipData changes
|
|
964
|
+
this._flattenedDataContext = null;
|
|
965
|
+
this._lastDataContextHash = null;
|
|
959
966
|
const skipData = changes['SkipData'].currentValue;
|
|
960
967
|
if (skipData) {
|
|
961
968
|
this.setupReportOptions(skipData);
|
|
@@ -1020,33 +1027,12 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
|
|
|
1020
1027
|
}
|
|
1021
1028
|
}
|
|
1022
1029
|
/**
|
|
1023
|
-
*
|
|
1030
|
+
* Initialize user state for a specific option index
|
|
1024
1031
|
*/
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
if (!
|
|
1028
|
-
|
|
1029
|
-
try {
|
|
1030
|
-
const component = option.option;
|
|
1031
|
-
// Store the component spec
|
|
1032
|
-
this.componentSpecs.set(optionIndex, component);
|
|
1033
|
-
// Initialize user state if not exists
|
|
1034
|
-
if (!this.userStates.has(optionIndex)) {
|
|
1035
|
-
this.userStates.set(optionIndex, {});
|
|
1036
|
-
}
|
|
1037
|
-
}
|
|
1038
|
-
catch (e) {
|
|
1039
|
-
console.error('Error creating component spec:', e);
|
|
1040
|
-
// Determine the type of error and create a user-friendly message
|
|
1041
|
-
let errorType = 'Component Specification Error';
|
|
1042
|
-
let errorMessage = 'Failed to create component specification.';
|
|
1043
|
-
let technicalDetails = e.toString();
|
|
1044
|
-
this.currentError = {
|
|
1045
|
-
type: errorType,
|
|
1046
|
-
message: errorMessage,
|
|
1047
|
-
technicalDetails: technicalDetails + '\n\nComponent Option: ' + (optionIndex + 1) + '\nComponent Name: ' + option.option.name
|
|
1048
|
-
};
|
|
1049
|
-
LogError(e);
|
|
1032
|
+
initializeUserStateForOption(optionIndex) {
|
|
1033
|
+
// Initialize user state if not exists
|
|
1034
|
+
if (!this.userStates.has(optionIndex)) {
|
|
1035
|
+
this.userStates.set(optionIndex, {});
|
|
1050
1036
|
}
|
|
1051
1037
|
}
|
|
1052
1038
|
/**
|
|
@@ -1083,6 +1069,17 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
|
|
|
1083
1069
|
this.handleOpenEntityRecord(event.entityName, event.key);
|
|
1084
1070
|
}
|
|
1085
1071
|
getFlattenedDataContext() {
|
|
1072
|
+
// Create a simple hash of the data context to detect changes
|
|
1073
|
+
let currentHash = '';
|
|
1074
|
+
if (this.SkipData?.dataContext) {
|
|
1075
|
+
const loadedItems = this.SkipData.dataContext.Items.filter((i) => i.DataLoaded && i._Data?.length > 0);
|
|
1076
|
+
currentHash = loadedItems.map((item) => `${item.ID}_${item._Data?.length || 0}`).join('_');
|
|
1077
|
+
}
|
|
1078
|
+
// Check if we need to recalculate (data changed)
|
|
1079
|
+
if (this._flattenedDataContext && this._lastDataContextHash === currentHash) {
|
|
1080
|
+
return this._flattenedDataContext;
|
|
1081
|
+
}
|
|
1082
|
+
// Recalculate and cache
|
|
1086
1083
|
const flattenedDataContext = {};
|
|
1087
1084
|
if (this.SkipData?.dataContext) {
|
|
1088
1085
|
const loadedItems = this.SkipData.dataContext.Items.filter((i) => i.DataLoaded && i._Data?.length > 0);
|
|
@@ -1090,7 +1087,9 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
|
|
|
1090
1087
|
flattenedDataContext["data_item_" + i] = loadedItems[i]._Data;
|
|
1091
1088
|
}
|
|
1092
1089
|
}
|
|
1093
|
-
|
|
1090
|
+
this._flattenedDataContext = flattenedDataContext;
|
|
1091
|
+
this._lastDataContextHash = currentHash;
|
|
1092
|
+
return this._flattenedDataContext;
|
|
1094
1093
|
}
|
|
1095
1094
|
// Event handler implementations
|
|
1096
1095
|
handleRefreshData() {
|
|
@@ -1155,11 +1154,11 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
|
|
|
1155
1154
|
i0.ɵɵtemplate(0, SkipDynamicUIComponentComponent_Conditional_0_Template, 3, 1, "kendo-tabstrip", 0)(1, SkipDynamicUIComponentComponent_Conditional_1_Template, 26, 12, "div", 1);
|
|
1156
1155
|
} if (rf & 2) {
|
|
1157
1156
|
i0.ɵɵconditional(ctx.reportOptions.length > 1 ? 0 : 1);
|
|
1158
|
-
} }, dependencies: [i3.NgIf, i4.TabStripComponent, i4.TabStripTabComponent, i4.TabContentDirective, i4.TabTitleDirective, i5.ButtonComponent, i6.CodeEditorComponent, i2.MJReactComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n position: relative;\n }\n \n \n\n .tab-action-bar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 12px;\n background-color: #fafafa;\n border-bottom: 1px solid #e0e0e0;\n }\n \n .tab-actions-left[_ngcontent-%COMP%], \n .tab-actions-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n \n \n\n .tab-action-button[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n background-color: transparent;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n color: #333;\n transition: all 0.15s ease;\n white-space: nowrap;\n }\n \n .tab-action-button[_ngcontent-%COMP%]:hover:not(:disabled) {\n background-color: #f5f5f5;\n border-color: #d0d0d0;\n }\n \n .tab-action-button[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n \n .tab-action-button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n \n \n\n .tab-action-button.create-button[_ngcontent-%COMP%], \n .tab-action-button.print-button[_ngcontent-%COMP%] {\n background-color: white;\n color: #333;\n border-color: #e0e0e0;\n }\n \n .tab-action-button.create-button[_ngcontent-%COMP%]:hover:not(:disabled), \n .tab-action-button.print-button[_ngcontent-%COMP%]:hover:not(:disabled) {\n background-color: #f5f5f5;\n border-color: #d0d0d0;\n }\n \n \n\n .tab-action-button.toggle-button[_ngcontent-%COMP%] {\n background-color: white;\n color: #666;\n border-color: #e0e0e0;\n }\n \n .tab-action-button.toggle-button[_ngcontent-%COMP%]:hover:not(:disabled) {\n background-color: #f5f5f5;\n border-color: #d0d0d0;\n color: #333;\n }\n \n .tab-action-button.toggle-button.active[_ngcontent-%COMP%] {\n background-color: #5B4FE9;\n color: white;\n border-color: #5B4FE9;\n }\n \n .tab-action-button.toggle-button.active[_ngcontent-%COMP%]:hover:not(:disabled) {\n background-color: #4940D4;\n border-color: #4940D4;\n }\n \n \n\n .details-panel[_ngcontent-%COMP%] {\n border-bottom: 1px solid #e0e0e0;\n background-color: #fafafa;\n overflow: hidden;\n transition: height 0.3s ease;\n }\n \n .details-content[_ngcontent-%COMP%] {\n padding: 16px;\n overflow-y: auto;\n height: 100%;\n font-size: 14px;\n line-height: 1.6;\n }\n \n .details-content.code-content[_ngcontent-%COMP%] {\n padding: 0;\n }\n \n \n\n .panel-resizer[_ngcontent-%COMP%] {\n height: 4px;\n background-color: #e0e0e0;\n cursor: ns-resize;\n position: relative;\n transition: background-color 0.2s ease;\n }\n \n .panel-resizer[_ngcontent-%COMP%]:hover {\n background-color: #d0d0d0;\n }\n \n .resizer-handle[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 40px;\n height: 2px;\n background-color: #999;\n border-radius: 1px;\n }\n \n \n\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(h1) { font-size: 1.5em; margin-top: 0; margin-bottom: 0.5em; }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(h2) { font-size: 1.3em; margin-top: 1em; margin-bottom: 0.5em; }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(h3) { font-size: 1.1em; margin-top: 1em; margin-bottom: 0.5em; }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(ul), .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(ol) { margin-left: 1.5em; }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(code) { \n background-color: #f4f4f4; \n padding: 2px 4px; \n border-radius: 3px; \n font-family: 'Courier New', monospace; \n font-size: 0.9em;\n }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(pre) { \n background-color: #f4f4f4; \n padding: 12px; \n border-radius: 4px; \n overflow-x: auto; \n }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(blockquote) { \n border-left: 4px solid #e0e0e0; \n padding-left: 16px; \n margin-left: 0; \n color: #666; \n }\n \n \n\n .k-tabstrip {\n border: none;\n height: 100%;\n display: flex;\n flex-direction: column;\n margin: 10px 5px 5px 5px;\n }\n \n .k-tabstrip-items {\n background: #f8f9fa;\n border: none;\n border-radius: 8px 8px 0 0;\n flex: 0 0 auto;\n padding: 8px 12px 0 12px;\n gap: 4px;\n display: flex;\n }\n \n .k-tabstrip-items-wrapper {\n height: 100%;\n }\n \n .k-content {\n flex: 1;\n overflow: hidden;\n padding: 0;\n background: white;\n border: 1px solid #e0e0e0;\n border-top: none;\n border-radius: 0 0 8px 8px;\n }\n \n .k-tabstrip .k-item {\n margin-right: 2px;\n border: none;\n background: transparent;\n border-radius: 6px 6px 0 0;\n padding: 2px;\n transition: all 0.2s ease;\n }\n \n .k-tabstrip .k-item.k-selected {\n background: white;\n border: 1px solid #e0e0e0;\n border-bottom: 1px solid white;\n margin-bottom: -1px;\n z-index: 1;\n }\n \n .k-tabstrip .k-link {\n padding: 8px 16px;\n font-weight: 500;\n font-size: 13px;\n color: #666;\n transition: all 0.15s ease;\n border-radius: 4px 4px 0 0;\n background: transparent;\n border: none;\n text-transform: lowercase;\n }\n \n .k-tabstrip .k-link:first-letter {\n text-transform: uppercase;\n }\n \n .k-tabstrip .k-item:hover:not(.k-selected) .k-link {\n color: #333;\n background: rgba(0, 0, 0, 0.04);\n }\n \n .k-tabstrip .k-item.k-selected .k-link {\n color: #1976d2;\n font-weight: 600;\n background: white;\n }\n \n \n\n .k-tabstrip .k-link .star-icon {\n display: inline-block;\n margin-right: 4px;\n color: #ffd700;\n font-size: 12px;\n vertical-align: middle;\n }\n \n \n\n .k-tabstrip-items::before, \n .k-tabstrip-items::after {\n display: none;\n }\n \n .k-tabstrip .k-item::before, \n .k-tabstrip .k-item::after {\n display: none;\n }\n \n \n\n .k-tabstrip .k-link:focus {\n outline: none;\n box-shadow: none;\n }\n \n \n\n .k-tabstrip .k-content.k-state-active {\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n \n \n\n .react-host-container[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n }"] });
|
|
1157
|
+
} }, dependencies: [i3.NgIf, i4.TabStripComponent, i4.TabStripTabComponent, i4.TabContentDirective, i4.TabTitleDirective, i5.ButtonComponent, i6.CodeEditorComponent, i2.MJReactComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n position: relative;\n }\n \n \n\n .tab-action-bar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 12px;\n background-color: #fafafa;\n border-bottom: 1px solid #e0e0e0;\n }\n \n .tab-actions-left[_ngcontent-%COMP%], \n .tab-actions-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n \n \n\n .tab-action-button[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n background-color: transparent;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n color: #333;\n transition: all 0.15s ease;\n white-space: nowrap;\n }\n \n .tab-action-button[_ngcontent-%COMP%]:hover:not(:disabled) {\n background-color: #f5f5f5;\n border-color: #d0d0d0;\n }\n \n .tab-action-button[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n \n .tab-action-button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n \n \n\n .tab-action-button.create-button[_ngcontent-%COMP%], \n .tab-action-button.print-button[_ngcontent-%COMP%] {\n background-color: white;\n color: #333;\n border-color: #e0e0e0;\n }\n \n .tab-action-button.create-button[_ngcontent-%COMP%]:hover:not(:disabled), \n .tab-action-button.print-button[_ngcontent-%COMP%]:hover:not(:disabled) {\n background-color: #f5f5f5;\n border-color: #d0d0d0;\n }\n \n \n\n .tab-action-button.toggle-button[_ngcontent-%COMP%] {\n background-color: white;\n color: #666;\n border-color: #e0e0e0;\n }\n \n .tab-action-button.toggle-button[_ngcontent-%COMP%]:hover:not(:disabled) {\n background-color: #f5f5f5;\n border-color: #d0d0d0;\n color: #333;\n }\n \n .tab-action-button.toggle-button.active[_ngcontent-%COMP%] {\n background-color: #5B4FE9;\n color: white;\n border-color: #5B4FE9;\n }\n \n .tab-action-button.toggle-button.active[_ngcontent-%COMP%]:hover:not(:disabled) {\n background-color: #4940D4;\n border-color: #4940D4;\n }\n \n \n\n .details-panel[_ngcontent-%COMP%] {\n border-bottom: 1px solid #e0e0e0;\n background-color: #fafafa;\n overflow: hidden;\n transition: height 0.3s ease;\n }\n \n .details-content[_ngcontent-%COMP%] {\n padding: 16px;\n overflow-y: auto;\n height: 100%;\n font-size: 14px;\n line-height: 1.6;\n }\n \n .details-content.code-content[_ngcontent-%COMP%] {\n padding: 0;\n }\n \n \n\n .panel-resizer[_ngcontent-%COMP%] {\n height: 4px;\n background-color: #e0e0e0;\n cursor: ns-resize;\n position: relative;\n transition: background-color 0.2s ease;\n }\n \n .panel-resizer[_ngcontent-%COMP%]:hover {\n background-color: #d0d0d0;\n }\n \n .resizer-handle[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 40px;\n height: 2px;\n background-color: #999;\n border-radius: 1px;\n }\n \n \n\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(h1) { font-size: 1.5em; margin-top: 0; margin-bottom: 0.5em; }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(h2) { font-size: 1.3em; margin-top: 1em; margin-bottom: 0.5em; }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(h3) { font-size: 1.1em; margin-top: 1em; margin-bottom: 0.5em; }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(ul), .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(ol) { margin-left: 1.5em; }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(code) { \n background-color: #f4f4f4; \n padding: 2px 4px; \n border-radius: 3px; \n font-family: 'Courier New', monospace; \n font-size: 0.9em;\n }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(pre) { \n background-color: #f4f4f4; \n padding: 12px; \n border-radius: 4px; \n overflow-x: auto; \n }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(blockquote) { \n border-left: 4px solid #e0e0e0; \n padding-left: 16px; \n margin-left: 0; \n color: #666; \n }\n \n \n\n .k-tabstrip {\n border: none;\n height: 100%;\n display: flex;\n flex-direction: column;\n margin: 10px 5px 5px 5px;\n }\n \n .k-tabstrip-items {\n background: #f8f9fa;\n border: none;\n border-radius: 8px 8px 0 0;\n flex: 0 0 auto;\n padding: 8px 12px 0 12px;\n gap: 4px;\n display: flex;\n }\n \n .k-tabstrip-items-wrapper {\n height: 100%;\n }\n \n .k-content {\n flex: 1;\n overflow: hidden;\n padding: 0;\n background: white;\n border: 1px solid #e0e0e0;\n border-top: none;\n border-radius: 0 0 8px 8px;\n }\n \n .k-tabstrip .k-item {\n margin-right: 2px;\n border: none;\n background: transparent;\n border-radius: 6px 6px 0 0;\n padding: 2px;\n transition: all 0.2s ease;\n }\n \n .k-tabstrip .k-item.k-selected {\n background: white;\n border: 1px solid #e0e0e0;\n border-bottom: 1px solid white;\n margin-bottom: -1px;\n z-index: 1;\n }\n \n .k-tabstrip .k-link {\n padding: 8px 16px;\n font-weight: 500;\n font-size: 13px;\n color: #666;\n transition: all 0.15s ease;\n border-radius: 4px 4px 0 0;\n background: transparent;\n border: none;\n text-transform: lowercase;\n }\n \n .k-tabstrip .k-link:first-letter {\n text-transform: uppercase;\n }\n \n .k-tabstrip .k-item:hover:not(.k-selected) .k-link {\n color: #333;\n background: rgba(0, 0, 0, 0.04);\n }\n \n .k-tabstrip .k-item.k-selected .k-link {\n color: #1976d2;\n font-weight: 600;\n background: white;\n }\n \n \n\n .k-tabstrip .k-link .star-icon {\n display: inline-block;\n margin-right: 4px;\n color: #ffd700;\n font-size: 12px;\n vertical-align: middle;\n }\n \n \n\n .k-tabstrip-items::before, \n .k-tabstrip-items::after {\n display: none;\n }\n \n .k-tabstrip .k-item::before, \n .k-tabstrip .k-item::after {\n display: none;\n }\n \n \n\n .k-tabstrip .k-link:focus {\n outline: none;\n box-shadow: none;\n }\n \n \n\n .k-tabstrip .k-content.k-state-active {\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n \n \n\n .react-host-container[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n }"], changeDetection: 0 });
|
|
1159
1158
|
}
|
|
1160
1159
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SkipDynamicUIComponentComponent, [{
|
|
1161
1160
|
type: Component,
|
|
1162
|
-
args: [{ selector: 'skip-dynamic-ui-component', template: `
|
|
1161
|
+
args: [{ selector: 'skip-dynamic-ui-component', changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
1163
1162
|
@if (reportOptions.length > 1) {
|
|
1164
1163
|
<!-- Multiple options: show tabs -->
|
|
1165
1164
|
<kendo-tabstrip
|
|
@@ -1302,8 +1301,8 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
|
|
|
1302
1301
|
<div [attr.data-tab-index]="i"
|
|
1303
1302
|
style="flex: 1; position: relative; min-height: 0; overflow: auto;">
|
|
1304
1303
|
<mj-react-component
|
|
1305
|
-
*ngIf="!currentError &&
|
|
1306
|
-
[component]="
|
|
1304
|
+
*ngIf="!currentError && reportOptions[i] && i === selectedReportOptionIndex"
|
|
1305
|
+
[component]="reportOptions[i].option"
|
|
1307
1306
|
[data]="getFlattenedDataContext()"
|
|
1308
1307
|
[state]="userStates.get(i) || {}"
|
|
1309
1308
|
[utilities]="utilities"
|
|
@@ -1568,8 +1567,8 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
|
|
|
1568
1567
|
<!-- React component container (only shown when no error) -->
|
|
1569
1568
|
<div style="flex: 1; position: relative; min-height: 0; overflow: auto;">
|
|
1570
1569
|
<mj-react-component
|
|
1571
|
-
*ngIf="
|
|
1572
|
-
[component]="
|
|
1570
|
+
*ngIf="reportOptions[0]"
|
|
1571
|
+
[component]="reportOptions[0].option"
|
|
1573
1572
|
[data]="getFlattenedDataContext()"
|
|
1574
1573
|
[state]="userStates.get(0) || {}"
|
|
1575
1574
|
[utilities]="utilities"
|
|
@@ -1612,5 +1611,5 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
|
|
|
1612
1611
|
}], SkipData: [{
|
|
1613
1612
|
type: Input
|
|
1614
1613
|
}] }); })();
|
|
1615
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SkipDynamicUIComponentComponent, { className: "SkipDynamicUIComponentComponent", filePath: "src/lib/dynamic-report/dynamic-ui-component.ts", lineNumber:
|
|
1614
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SkipDynamicUIComponentComponent, { className: "SkipDynamicUIComponentComponent", filePath: "src/lib/dynamic-report/dynamic-ui-component.ts", lineNumber: 722 }); })();
|
|
1616
1615
|
//# sourceMappingURL=dynamic-ui-component.js.map
|