@wavemaker/app-ng-runtime 11.14.1-8.6337 → 11.14.1-9.6343
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 +8 -77
- package/components/base/esm2022/pipes/custom-pipes.mjs +1 -1
- package/components/base/esm2022/widgets/common/base/base.component.mjs +7 -67
- package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +3 -7
- package/components/base/esm2022/widgets/framework/property-change-handler.mjs +2 -7
- package/components/base/fesm2022/index.mjs +9 -78
- 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/pagination/bundles/index.umd.js +0 -4
- package/components/data/pagination/esm2022/pagination.component.mjs +1 -5
- package/components/data/pagination/fesm2022/index.mjs +0 -4
- package/components/data/pagination/fesm2022/index.mjs.map +1 -1
- package/components/data/table/bundles/index.umd.js +12 -219
- package/components/data/table/esm2022/table-cud.directive.mjs +2 -2
- package/components/data/table/esm2022/table.component.mjs +12 -219
- package/components/data/table/fesm2022/index.mjs +12 -219
- 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 -395
- package/core/esm2022/public_api.mjs +2 -2
- package/core/esm2022/utils/watcher.mjs +81 -392
- package/core/fesm2022/index.mjs +84 -395
- package/core/fesm2022/index.mjs.map +1 -1
- package/core/public_api.d.ts +1 -1
- package/core/utils/watcher.d.ts +5 -28
- 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 -20
- package/runtime/base/esm2022/components/app-component/app.component.mjs +2 -4
- package/runtime/base/esm2022/components/base-page.component.mjs +2 -6
- package/runtime/base/esm2022/components/base-partial.component.mjs +2 -7
- package/runtime/base/esm2022/components/base-prefab.component.mjs +2 -7
- package/runtime/base/esm2022/components/base-spa-page.component.mjs +2 -6
- package/runtime/base/fesm2022/index.mjs +1 -21
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/scripts/datatable/datatable.js +2 -34
|
@@ -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,25 +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
|
-
// Don't re-throw - allow execution to continue (e.g., navigation should still work)
|
|
2528
|
-
// Return undefined to indicate error was handled
|
|
2529
|
-
return undefined;
|
|
2497
|
+
console.error(e);
|
|
2530
2498
|
}
|
|
2531
2499
|
};
|
|
2532
2500
|
if (child && !child.widget.eventHandlers)
|
|
@@ -2550,17 +2518,11 @@ class BaseComponent {
|
|
|
2550
2518
|
if (!child)
|
|
2551
2519
|
this.initState.delete(propName);
|
|
2552
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;
|
|
2553
|
-
// OPTIMIZATION: Apply throttling for non-critical properties
|
|
2554
|
-
const watchConfig = widgetProps.get(propName) || {};
|
|
2555
|
-
const throttledProps = ['class', 'style', 'ngclass', 'ngstyle'];
|
|
2556
|
-
if (throttledProps.includes(propName.toLowerCase())) {
|
|
2557
|
-
watchConfig.throttle = 100; // Throttle to 100ms for style/class properties
|
|
2558
|
-
}
|
|
2559
2521
|
this.registerDestroyListener($watch(expr, viewParent, context, nv => {
|
|
2560
2522
|
if (propName.startsWith('base-') && widget.updateData)
|
|
2561
2523
|
widget.updateData(propName, nv);
|
|
2562
2524
|
widget[propName] = nv;
|
|
2563
|
-
}, getWatchIdentifier(widgetId, propName), propName === 'datasource',
|
|
2525
|
+
}, getWatchIdentifier(widgetId, propName), propName === 'datasource', widgetProps.get(propName), () => isMuted));
|
|
2564
2526
|
}
|
|
2565
2527
|
/**
|
|
2566
2528
|
* Remove watch on the bound property
|
|
@@ -2579,19 +2541,7 @@ class BaseComponent {
|
|
|
2579
2541
|
const fn = callbackInfo.callback;
|
|
2580
2542
|
const locals = callbackInfo.locals || {};
|
|
2581
2543
|
if (fn) {
|
|
2582
|
-
|
|
2583
|
-
return fn(Object.assign(locals, extraLocals));
|
|
2584
|
-
}
|
|
2585
|
-
catch (error) {
|
|
2586
|
-
// Log error with context information for debugging
|
|
2587
|
-
const widgetName = this.name || this.widgetId || 'unknown';
|
|
2588
|
-
const errorMessage = error?.message || String(error);
|
|
2589
|
-
console.error(`Error executing event callback "${eventName}" on widget "${widgetName}":`, errorMessage);
|
|
2590
|
-
console.error('Full error:', error);
|
|
2591
|
-
// Don't re-throw - allow execution to continue (e.g., navigation should still work)
|
|
2592
|
-
// Return undefined to indicate error was handled
|
|
2593
|
-
return undefined;
|
|
2594
|
-
}
|
|
2544
|
+
return fn(Object.assign(locals, extraLocals));
|
|
2595
2545
|
}
|
|
2596
2546
|
}
|
|
2597
2547
|
}
|
|
@@ -2811,21 +2761,6 @@ class BaseComponent {
|
|
|
2811
2761
|
this.propertyChange.complete();
|
|
2812
2762
|
this.destroy.complete();
|
|
2813
2763
|
this.isAttached = false;
|
|
2814
|
-
// MEMORY LEAK FIX: Unwatch all watchers for this widget
|
|
2815
|
-
// This ensures all watchers registered for this component are cleaned up
|
|
2816
|
-
if (this.widgetId) {
|
|
2817
|
-
$unwatchAll(this.widgetId);
|
|
2818
|
-
}
|
|
2819
|
-
// MEMORY LEAK FIX: Clear context to release references to parent scope data
|
|
2820
|
-
// The context object holds references to repeater items, wizard steps, etc.
|
|
2821
|
-
// which can retain large amounts of data even after component destruction
|
|
2822
|
-
if (this.context) {
|
|
2823
|
-
// Clear all properties from context
|
|
2824
|
-
Object.keys(this.context).forEach(key => {
|
|
2825
|
-
delete this.context[key];
|
|
2826
|
-
});
|
|
2827
|
-
this.context = null;
|
|
2828
|
-
}
|
|
2829
2764
|
}
|
|
2830
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)); }; }
|
|
2831
2766
|
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: BaseComponent, factory: BaseComponent.ɵfac }); }
|
|
@@ -5084,16 +5019,12 @@ class LazyLoadDirective {
|
|
|
5084
5019
|
this.unSubscribeFn = $watch(expr, this.viewParent, this.context, (val) => {
|
|
5085
5020
|
if (!this.embeddedView && val) {
|
|
5086
5021
|
this.embeddedView = this.viewContainer.createEmbeddedView(this.templateRef, this.context);
|
|
5087
|
-
|
|
5088
|
-
this.unSubscribeFn();
|
|
5089
|
-
}
|
|
5022
|
+
this.unSubscribeFn();
|
|
5090
5023
|
}
|
|
5091
5024
|
});
|
|
5092
5025
|
}
|
|
5093
5026
|
ngOnDestroy() {
|
|
5094
|
-
|
|
5095
|
-
this.unSubscribeFn();
|
|
5096
|
-
}
|
|
5027
|
+
this.unSubscribeFn();
|
|
5097
5028
|
}
|
|
5098
5029
|
static { this.ɵfac = function LazyLoadDirective_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LazyLoadDirective)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
|
|
5099
5030
|
static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: LazyLoadDirective, selectors: [["", "lazyLoad", ""]], inputs: { lazyLoad: "lazyLoad" }, standalone: true }); }
|