@wavemaker/app-ng-runtime 11.14.1-3.6306 → 11.14.1-6.6324
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/components/base/bundles/index.umd.js +7 -75
- package/components/base/esm2022/pipes/custom-pipes.mjs +1 -1
- package/components/base/esm2022/widgets/common/base/base.component.mjs +7 -68
- package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +2 -4
- package/components/base/esm2022/widgets/framework/property-change-handler.mjs +2 -7
- package/components/base/fesm2022/index.mjs +8 -76
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/basic/label/bundles/index.umd.js +1 -9
- package/components/basic/label/esm2022/label.directive.mjs +2 -10
- package/components/basic/label/fesm2022/index.mjs +1 -9
- package/components/basic/label/fesm2022/index.mjs.map +1 -1
- package/components/data/table/bundles/index.umd.js +11 -218
- package/components/data/table/esm2022/table.component.mjs +12 -219
- package/components/data/table/fesm2022/index.mjs +11 -218
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/data/table/table.component.d.ts +2 -6
- package/components/navigation/menu/bundles/index.umd.js +0 -5
- package/components/navigation/menu/esm2022/menu.component.mjs +1 -6
- package/components/navigation/menu/fesm2022/index.mjs +0 -5
- package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
- package/components/navigation/popover/bundles/index.umd.js +6 -6
- package/components/navigation/popover/esm2022/popover.component.mjs +4 -4
- package/components/navigation/popover/fesm2022/index.mjs +3 -3
- package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
- package/components/navigation/popover/popover.component.d.ts +0 -6
- package/core/bundles/index.umd.js +82 -326
- package/core/esm2022/public_api.mjs +2 -2
- package/core/esm2022/utils/watcher.mjs +81 -323
- package/core/fesm2022/index.mjs +84 -326
- package/core/fesm2022/index.mjs.map +1 -1
- package/core/public_api.d.ts +1 -1
- package/core/utils/watcher.d.ts +5 -26
- package/npm-shrinkwrap.json +2 -2
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +0 -35
- package/runtime/base/esm2022/components/app-component/app.component.mjs +2 -7
- package/runtime/base/esm2022/components/base-page.component.mjs +2 -9
- package/runtime/base/esm2022/components/base-partial.component.mjs +2 -10
- package/runtime/base/esm2022/components/base-prefab.component.mjs +2 -10
- package/runtime/base/esm2022/components/base-spa-page.component.mjs +2 -9
- package/runtime/base/fesm2022/index.mjs +1 -36
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/scripts/datatable/datatable.js +2 -19
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i1 from '@wm/core';
|
|
2
|
-
import { FormWidgetType, checkIsCustomPipeExpression, $parseExpr, isValidWebURL, _WM_APP_PROJECT, isValidImageUrl, encodeUrl, stringStartsWith, prettifyLabel, deHyphenate, initCaps, getClonedObject, DataSource, debounce, processFilterExpBindNode, isDefined, MatchMode, $parseEvent, isEqualWithFields, getFormattedDate, isAndroid, isNumberType, DataType, setCSS, IDGenerator, toBoolean, isChangeFromWatch, $unwatch, resetChangeFromWatch, isObject as isObject$1, toDimension, $appDigest, removeClass, addClass, setCSSFromObj, App, findParent, setAttr, switchClass, removeAttr, $invokeWatchers, $watch,
|
|
2
|
+
import { FormWidgetType, checkIsCustomPipeExpression, $parseExpr, isValidWebURL, _WM_APP_PROJECT, isValidImageUrl, encodeUrl, stringStartsWith, prettifyLabel, deHyphenate, initCaps, getClonedObject, DataSource, debounce, processFilterExpBindNode, isDefined, MatchMode, $parseEvent, isEqualWithFields, getFormattedDate, isAndroid, isNumberType, DataType, setCSS, IDGenerator, toBoolean, isChangeFromWatch, $unwatch, resetChangeFromWatch, isObject as isObject$1, toDimension, $appDigest, removeClass, addClass, setCSSFromObj, App, findParent, setAttr, switchClass, removeAttr, $invokeWatchers, $watch, findValueOf, validateAccessRoles, ComponentType, noop as noop$1, VALIDATOR, isIos, isMobile, hasOffsetStr, AbstractI18nService, CURRENCY_INFO, replace as replace$1, transformFileURI, isLargeTabletLandscape, isLargeTabletPortrait } from '@wm/core';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { InjectionToken, forwardRef, ElementRef, inject, ViewContainerRef, Injector, Injectable, Inject, Optional, Directive, Self, ContentChildren, Attribute, Input, Component, Pipe, SecurityContext } from '@angular/core';
|
|
5
5
|
import { createFocusTrap } from '@wavemaker/focus-trap';
|
|
@@ -1994,12 +1994,7 @@ const parseValue = (key, value, type) => {
|
|
|
1994
1994
|
return toBoolean(value, isBooleanAttr(key) && key);
|
|
1995
1995
|
}
|
|
1996
1996
|
if (type === PROP_TYPE.NUMBER) {
|
|
1997
|
-
|
|
1998
|
-
// Fix NaN for tabindex - default to 0 if value is invalid
|
|
1999
|
-
if (key === 'tabindex' && isNaN(numValue)) {
|
|
2000
|
-
return value === null || value === undefined || value === '' ? 0 : numValue;
|
|
2001
|
-
}
|
|
2002
|
-
return numValue;
|
|
1997
|
+
return +value;
|
|
2003
1998
|
}
|
|
2004
1999
|
return value;
|
|
2005
2000
|
};
|
|
@@ -2323,26 +2318,10 @@ class BaseComponent {
|
|
|
2323
2318
|
this.propertyChange.subscribe(({ key, nv, ov }) => fn(key, nv, ov));
|
|
2324
2319
|
}
|
|
2325
2320
|
registerDestroyListener(fn, ctx) {
|
|
2326
|
-
if (!fn) {
|
|
2327
|
-
return;
|
|
2328
|
-
}
|
|
2329
2321
|
if (ctx) {
|
|
2330
2322
|
fn = fn.bind(ctx);
|
|
2331
2323
|
}
|
|
2332
|
-
this.destroy.subscribe(() => { }, () => { }, () =>
|
|
2333
|
-
try {
|
|
2334
|
-
if (fn && typeof fn === 'function') {
|
|
2335
|
-
fn();
|
|
2336
|
-
}
|
|
2337
|
-
}
|
|
2338
|
-
catch (e) {
|
|
2339
|
-
// Silently handle cleanup errors to prevent test failures
|
|
2340
|
-
// These are typically non-critical cleanup issues like:
|
|
2341
|
-
// - Subscriptions already unsubscribed
|
|
2342
|
-
// - Null references during cleanup
|
|
2343
|
-
// - Components already destroyed
|
|
2344
|
-
}
|
|
2345
|
-
});
|
|
2324
|
+
this.destroy.subscribe(() => { }, () => { }, () => fn());
|
|
2346
2325
|
}
|
|
2347
2326
|
getDisplayType() {
|
|
2348
2327
|
return this.displayType;
|
|
@@ -2508,24 +2487,14 @@ class BaseComponent {
|
|
|
2508
2487
|
// the promise returned by the variable call.
|
|
2509
2488
|
boundFnVal = boundFn();
|
|
2510
2489
|
if (boundFnVal instanceof Promise) {
|
|
2511
|
-
return boundFnVal.then(response => response, err =>
|
|
2512
|
-
const widgetName = widget.name || widget.widgetId || 'unknown';
|
|
2513
|
-
console.error(`Error in promise returned by event callback "${eventName}" on widget "${widgetName}":`, err);
|
|
2514
|
-
return err;
|
|
2515
|
-
});
|
|
2490
|
+
return boundFnVal.then(response => response, err => err);
|
|
2516
2491
|
}
|
|
2517
2492
|
else {
|
|
2518
2493
|
return boundFnVal;
|
|
2519
2494
|
}
|
|
2520
2495
|
}
|
|
2521
2496
|
catch (e) {
|
|
2522
|
-
|
|
2523
|
-
const widgetName = widget.name || widget.widgetId || 'unknown';
|
|
2524
|
-
const errorMessage = e.message || String(e);
|
|
2525
|
-
console.error(`Error executing event callback "${eventName}" on widget "${widgetName}":`, errorMessage);
|
|
2526
|
-
console.error('Event expression context:', { eventName, widgetName, locals });
|
|
2527
|
-
// Re-throw to maintain original behavior but with better context
|
|
2528
|
-
throw e;
|
|
2497
|
+
console.error(e);
|
|
2529
2498
|
}
|
|
2530
2499
|
};
|
|
2531
2500
|
if (child && !child.widget.eventHandlers)
|
|
@@ -2549,17 +2518,11 @@ class BaseComponent {
|
|
|
2549
2518
|
if (!child)
|
|
2550
2519
|
this.initState.delete(propName);
|
|
2551
2520
|
let viewParent = child ? child.widget.viewParent.viewParent : this.viewParent, context = child ? child.widget.context : this.context, widget = child ? child.widget : this.widget, isMuted = child ? child.widget.isMuted : this.isMuted, widgetProps = child ? child.widget.widgetProps : this.widgetProps, widgetId = child ? child.widget.widgetId : this.widgetId;
|
|
2552
|
-
// OPTIMIZATION: Apply throttling for non-critical properties
|
|
2553
|
-
const watchConfig = widgetProps.get(propName) || {};
|
|
2554
|
-
const throttledProps = ['class', 'style', 'ngclass', 'ngstyle'];
|
|
2555
|
-
if (throttledProps.includes(propName.toLowerCase())) {
|
|
2556
|
-
watchConfig.throttle = 100; // Throttle to 100ms for style/class properties
|
|
2557
|
-
}
|
|
2558
2521
|
this.registerDestroyListener($watch(expr, viewParent, context, nv => {
|
|
2559
2522
|
if (propName.startsWith('base-') && widget.updateData)
|
|
2560
2523
|
widget.updateData(propName, nv);
|
|
2561
2524
|
widget[propName] = nv;
|
|
2562
|
-
}, getWatchIdentifier(widgetId, propName), propName === 'datasource',
|
|
2525
|
+
}, getWatchIdentifier(widgetId, propName), propName === 'datasource', widgetProps.get(propName), () => isMuted));
|
|
2563
2526
|
}
|
|
2564
2527
|
/**
|
|
2565
2528
|
* Remove watch on the bound property
|
|
@@ -2578,18 +2541,7 @@ class BaseComponent {
|
|
|
2578
2541
|
const fn = callbackInfo.callback;
|
|
2579
2542
|
const locals = callbackInfo.locals || {};
|
|
2580
2543
|
if (fn) {
|
|
2581
|
-
|
|
2582
|
-
return fn(Object.assign(locals, extraLocals));
|
|
2583
|
-
}
|
|
2584
|
-
catch (error) {
|
|
2585
|
-
// Log error with context information for debugging
|
|
2586
|
-
const widgetName = this.name || this.widgetId || 'unknown';
|
|
2587
|
-
const errorMessage = error?.message || String(error);
|
|
2588
|
-
console.error(`Error executing event callback "${eventName}" on widget "${widgetName}":`, errorMessage);
|
|
2589
|
-
console.error('Full error:', error);
|
|
2590
|
-
// Re-throw to maintain original behavior but with better error context
|
|
2591
|
-
throw error;
|
|
2592
|
-
}
|
|
2544
|
+
return fn(Object.assign(locals, extraLocals));
|
|
2593
2545
|
}
|
|
2594
2546
|
}
|
|
2595
2547
|
}
|
|
@@ -2809,24 +2761,6 @@ class BaseComponent {
|
|
|
2809
2761
|
this.propertyChange.complete();
|
|
2810
2762
|
this.destroy.complete();
|
|
2811
2763
|
this.isAttached = false;
|
|
2812
|
-
// MEMORY LEAK FIX: Unwatch all watchers for this widget
|
|
2813
|
-
// This ensures all watchers registered for this component are cleaned up
|
|
2814
|
-
if (this.widgetId) {
|
|
2815
|
-
const removedCount = $unwatchAll(this.widgetId);
|
|
2816
|
-
if (removedCount > 0) {
|
|
2817
|
-
console.log(`🧹 Cleaned up ${removedCount} watcher(s) for widget ${this.widgetId}`);
|
|
2818
|
-
}
|
|
2819
|
-
}
|
|
2820
|
-
// MEMORY LEAK FIX: Clear context to release references to parent scope data
|
|
2821
|
-
// The context object holds references to repeater items, wizard steps, etc.
|
|
2822
|
-
// which can retain large amounts of data even after component destruction
|
|
2823
|
-
if (this.context) {
|
|
2824
|
-
// Clear all properties from context
|
|
2825
|
-
Object.keys(this.context).forEach(key => {
|
|
2826
|
-
delete this.context[key];
|
|
2827
|
-
});
|
|
2828
|
-
this.context = null;
|
|
2829
|
-
}
|
|
2830
2764
|
}
|
|
2831
2765
|
static { this.ɵfac = function BaseComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || BaseComponent)(i0.ɵɵinject(i0.Injector), i0.ɵɵinject(WidgetConfig), i0.ɵɵinject('EXPLICIT_CONTEXT', 8), i0.ɵɵinject(Promise)); }; }
|
|
2832
2766
|
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: BaseComponent, factory: BaseComponent.ɵfac }); }
|
|
@@ -5085,9 +5019,7 @@ class LazyLoadDirective {
|
|
|
5085
5019
|
this.unSubscribeFn = $watch(expr, this.viewParent, this.context, (val) => {
|
|
5086
5020
|
if (!this.embeddedView && val) {
|
|
5087
5021
|
this.embeddedView = this.viewContainer.createEmbeddedView(this.templateRef, this.context);
|
|
5088
|
-
|
|
5089
|
-
this.unSubscribeFn();
|
|
5090
|
-
}
|
|
5022
|
+
this.unSubscribeFn();
|
|
5091
5023
|
}
|
|
5092
5024
|
});
|
|
5093
5025
|
}
|