@wavemaker/app-ng-runtime 11.14.0-rc.6276 → 11.14.1-3.6306

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.
Files changed (63) hide show
  1. package/components/base/bundles/index.umd.js +89 -17
  2. package/components/base/esm2022/pipes/custom-pipes.mjs +10 -10
  3. package/components/base/esm2022/utils/widget-utils.mjs +5 -3
  4. package/components/base/esm2022/widgets/common/base/base.component.mjs +68 -7
  5. package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +7 -3
  6. package/components/base/esm2022/widgets/framework/property-change-handler.mjs +7 -2
  7. package/components/base/fesm2022/index.mjs +90 -18
  8. package/components/base/fesm2022/index.mjs.map +1 -1
  9. package/components/base/pipes/custom-pipes.d.ts +5 -5
  10. package/components/basic/label/bundles/index.umd.js +9 -1
  11. package/components/basic/label/esm2022/label.directive.mjs +10 -2
  12. package/components/basic/label/fesm2022/index.mjs +9 -1
  13. package/components/basic/label/fesm2022/index.mjs.map +1 -1
  14. package/components/data/table/bundles/index.umd.js +218 -11
  15. package/components/data/table/esm2022/table.component.mjs +219 -12
  16. package/components/data/table/fesm2022/index.mjs +218 -11
  17. package/components/data/table/fesm2022/index.mjs.map +1 -1
  18. package/components/data/table/table.component.d.ts +6 -2
  19. package/components/dialogs/default/bundles/index.umd.js +21 -18
  20. package/components/dialogs/default/dialog-header/dialog-header.component.d.ts +4 -1
  21. package/components/dialogs/default/esm2022/dialog-header/dialog-header.component.mjs +13 -10
  22. package/components/dialogs/default/fesm2022/index.mjs +9 -6
  23. package/components/dialogs/default/fesm2022/index.mjs.map +1 -1
  24. package/components/navigation/menu/bundles/index.umd.js +5 -0
  25. package/components/navigation/menu/esm2022/menu.component.mjs +6 -1
  26. package/components/navigation/menu/fesm2022/index.mjs +5 -0
  27. package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
  28. package/components/navigation/popover/bundles/index.umd.js +6 -6
  29. package/components/navigation/popover/esm2022/popover.component.mjs +4 -4
  30. package/components/navigation/popover/fesm2022/index.mjs +3 -3
  31. package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
  32. package/components/navigation/popover/popover.component.d.ts +6 -0
  33. package/core/bundles/index.umd.js +332 -82
  34. package/core/esm2022/public_api.mjs +3 -3
  35. package/core/esm2022/types/types.mjs +1 -1
  36. package/core/esm2022/utils/utils.mjs +6 -2
  37. package/core/esm2022/utils/watcher.mjs +323 -81
  38. package/core/fesm2022/index.mjs +331 -84
  39. package/core/fesm2022/index.mjs.map +1 -1
  40. package/core/public_api.d.ts +2 -2
  41. package/core/types/types.d.ts +1 -0
  42. package/core/utils/utils.d.ts +1 -0
  43. package/core/utils/watcher.d.ts +26 -5
  44. package/npm-shrinkwrap.json +2 -2
  45. package/package-lock.json +2 -2
  46. package/package.json +1 -1
  47. package/runtime/base/bundles/index.umd.js +38 -2
  48. package/runtime/base/esm2022/components/app-component/app.component.mjs +7 -2
  49. package/runtime/base/esm2022/components/base-page.component.mjs +9 -2
  50. package/runtime/base/esm2022/components/base-partial.component.mjs +10 -2
  51. package/runtime/base/esm2022/components/base-prefab.component.mjs +10 -2
  52. package/runtime/base/esm2022/components/base-spa-page.component.mjs +9 -2
  53. package/runtime/base/esm2022/services/app.service.mjs +2 -1
  54. package/runtime/base/esm2022/services/pipe-provider.service.mjs +4 -4
  55. package/runtime/base/fesm2022/index.mjs +39 -3
  56. package/runtime/base/fesm2022/index.mjs.map +1 -1
  57. package/runtime/base/services/app.service.d.ts +1 -0
  58. package/scripts/@wavemaker/nvd3/build/nv.d3.min.js +1 -1
  59. package/scripts/datatable/datatable.js +19 -2
  60. package/transpiler/bundles/index.umd.js +1 -1
  61. package/transpiler/esm2022/imports.mjs +2 -2
  62. package/transpiler/fesm2022/index.mjs +1 -1
  63. package/transpiler/fesm2022/index.mjs.map +1 -1
@@ -1,6 +1,6 @@
1
1
  import { PipeTransform } from '@angular/core';
2
2
  import { DatePipe, DecimalPipe } from '@angular/common';
3
- import { AbstractI18nService, CustomPipeManager } from '@wm/core';
3
+ import { AbstractI18nService, App, CustomPipeManager } from '@wm/core';
4
4
  import { WmPipe } from "./wm-pipe";
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class TrailingZeroDecimalPipe implements PipeTransform {
@@ -13,11 +13,11 @@ export declare class TrailingZeroDecimalPipe implements PipeTransform {
13
13
  export declare class ToDatePipe extends WmPipe implements PipeTransform {
14
14
  private datePipe;
15
15
  private i18nService;
16
- protected customPipeManager: CustomPipeManager;
17
16
  private app;
17
+ protected customPipeManager: CustomPipeManager;
18
18
  returnFn(data: any, args: any, variables: any): any;
19
19
  transform(data: any, format: any, timezone?: any, compInstance?: any): any;
20
- constructor(datePipe: DatePipe, i18nService: AbstractI18nService, customPipeManager: CustomPipeManager);
20
+ constructor(datePipe: DatePipe, i18nService: AbstractI18nService, app: App, customPipeManager: CustomPipeManager);
21
21
  static ɵfac: i0.ɵɵFactoryDeclaration<ToDatePipe, never>;
22
22
  static ɵpipe: i0.ɵɵPipeDeclaration<ToDatePipe, "toDate", true>;
23
23
  }
@@ -51,9 +51,9 @@ export declare class SuffixPipe implements PipeTransform {
51
51
  * Custom pipe: It is work as interceptor between the user custom pipe function and angular pipe
52
52
  */
53
53
  export declare class CustomPipe implements PipeTransform {
54
- private custmeUserPipe;
55
54
  private app;
56
- constructor(custmeUserPipe: CustomPipeManager);
55
+ private custmeUserPipe;
56
+ constructor(app: App, custmeUserPipe: CustomPipeManager);
57
57
  transform(data: any, pipename: any): any;
58
58
  static ɵfac: i0.ɵɵFactoryDeclaration<CustomPipe, never>;
59
59
  static ɵpipe: i0.ɵɵPipeDeclaration<CustomPipe, "custom", true>;
@@ -54,6 +54,9 @@
54
54
  i1.styler(this.nativeElement, this);
55
55
  }
56
56
  onPropertyChange(key, nv, ov) {
57
+ if (this.isDestroyed) {
58
+ return;
59
+ }
57
60
  if (key === 'caption') {
58
61
  // Check for trustPipe safe values
59
62
  let bindContent = this.nativeElement.getAttribute('caption.bind');
@@ -72,7 +75,12 @@
72
75
  core.setProperty(this.nativeElement, 'innerHTML', nv[Object.keys(nv)[0]]);
73
76
  }
74
77
  else {
75
- core.setProperty(this.nativeElement, 'innerHTML', this.sanitizePipe.transform(insertZWSP(nv), i0.SecurityContext.HTML));
78
+ if (this.sanitizePipe) {
79
+ core.setProperty(this.nativeElement, 'innerHTML', this.sanitizePipe.transform(insertZWSP(nv), i0.SecurityContext.HTML));
80
+ }
81
+ else {
82
+ core.setProperty(this.nativeElement, 'textContent', insertZWSP(nv));
83
+ }
76
84
  }
77
85
  }
78
86
  else if (key === 'required') {
@@ -19,6 +19,9 @@ export class LabelDirective extends StylableComponent {
19
19
  styler(this.nativeElement, this);
20
20
  }
21
21
  onPropertyChange(key, nv, ov) {
22
+ if (this.isDestroyed) {
23
+ return;
24
+ }
22
25
  if (key === 'caption') {
23
26
  // Check for trustPipe safe values
24
27
  let bindContent = this.nativeElement.getAttribute('caption.bind');
@@ -37,7 +40,12 @@ export class LabelDirective extends StylableComponent {
37
40
  setProperty(this.nativeElement, 'innerHTML', nv[Object.keys(nv)[0]]);
38
41
  }
39
42
  else {
40
- setProperty(this.nativeElement, 'innerHTML', this.sanitizePipe.transform(insertZWSP(nv), SecurityContext.HTML));
43
+ if (this.sanitizePipe) {
44
+ setProperty(this.nativeElement, 'innerHTML', this.sanitizePipe.transform(insertZWSP(nv), SecurityContext.HTML));
45
+ }
46
+ else {
47
+ setProperty(this.nativeElement, 'textContent', insertZWSP(nv));
48
+ }
41
49
  }
42
50
  }
43
51
  else if (key === 'required') {
@@ -68,4 +76,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
68
76
  }, {
69
77
  type: Optional
70
78
  }] }] });
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2Jhc2ljL2xhYmVsL3NyYy9sYWJlbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFckYsT0FBTyxFQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDbEQsT0FBTyxFQUNILFlBQVksRUFFWixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixNQUFNLEVBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxXQUFXLENBQUM7OztBQUVuQyxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDaEMsTUFBTSxhQUFhLEdBQWtCO0lBQ2pDLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLFdBQVcsRUFBRSxZQUFZLENBQUMsWUFBWTtDQUN6QyxDQUFDO0FBVUYsTUFBTSxPQUFPLGNBQWUsU0FBUSxpQkFBaUI7YUFDMUMsb0JBQWUsR0FBRyxhQUFhLEVBQUUsQUFBbEIsQ0FBbUI7SUFFekMsWUFBWSxHQUFhLEVBQVUsWUFBeUIsRUFBMEMsZUFBb0I7UUFDdEgsS0FBSyxDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFEWixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUd4RCxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFHO1FBRXpCLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLGtDQUFrQztZQUNsQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNsRSxJQUFJLFNBQVMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDN0UsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFVLEVBQVUsRUFBRTtnQkFDdEMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO29CQUFFLE9BQU8sS0FBSyxDQUFDO2dCQUM1QyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ3RDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ3JELENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDO1lBQ0YsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDN0IsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN2RSxDQUFDO2lCQUFNLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNuQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLENBQUM7aUJBQU8sQ0FBQztnQkFDTCxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3BILENBQUM7UUFFTCxDQUFDO2FBQU0sSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDNUIsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7YUFBTSxDQUFDO1lBQ0osS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNMLENBQUM7K0dBbENRLGNBQWMsc0VBRytDLGtCQUFrQjttR0FIL0UsY0FBYyx3REFMWjtZQUNQLGtCQUFrQixDQUFDLGNBQWMsQ0FBQztTQUNyQzs7NEZBR1EsY0FBYztrQkFSMUIsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDZCxRQUFRLEVBQUUsV0FBVztvQkFDckIsU0FBUyxFQUFFO3dCQUNQLGtCQUFrQixnQkFBZ0I7cUJBQ3JDO29CQUNELFFBQVEsRUFBRSxTQUFTO2lCQUN0Qjs7MEJBSWtFLE1BQU07MkJBQUMsa0JBQWtCOzswQkFBRyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEluamVjdCwgSW5qZWN0b3IsIE9wdGlvbmFsLCBTZWN1cml0eUNvbnRleHR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge3NldFByb3BlcnR5LCB0b2dnbGVDbGFzc30gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBESVNQTEFZX1RZUEUsXG4gICAgSVdpZGdldENvbmZpZyxcbiAgICBwcm92aWRlQXNXaWRnZXRSZWYsXG4gICAgU2FuaXRpemVQaXBlLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50LFxuICAgIHN0eWxlclxufSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuaW1wb3J0IHtyZWdpc3RlclByb3BzfSBmcm9tICcuL2xhYmVsLnByb3BzJztcbmltcG9ydCB7aXNPYmplY3R9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLWxhYmVsJztcbmNvbnN0IFdJREdFVF9DT05GSUc6IElXaWRnZXRDb25maWcgPSB7XG4gICAgd2lkZ2V0VHlwZTogJ3dtLWxhYmVsJyxcbiAgICBob3N0Q2xhc3M6IERFRkFVTFRfQ0xTLFxuICAgIGRpc3BsYXlUeXBlOiBESVNQTEFZX1RZUEUuSU5MSU5FX0JMT0NLXG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ1t3bUxhYmVsXScsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihMYWJlbERpcmVjdGl2ZSlcbiAgICBdLFxuICAgIGV4cG9ydEFzOiAnd21MYWJlbCdcbn0pXG5leHBvcnQgY2xhc3MgTGFiZWxEaXJlY3RpdmUgZXh0ZW5kcyBTdHlsYWJsZUNvbXBvbmVudCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIGNvbnN0cnVjdG9yKGluajogSW5qZWN0b3IsIHByaXZhdGUgc2FuaXRpemVQaXBlOlNhbml0aXplUGlwZSwgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55KSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywgZXhwbGljaXRDb250ZXh0KTtcblxuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzKTtcbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92Pykge1xuXG4gICAgICAgIGlmIChrZXkgPT09ICdjYXB0aW9uJykge1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHRydXN0UGlwZSBzYWZlIHZhbHVlc1xuICAgICAgICAgICAgbGV0IGJpbmRDb250ZW50ID0gdGhpcy5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnY2FwdGlvbi5iaW5kJyk7XG4gICAgICAgICAgICBsZXQgc2FmZVZhbHVlID0gYmluZENvbnRlbnQgPyBudiAmJiBiaW5kQ29udGVudC5pbmNsdWRlcygndHJ1c3RBczonKSA6IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0WldTUCA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9cXGR7NSx9L2csIChtYXRjaCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2gucmVwbGFjZSgvKC57OX0pKD89LikvZywgJyQxXFx1MjAwQicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChpc09iamVjdChudikgJiYgIXNhZmVWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHNldFByb3BlcnR5KHRoaXMubmF0aXZlRWxlbWVudCwgJ3RleHRDb250ZW50JywgSlNPTi5zdHJpbmdpZnkobnYpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QobnYpICYmIHNhZmVWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHNldFByb3BlcnR5KHRoaXMubmF0aXZlRWxlbWVudCwgJ2lubmVySFRNTCcsIG52W09iamVjdC5rZXlzKG52KVswXV0pO1xuICAgICAgICAgICAgfSAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0UHJvcGVydHkodGhpcy5uYXRpdmVFbGVtZW50LCAnaW5uZXJIVE1MJywgdGhpcy5zYW5pdGl6ZVBpcGUudHJhbnNmb3JtKGluc2VydFpXU1AobnYpLCBTZWN1cml0eUNvbnRleHQuSFRNTCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAncmVxdWlyZWQnKSB7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsICdyZXF1aXJlZCcsIG52KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2Jhc2ljL2xhYmVsL3NyYy9sYWJlbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFckYsT0FBTyxFQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDbEQsT0FBTyxFQUNILFlBQVksRUFFWixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixNQUFNLEVBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxXQUFXLENBQUM7OztBQUVuQyxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDaEMsTUFBTSxhQUFhLEdBQWtCO0lBQ2pDLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLFdBQVcsRUFBRSxZQUFZLENBQUMsWUFBWTtDQUN6QyxDQUFDO0FBVUYsTUFBTSxPQUFPLGNBQWUsU0FBUSxpQkFBaUI7YUFDMUMsb0JBQWUsR0FBRyxhQUFhLEVBQUUsQUFBbEIsQ0FBbUI7SUFFekMsWUFBWSxHQUFhLEVBQVUsWUFBeUIsRUFBMEMsZUFBb0I7UUFDdEgsS0FBSyxDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFEWixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUd4RCxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFHO1FBQ3pCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDcEIsa0NBQWtDO1lBQ2xDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2xFLElBQUksU0FBUyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUM3RSxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQVUsRUFBVSxFQUFFO2dCQUN0QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7b0JBQUUsT0FBTyxLQUFLLENBQUM7Z0JBQzVDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDdEMsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDckQsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUM7WUFDRixJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUM3QixXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7aUJBQU0sSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ25DLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekUsQ0FBQztpQkFBTyxDQUFDO2dCQUNMLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUN4QixXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNoSCxDQUFDO3FCQUFNLENBQUM7b0JBQ0osV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNuRSxDQUFDO1lBQ0wsQ0FBQztRQUVMLENBQUM7YUFBTSxJQUFJLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM1QixXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEQsQ0FBQzthQUFNLENBQUM7WUFDSixLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4QyxDQUFDO0lBQ0wsQ0FBQzsrR0F4Q1EsY0FBYyxzRUFHK0Msa0JBQWtCO21HQUgvRSxjQUFjLHdEQUxaO1lBQ1Asa0JBQWtCLENBQUMsY0FBYyxDQUFDO1NBQ3JDOzs0RkFHUSxjQUFjO2tCQVIxQixTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNkLFFBQVEsRUFBRSxXQUFXO29CQUNyQixTQUFTLEVBQUU7d0JBQ1Asa0JBQWtCLGdCQUFnQjtxQkFDckM7b0JBQ0QsUUFBUSxFQUFFLFNBQVM7aUJBQ3RCOzswQkFJa0UsTUFBTTsyQkFBQyxrQkFBa0I7OzBCQUFHLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgSW5qZWN0LCBJbmplY3RvciwgT3B0aW9uYWwsIFNlY3VyaXR5Q29udGV4dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7c2V0UHJvcGVydHksIHRvZ2dsZUNsYXNzfSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge1xuICAgIERJU1BMQVlfVFlQRSxcbiAgICBJV2lkZ2V0Q29uZmlnLFxuICAgIHByb3ZpZGVBc1dpZGdldFJlZixcbiAgICBTYW5pdGl6ZVBpcGUsXG4gICAgU3R5bGFibGVDb21wb25lbnQsXG4gICAgc3R5bGVyXG59IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuXG5pbXBvcnQge3JlZ2lzdGVyUHJvcHN9IGZyb20gJy4vbGFiZWwucHJvcHMnO1xuaW1wb3J0IHtpc09iamVjdH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5jb25zdCBERUZBVUxUX0NMUyA9ICdhcHAtbGFiZWwnO1xuY29uc3QgV0lER0VUX0NPTkZJRzogSVdpZGdldENvbmZpZyA9IHtcbiAgICB3aWRnZXRUeXBlOiAnd20tbGFiZWwnLFxuICAgIGhvc3RDbGFzczogREVGQVVMVF9DTFMsXG4gICAgZGlzcGxheVR5cGU6IERJU1BMQVlfVFlQRS5JTkxJTkVfQkxPQ0tcbn07XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW3dtTGFiZWxdJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKExhYmVsRGlyZWN0aXZlKVxuICAgIF0sXG4gICAgZXhwb3J0QXM6ICd3bUxhYmVsJ1xufSlcbmV4cG9ydCBjbGFzcyBMYWJlbERpcmVjdGl2ZSBleHRlbmRzIFN0eWxhYmxlQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuXG4gICAgY29uc3RydWN0b3IoaW5qOiBJbmplY3RvciwgcHJpdmF0ZSBzYW5pdGl6ZVBpcGU6U2FuaXRpemVQaXBlLCBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnkpIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuXG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMpO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3Y/KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2NhcHRpb24nKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgdHJ1c3RQaXBlIHNhZmUgdmFsdWVzXG4gICAgICAgICAgICBsZXQgYmluZENvbnRlbnQgPSB0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjYXB0aW9uLmJpbmQnKTtcbiAgICAgICAgICAgIGxldCBzYWZlVmFsdWUgPSBiaW5kQ29udGVudCA/IG52ICYmIGJpbmRDb250ZW50LmluY2x1ZGVzKCd0cnVzdEFzOicpIDogZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBpbnNlcnRaV1NQID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1xcZHs1LH0vZywgKG1hdGNoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaC5yZXBsYWNlKC8oLns5fSkoPz0uKS9nLCAnJDFcXHUyMDBCJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KG52KSAmJiAhc2FmZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc2V0UHJvcGVydHkodGhpcy5uYXRpdmVFbGVtZW50LCAndGV4dENvbnRlbnQnLCBKU09OLnN0cmluZ2lmeShudikpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChudikgJiYgc2FmZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc2V0UHJvcGVydHkodGhpcy5uYXRpdmVFbGVtZW50LCAnaW5uZXJIVE1MJywgbnZbT2JqZWN0LmtleXMobnYpWzBdXSk7XG4gICAgICAgICAgICB9ICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zYW5pdGl6ZVBpcGUpIHtcbiAgICAgICAgICAgICAgICBzZXRQcm9wZXJ0eSh0aGlzLm5hdGl2ZUVsZW1lbnQsICdpbm5lckhUTUwnLCB0aGlzLnNhbml0aXplUGlwZS50cmFuc2Zvcm0oaW5zZXJ0WldTUChudiksIFNlY3VyaXR5Q29udGV4dC5IVE1MKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0UHJvcGVydHkodGhpcy5uYXRpdmVFbGVtZW50LCAndGV4dENvbnRlbnQnLCBpbnNlcnRaV1NQKG52KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAncmVxdWlyZWQnKSB7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsICdyZXF1aXJlZCcsIG52KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -35,6 +35,9 @@ class LabelDirective extends StylableComponent {
35
35
  styler(this.nativeElement, this);
36
36
  }
37
37
  onPropertyChange(key, nv, ov) {
38
+ if (this.isDestroyed) {
39
+ return;
40
+ }
38
41
  if (key === 'caption') {
39
42
  // Check for trustPipe safe values
40
43
  let bindContent = this.nativeElement.getAttribute('caption.bind');
@@ -53,7 +56,12 @@ class LabelDirective extends StylableComponent {
53
56
  setProperty(this.nativeElement, 'innerHTML', nv[Object.keys(nv)[0]]);
54
57
  }
55
58
  else {
56
- setProperty(this.nativeElement, 'innerHTML', this.sanitizePipe.transform(insertZWSP(nv), SecurityContext.HTML));
59
+ if (this.sanitizePipe) {
60
+ setProperty(this.nativeElement, 'innerHTML', this.sanitizePipe.transform(insertZWSP(nv), SecurityContext.HTML));
61
+ }
62
+ else {
63
+ setProperty(this.nativeElement, 'textContent', insertZWSP(nv));
64
+ }
57
65
  }
58
66
  }
59
67
  else if (key === 'required') {
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../projects/components/widgets/basic/label/src/label.props.ts","../../../../../projects/components/widgets/basic/label/src/label.directive.ts","../../../../../projects/components/widgets/basic/label/src/index.ts"],"sourcesContent":["import {PROP_ANY, PROP_BOOLEAN, PROP_STRING, register} from '@wm/components/base';\n\nexport const registerProps = () => {\n register(\n 'wm-label',\n new Map(\n [\n ['animation', PROP_STRING],\n ['caption', {value: 'Label', ...PROP_STRING}],\n ['class', PROP_STRING],\n ['conditionalclass', PROP_ANY],\n ['conditionalstyle', PROP_ANY],\n ['type', PROP_STRING],\n ['notag', PROP_BOOLEAN],\n ['hint', PROP_STRING],\n ['name', PROP_STRING],\n ['required', PROP_BOOLEAN],\n ['show', {value: true, ...PROP_BOOLEAN}]\n ]\n )\n );\n};\n","import {Directive, Inject, Injector, Optional, SecurityContext} from '@angular/core';\n\nimport {setProperty, toggleClass} from '@wm/core';\nimport {\n DISPLAY_TYPE,\n IWidgetConfig,\n provideAsWidgetRef,\n SanitizePipe,\n StylableComponent,\n styler\n} from '@wm/components/base';\n\nimport {registerProps} from './label.props';\nimport {isObject} from \"lodash-es\";\n\nconst DEFAULT_CLS = 'app-label';\nconst WIDGET_CONFIG: IWidgetConfig = {\n widgetType: 'wm-label',\n hostClass: DEFAULT_CLS,\n displayType: DISPLAY_TYPE.INLINE_BLOCK\n};\n\n@Directive({\n standalone: true,\n selector: '[wmLabel]',\n providers: [\n provideAsWidgetRef(LabelDirective)\n ],\n exportAs: 'wmLabel'\n})\nexport class LabelDirective extends StylableComponent {\n static initializeProps = registerProps();\n\n constructor(inj: Injector, private sanitizePipe:SanitizePipe, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any) {\n super(inj, WIDGET_CONFIG, explicitContext);\n\n styler(this.nativeElement, this);\n }\n\n onPropertyChange(key, nv, ov?) {\n\n if (key === 'caption') {\n // Check for trustPipe safe values\n let bindContent = this.nativeElement.getAttribute('caption.bind');\n let safeValue = bindContent ? nv && bindContent.includes('trustAs:') : false;\n const insertZWSP = (value: any): string => {\n if (typeof value !== 'string') return value;\n return value.replace(/\\d{5,}/g, (match) => {\n return match.replace(/(.{9})(?=.)/g, '$1\\u200B');\n });\n };\n if (isObject(nv) && !safeValue) {\n setProperty(this.nativeElement, 'textContent', JSON.stringify(nv));\n } else if (isObject(nv) && safeValue) {\n setProperty(this.nativeElement, 'innerHTML', nv[Object.keys(nv)[0]]);\n } else {\n setProperty(this.nativeElement, 'innerHTML', this.sanitizePipe.transform(insertZWSP(nv), SecurityContext.HTML));\n }\n\n } else if (key === 'required') {\n toggleClass(this.nativeElement, 'required', nv);\n } else {\n super.onPropertyChange(key, nv, ov);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../projects/components/widgets/basic/label/src/label.props.ts","../../../../../projects/components/widgets/basic/label/src/label.directive.ts","../../../../../projects/components/widgets/basic/label/src/index.ts"],"sourcesContent":["import {PROP_ANY, PROP_BOOLEAN, PROP_STRING, register} from '@wm/components/base';\n\nexport const registerProps = () => {\n register(\n 'wm-label',\n new Map(\n [\n ['animation', PROP_STRING],\n ['caption', {value: 'Label', ...PROP_STRING}],\n ['class', PROP_STRING],\n ['conditionalclass', PROP_ANY],\n ['conditionalstyle', PROP_ANY],\n ['type', PROP_STRING],\n ['notag', PROP_BOOLEAN],\n ['hint', PROP_STRING],\n ['name', PROP_STRING],\n ['required', PROP_BOOLEAN],\n ['show', {value: true, ...PROP_BOOLEAN}]\n ]\n )\n );\n};\n","import {Directive, Inject, Injector, Optional, SecurityContext} from '@angular/core';\n\nimport {setProperty, toggleClass} from '@wm/core';\nimport {\n DISPLAY_TYPE,\n IWidgetConfig,\n provideAsWidgetRef,\n SanitizePipe,\n StylableComponent,\n styler\n} from '@wm/components/base';\n\nimport {registerProps} from './label.props';\nimport {isObject} from \"lodash-es\";\n\nconst DEFAULT_CLS = 'app-label';\nconst WIDGET_CONFIG: IWidgetConfig = {\n widgetType: 'wm-label',\n hostClass: DEFAULT_CLS,\n displayType: DISPLAY_TYPE.INLINE_BLOCK\n};\n\n@Directive({\n standalone: true,\n selector: '[wmLabel]',\n providers: [\n provideAsWidgetRef(LabelDirective)\n ],\n exportAs: 'wmLabel'\n})\nexport class LabelDirective extends StylableComponent {\n static initializeProps = registerProps();\n\n constructor(inj: Injector, private sanitizePipe:SanitizePipe, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any) {\n super(inj, WIDGET_CONFIG, explicitContext);\n\n styler(this.nativeElement, this);\n }\n\n onPropertyChange(key, nv, ov?) {\n if (this.isDestroyed) {\n return;\n }\n if (key === 'caption') {\n // Check for trustPipe safe values\n let bindContent = this.nativeElement.getAttribute('caption.bind');\n let safeValue = bindContent ? nv && bindContent.includes('trustAs:') : false;\n const insertZWSP = (value: any): string => {\n if (typeof value !== 'string') return value;\n return value.replace(/\\d{5,}/g, (match) => {\n return match.replace(/(.{9})(?=.)/g, '$1\\u200B');\n });\n };\n if (isObject(nv) && !safeValue) {\n setProperty(this.nativeElement, 'textContent', JSON.stringify(nv));\n } else if (isObject(nv) && safeValue) {\n setProperty(this.nativeElement, 'innerHTML', nv[Object.keys(nv)[0]]);\n } else {\n if (this.sanitizePipe) {\n setProperty(this.nativeElement, 'innerHTML', this.sanitizePipe.transform(insertZWSP(nv), SecurityContext.HTML));\n } else {\n setProperty(this.nativeElement, 'textContent', insertZWSP(nv));\n }\n }\n\n } else if (key === 'required') {\n toggleClass(this.nativeElement, 'required', nv);\n } else {\n super.onPropertyChange(key, nv, ov);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -186,8 +186,15 @@
186
186
  this.setDataGridOption('colDefs', i2.getClonedObject(this.fieldDefs));
187
187
  }
188
188
  // If data and colDefs are present, call on before data render event
189
+ // Note: Errors in beforedatarender should not prevent table rendering
189
190
  if (!this.isdynamictable && !lodashEs.isEmpty(newValue) && gridOptions.colDefs.length) {
190
- this.invokeEventCallback('beforedatarender', { $data: this._gridData, $columns: this.columns, data: this._gridData, columns: this.columns });
191
+ try {
192
+ this.invokeEventCallback('beforedatarender', { $data: this._gridData, $columns: this.columns, data: this._gridData, columns: this.columns });
193
+ }
194
+ catch (error) {
195
+ // Log error but continue with rendering - beforedatarender errors should not block table rendering
196
+ console.warn('Error in beforedatarender event callback, continuing with table rendering:', error);
197
+ }
191
198
  }
192
199
  this.setDataGridOption('data', i2.getClonedObject(this._gridData));
193
200
  }
@@ -580,7 +587,7 @@
580
587
  this.prevData = i2.getClonedObject(row);
581
588
  },
582
589
  afterRowUpdate: (row, e, callBack, options) => {
583
- this.updateRecord(lodashEs.extend({}, options, { row, 'prevData': this.prevData, 'event': e, 'callBack': callBack }));
590
+ this.updateRecord(lodashEs.extend({}, options, { row, 'prevData': options.rowindex ? options.rowindex : this.prevData, 'event': e, 'callBack': callBack }));
584
591
  },
585
592
  onBeforeRowUpdate: (row, e, options) => {
586
593
  return this.invokeEventCallback('beforerowupdate', { $event: e, $data: row, row, options: options });
@@ -1234,6 +1241,10 @@
1234
1241
  return this.actualPageSize || 5;
1235
1242
  }
1236
1243
  watchVariableDataSet(newVal) {
1244
+ // Guard against component destruction
1245
+ if (this.isDestroyed) {
1246
+ return;
1247
+ }
1237
1248
  let result;
1238
1249
  // Check for Variable filters if applied
1239
1250
  if (this.gridOptions.isNavTypeScrollOrOndemand()) {
@@ -1291,6 +1302,12 @@
1291
1302
  }
1292
1303
  /*Return if data is invalid.*/
1293
1304
  if (!this.isDataValid()) {
1305
+ // If data is invalid and variableInflight is still true, clear loading state
1306
+ // This prevents tables from getting stuck in loading when data is invalid
1307
+ if (this.variableInflight) {
1308
+ this.variableInflight = false;
1309
+ this.setGridData([]);
1310
+ }
1294
1311
  return;
1295
1312
  }
1296
1313
  // If value is empty or in studio mode, dont enable the navigation
@@ -1318,7 +1335,13 @@
1318
1335
  // @ts-ignore
1319
1336
  if (!lodashEs.isObject(newVal) || newVal === '' || (newVal && newVal.dataValue === '')) {
1320
1337
  if (!this.variableInflight) {
1321
- // If variable has finished loading and resultSet is empty, ender empty data
1338
+ // If variable has finished loading and resultSet is empty, render empty data
1339
+ this.setGridData([]);
1340
+ }
1341
+ else {
1342
+ // If variableInflight is still true but we have invalid/empty data, clear loading state
1343
+ // This handles cases where data never arrives or is invalid
1344
+ this.variableInflight = false;
1322
1345
  this.setGridData([]);
1323
1346
  }
1324
1347
  return;
@@ -1328,13 +1351,143 @@
1328
1351
  }
1329
1352
  }
1330
1353
  ngOnDestroy() {
1354
+ // MEMORY LEAK FIX: Remove document click listener
1331
1355
  document.removeEventListener('click', this.documentClickBind);
1356
+ // MEMORY LEAK FIX: Unsubscribe from navigator watches
1332
1357
  if (this.navigatorResultWatch) {
1333
1358
  this.navigatorResultWatch.unsubscribe();
1359
+ this.navigatorResultWatch = null;
1334
1360
  }
1335
1361
  if (this.navigatorMaxResultWatch) {
1336
1362
  this.navigatorMaxResultWatch.unsubscribe();
1363
+ this.navigatorMaxResultWatch = null;
1364
+ }
1365
+ // MEMORY LEAK FIX: Clear all ViewContainerRef embedded views
1366
+ // These hold references to row data, custom expressions, and inline widgets
1367
+ if (this.customExprViewRef) {
1368
+ this.customExprViewRef.clear();
1369
+ }
1370
+ if (this.rowActionsViewRef) {
1371
+ this.rowActionsViewRef.clear();
1372
+ }
1373
+ if (this.filterViewRef) {
1374
+ this.filterViewRef.clear();
1375
+ }
1376
+ if (this.inlineEditViewRef) {
1377
+ this.inlineEditViewRef.clear();
1378
+ }
1379
+ if (this.inlineEditNewViewRef) {
1380
+ this.inlineEditNewViewRef.clear();
1337
1381
  }
1382
+ if (this.rowDetailViewRef) {
1383
+ this.rowDetailViewRef.clear();
1384
+ }
1385
+ if (this.rowExpansionActionViewRef) {
1386
+ this.rowExpansionActionViewRef.clear();
1387
+ }
1388
+ if (this.dynamicTableRef) {
1389
+ this.dynamicTableRef.clear();
1390
+ }
1391
+ // MEMORY LEAK FIX: Clear compiled template caches
1392
+ this.rowActionsCompiledTl = {};
1393
+ this.rowFilterCompliedTl = {};
1394
+ this.inlineCompliedTl = {};
1395
+ this.inlineNewCompliedTl = {};
1396
+ this.customExprCompiledTl = {};
1397
+ this.customExprCompiledSummaryTl = {};
1398
+ this.rowDefInstances = {};
1399
+ this.rowDefMap = {};
1400
+ this.rowExpansionActionTl = {};
1401
+ // MEMORY LEAK FIX: Clear dynamic context
1402
+ if (this._dynamicContext) {
1403
+ Object.keys(this._dynamicContext).forEach(key => {
1404
+ delete this._dynamicContext[key];
1405
+ });
1406
+ this._dynamicContext = null;
1407
+ }
1408
+ // MEMORY LEAK FIX: Clear data arrays
1409
+ this._gridData = [];
1410
+ this.items = [];
1411
+ this.selectedItems = [];
1412
+ this.fieldDefs = [];
1413
+ this.fullFieldDefs = [];
1414
+ this.gridData = [];
1415
+ this.__fullData = null;
1416
+ // MEMORY LEAK FIX: Destroy jQuery datatable widget before clearing gridOptions
1417
+ if (this.datagridElement && this.datagridElement.datatable) {
1418
+ try {
1419
+ this.datagridElement.datatable('destroy');
1420
+ }
1421
+ catch (e) {
1422
+ // Ignore errors during destroy
1423
+ }
1424
+ }
1425
+ // MEMORY LEAK FIX: Clear gridOptions to release all function closures and data
1426
+ // gridOptions holds many closures that capture 'this' and prevent GC
1427
+ if (this.gridOptions) {
1428
+ // Clear data array
1429
+ if (this.gridOptions.data) {
1430
+ this.gridOptions.data = [];
1431
+ }
1432
+ // Clear column definitions
1433
+ if (this.gridOptions.colDefs) {
1434
+ this.gridOptions.colDefs = [];
1435
+ }
1436
+ // Clear row actions
1437
+ if (this.gridOptions.rowActions) {
1438
+ this.gridOptions.rowActions = [];
1439
+ }
1440
+ // Clear header config
1441
+ if (this.gridOptions.headerConfig) {
1442
+ this.gridOptions.headerConfig = [];
1443
+ }
1444
+ // Nullify all function references to break closures
1445
+ Object.keys(this.gridOptions).forEach(key => {
1446
+ if (typeof this.gridOptions[key] === 'function') {
1447
+ this.gridOptions[key] = null;
1448
+ }
1449
+ });
1450
+ }
1451
+ // MEMORY LEAK FIX: Clear other data structures
1452
+ this.columns = {};
1453
+ this.formfields = {};
1454
+ this.rowFilter = {};
1455
+ this.actions = [];
1456
+ this._actions = { header: [], footer: [] };
1457
+ this.exportOptions = [];
1458
+ this.headerConfig = [];
1459
+ this.rowActions = [];
1460
+ // MEMORY LEAK FIX: Clear all @ContentChildren QueryLists holding template references
1461
+ // These QueryLists hold TemplateRef instances that create circular references to the parent LView
1462
+ if (this.rowActionTmpl) {
1463
+ this.rowActionTmpl.reset([]);
1464
+ }
1465
+ if (this.filterTmpl) {
1466
+ this.filterTmpl.reset([]);
1467
+ }
1468
+ if (this.inlineWidgetTmpl) {
1469
+ this.inlineWidgetTmpl.reset([]);
1470
+ }
1471
+ if (this.inlineWidgetNewTmpl) {
1472
+ this.inlineWidgetNewTmpl.reset([]);
1473
+ }
1474
+ if (this.customExprTmpl) {
1475
+ this.customExprTmpl.reset([]);
1476
+ }
1477
+ if (this.rowExpansionActionTmpl) {
1478
+ this.rowExpansionActionTmpl.reset([]);
1479
+ }
1480
+ // MEMORY LEAK FIX: Clear @ContentChild template reference
1481
+ this.rowExpansionTmpl = null;
1482
+ // MEMORY LEAK FIX: Complete and clear subjects
1483
+ if (this.selectedItemChange) {
1484
+ this.selectedItemChange.complete();
1485
+ this.selectedItemChange = null;
1486
+ }
1487
+ // MEMORY LEAK FIX: Clear ViewChild references
1488
+ this.dataNavigator = null;
1489
+ this._tableElement = null;
1490
+ // console.log("table component destroyed");
1338
1491
  super.ngOnDestroy();
1339
1492
  }
1340
1493
  addRowIndex(row) {
@@ -1405,6 +1558,9 @@
1405
1558
  if (!key.endsWith('_filter') && ((key.endsWith('_new') && newRow) || (!key.endsWith('_new') && !newRow))) {
1406
1559
  ctrls[key].setValue('');
1407
1560
  this.resetFormControl(ctrls[key]);
1561
+ // MEMORY LEAK FIX: Clear validators to release references
1562
+ ctrls[key].clearValidators();
1563
+ ctrls[key].clearAsyncValidators();
1408
1564
  }
1409
1565
  });
1410
1566
  }
@@ -1724,7 +1880,14 @@
1724
1880
  defaultFieldDefs.forEach(col => {
1725
1881
  this.columns[col.field] = col;
1726
1882
  });
1727
- this.invokeEventCallback('beforedatarender', { $data: data, $columns: this.columns, data: data, columns: this.columns });
1883
+ // Note: Errors in beforedatarender should not prevent table rendering
1884
+ try {
1885
+ this.invokeEventCallback('beforedatarender', { $data: data, $columns: this.columns, data: data, columns: this.columns });
1886
+ }
1887
+ catch (error) {
1888
+ // Log error but continue with rendering - beforedatarender errors should not block table rendering
1889
+ console.warn('Error in beforedatarender event callback, continuing with table rendering:', error);
1890
+ }
1728
1891
  defaultFieldDefs = [];
1729
1892
  // Apply the changes made by the user
1730
1893
  lodashEs.forEach(this.columns, val => {
@@ -1763,23 +1926,30 @@
1763
1926
  return sortExp || '';
1764
1927
  }
1765
1928
  onPropertyChange(key, nv, ov) {
1929
+ // Guard against property changes after component destruction
1930
+ if (this.isDestroyed) {
1931
+ return;
1932
+ }
1766
1933
  let enableNewRow;
1767
1934
  switch (key) {
1768
1935
  case 'datasource':
1769
1936
  // Fix for [WMS-23653] when startUpdate is false (request on page load property is unchecked),
1770
1937
  // then set status msg as "No data found"
1771
- if (this.allowpagesizechange) {
1938
+ if (this.allowpagesizechange && this.datasource) {
1772
1939
  this.datasource.maxResults = this.pagesize || this.datasource.maxResults;
1773
1940
  }
1774
- if (nv.startUpdate === false) {
1941
+ if (nv && nv.startUpdate === false) {
1775
1942
  this.variableInflight = false;
1776
1943
  this.callDataGridMethod('setStatus', 'nodata', this.nodatamessage);
1777
1944
  }
1778
- if (lodashEs.get(this.datasource, 'category') !== 'wm.Variable') {
1945
+ if (this.datasource && lodashEs.get(this.datasource, 'category') !== 'wm.Variable') {
1779
1946
  this.headerselectall = false;
1780
1947
  this.setDataGridOption("headerselectall", false);
1781
1948
  }
1782
- this.watchVariableDataSet(this.dataset);
1949
+ // Process dataset when datasource is set, especially if dataset was previously skipped
1950
+ if (this.datasource && this.dataset !== undefined) {
1951
+ this.watchVariableDataSet(this.dataset);
1952
+ }
1783
1953
  this.onDataSourceChange();
1784
1954
  break;
1785
1955
  case 'dataset':
@@ -1787,6 +1957,12 @@
1787
1957
  this.gridOptions.setIsNextPageData(false);
1788
1958
  }
1789
1959
  if (this.binddatasource && !this.datasource) {
1960
+ // If datasource is not set yet, clear loading state and show no data
1961
+ // This prevents tables from being stuck in loading state
1962
+ if (this.variableInflight) {
1963
+ this.variableInflight = false;
1964
+ this.callDataGridMethod('setStatus', 'nodata', this.nodatamessage);
1965
+ }
1790
1966
  return;
1791
1967
  }
1792
1968
  // if table is inside list then table dataset will be set as "item.XXX" and there is no datasource.
@@ -1890,9 +2066,11 @@
1890
2066
  this.allowpagesizechange = nv;
1891
2067
  break;
1892
2068
  case 'pagesizeoptions':
1893
- this.gridOptions.pagesizeoptions = nv;
1894
- this.pagesizeoptions = nv;
1895
- this.setDefaultPageSize(nv);
2069
+ this.prevPagesizeoptions = this.sanitizeCommaSeparatedIntegers(ov);
2070
+ this.gridOptions.pagesizeoptions = this.sanitizeCommaSeparatedIntegers(nv);
2071
+ this.pagesizeoptions = this.sanitizeCommaSeparatedIntegers(nv);
2072
+ if (this.allowpagesizechange)
2073
+ this.setDefaultPageSize(nv);
1896
2074
  break;
1897
2075
  case 'multiselecttitle':
1898
2076
  this.setDataGridOption('multiselecttitle', nv);
@@ -1936,12 +2114,41 @@
1936
2114
  this.pagesize = nv;
1937
2115
  }
1938
2116
  this.updatedPageSize = nv;
2117
+ if (this.isPageSizeOptionsChanged()) {
2118
+ this.dataNavigator.defaultPageSizeOptions = this.pagesizeoptions?.split(',').map(Number).sort((a, b) => a - b) || [];
2119
+ this.dataNavigator.pageSizeOptions = [...this.dataNavigator.defaultPageSizeOptions];
2120
+ }
1939
2121
  }
1940
2122
  this.dataNavigator.options = {
1941
2123
  maxResults: nv
1942
2124
  };
1943
2125
  this.dataNavigator.widget.maxResults = nv;
1944
2126
  this.dataNavigator.maxResults = nv;
2127
+ if (this.datasource) {
2128
+ this.datasource.maxResults = this.pagesize || this.datasource.maxResults;
2129
+ }
2130
+ }
2131
+ isPageSizeOptionsChanged() {
2132
+ return !lodashEs.isEqual(this.prevPagesizeoptions, this.pagesizeoptions);
2133
+ }
2134
+ selectPageSize(pagesize) {
2135
+ if (!this.allowpagesizechange && !pagesize)
2136
+ return;
2137
+ if (pagesize < this.dataNavigator.pageSizeOptions[0] || pagesize > this.dataNavigator.pageSizeOptions[this.dataNavigator.pageSizeOptions.length - 1]
2138
+ || !this.dataNavigator.pageSizeOptions.includes(Number(pagesize))) {
2139
+ pagesize = this.dataNavigator.pageSizeOptions[0];
2140
+ }
2141
+ this.dataNavigator.onPageSizeChange(undefined, pagesize);
2142
+ }
2143
+ sanitizeCommaSeparatedIntegers(input) {
2144
+ if (!input)
2145
+ return "";
2146
+ const uniqueNumbers = Array.from(new Set(input
2147
+ .split(",")
2148
+ .map(v => v.trim())
2149
+ .filter(v => /^-?\d+$/.test(v))
2150
+ .map(v => Math.abs(parseInt(v, 10)))));
2151
+ return uniqueNumbers.join(",");
1945
2152
  }
1946
2153
  onDataSourceChange() {
1947
2154
  this.fieldDefs.forEach(col => {