@wavemaker/react-runtime 11.14.1-rc.241 → 11.14.2-1.6423
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/actions/navigation-action.js +5 -3
- package/actions/notification-action.js +6 -3
- package/components/basic/anchor/index.js +6 -7
- package/components/basic/label/index.js +2 -2
- package/components/basic/search/index.js +7 -3
- package/components/chart/components/barColumnChart/index.js +2 -4
- package/components/chart/components/pieDonutChart/index.js +3 -1
- package/components/chart/hooks/useBarYAxisExtras.js +52 -0
- package/components/chart/hooks/useXAxisConfig.js +98 -0
- package/components/chart/index.js +72 -39
- package/components/chart/utils.js +23 -12
- package/components/container/index.js +6 -7
- package/components/container/panel/components/panel-header/index.js +3 -2
- package/components/container/panel/index.js +13 -9
- package/components/container/tabs/index.js +1 -0
- package/components/container/tabs/tab-pane/index.js +39 -3
- package/components/container/wizard/index.js +187 -57
- package/components/container/wizard/utils.js +1 -1
- package/components/container/wizard/wizard-action/index.js +9 -4
- package/components/container/wizard/wizard-step/index.js +21 -8
- package/components/data/form/base-form/index.js +51 -11
- package/components/data/form/form-controller/withFormController.js +7 -10
- package/components/data/list/components/GroupedListItems.js +5 -1
- package/components/data/list/components/ListItemWithTemplate.js +4 -1
- package/components/data/list/hooks/useListEffects.js +34 -14
- package/components/data/list/hooks/useListEventHandlers.js +18 -2
- package/components/data/list/hooks/useListState.js +15 -2
- package/components/data/list/index.js +1 -0
- package/components/data/list/utils/list-helpers.js +3 -5
- package/components/data/list/utils/list-widget-methods.js +1 -1
- package/components/data/live-filter/index.js +6 -5
- package/components/data/live-form/index.js +24 -14
- package/components/data/table/components/TableBody.js +5 -21
- package/components/data/table/components/TableHeader.js +5 -1
- package/components/data/table/index.js +21 -5
- package/components/data/utils/field-data-utils.js +1 -1
- package/components/dialogs/index.js +14 -16
- package/components/input/currency/index.js +11 -7
- package/components/input/default/checkbox/index.js +2 -3
- package/components/input/default/checkboxset/index.js +2 -22
- package/components/input/default/radioset/index.js +5 -4
- package/components/input/epoch/datetime/index.js +6 -2
- package/components/input/epoch/time/index.js +2 -1
- package/components/input/number/index.js +2 -2
- package/components/input/text/util.js +2 -0
- package/components/input/textarea/index.js +22 -24
- package/components/layout/leftnav/index.js +1 -1
- package/components/navbar/nav/index.js +97 -7
- package/components/navbar/nav-item/index.js +5 -2
- package/components/navigation/menu/index.js +73 -12
- package/components/navigation/popover/index.js +2 -0
- package/components/page/error-boundary/index.js +1 -0
- package/components/prefab/container/index.js +10 -3
- package/context/LocalizationProvider.js +1 -0
- package/context/PrefabContext.js +138 -13
- package/context/WidgetProvider.js +2 -2
- package/core/constants/events.js +12 -6
- package/core/constants/index.js +6 -11
- package/core/formatter/number-formatters.js +1 -1
- package/core/proxy-service.js +72 -36
- package/core/util/utils.js +23 -4
- package/higherOrder/BaseApp.js +60 -18
- package/higherOrder/BasePage.js +99 -77
- package/higherOrder/BasePrefab.js +13 -5
- package/higherOrder/withBaseWrapper.js +3 -3
- package/hooks/useDataSourceSubscription.js +1 -1
- package/hooks/useHttp.js +20 -13
- package/mui-config/theme.js +3 -0
- package/package-lock.json +781 -669
- package/package.json +3 -3
- package/store/index.js +5 -1
- package/utils/lib-error-skipper.js +196 -0
- package/variables/service-variable.js +17 -14
|
@@ -19,7 +19,6 @@ var _set = _interopRequireDefault(require("lodash-es/set"));
|
|
|
19
19
|
var _props = require("./props");
|
|
20
20
|
var _utils = require("./utils");
|
|
21
21
|
var _formContext = require("../form-context");
|
|
22
|
-
var _utils2 = require("../../utils");
|
|
23
22
|
var _lodashEs = require("lodash-es");
|
|
24
23
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); }
|
|
25
24
|
var __jsx = _react["default"].createElement;
|
|
@@ -28,10 +27,10 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
28
27
|
var DEFAULT_CLASS = "panel app-panel app-form";
|
|
29
28
|
var BaseForm = function BaseForm(WrappedComponent) {
|
|
30
29
|
var ControlledForm = function ControlledForm(FormProps) {
|
|
30
|
+
var _props$listener4;
|
|
31
31
|
// setting up default props for form
|
|
32
32
|
var props = _objectSpread(_objectSpread({}, _props.defaultProps), FormProps);
|
|
33
33
|
var isInsideWizard = props.isInsideWizard || false;
|
|
34
|
-
var primaryKeyRef = (0, _react.useRef)([]);
|
|
35
34
|
var formRef = (0, _react.useRef)(null);
|
|
36
35
|
var _useState = (0, _react.useState)({}),
|
|
37
36
|
formfields = _useState[0],
|
|
@@ -70,6 +69,7 @@ var BaseForm = function BaseForm(WrappedComponent) {
|
|
|
70
69
|
reset = _useForm.reset,
|
|
71
70
|
watch = _useForm.watch,
|
|
72
71
|
trigger = _useForm.trigger,
|
|
72
|
+
getValues = _useForm.getValues,
|
|
73
73
|
clearErrors = _useForm.clearErrors;
|
|
74
74
|
|
|
75
75
|
// update the form data when the formdata prop changes
|
|
@@ -165,14 +165,13 @@ var BaseForm = function BaseForm(WrappedComponent) {
|
|
|
165
165
|
}, [trigger]);
|
|
166
166
|
var handleFormSubmit = /*#__PURE__*/function () {
|
|
167
167
|
var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(data, e, operation) {
|
|
168
|
-
var isValid, _props$listener2, result, FormData, _props$listener3
|
|
168
|
+
var isValid, _props$listener2, result, FormData, _props$listener3;
|
|
169
169
|
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
170
170
|
while (1) switch (_context.prev = _context.next) {
|
|
171
171
|
case 0:
|
|
172
172
|
if (!e) {
|
|
173
173
|
e = new Event("submit");
|
|
174
174
|
}
|
|
175
|
-
|
|
176
175
|
// check form is valid or not
|
|
177
176
|
_context.next = 3;
|
|
178
177
|
return validateFieldsOnSubmit();
|
|
@@ -216,17 +215,22 @@ var BaseForm = function BaseForm(WrappedComponent) {
|
|
|
216
215
|
}
|
|
217
216
|
|
|
218
217
|
// get the operation type
|
|
219
|
-
operationType = props.widgettype === "live-form" && !operation ? (0, _utils2.findOperationType)(FormData, primaryKeyRef.current) : operation;
|
|
220
218
|
props.formSubmit(FormData, function (data) {
|
|
221
|
-
if (props.widgettype === "live-form" && operationType === "insert") {
|
|
219
|
+
if (props.widgettype === "live-form" && data.operationType === "insert") {
|
|
222
220
|
reset(data);
|
|
223
221
|
}
|
|
224
222
|
onResultCb((0, _get["default"])(data, "params"), "success");
|
|
223
|
+
var hasCustomOnSuccess = props.onSuccess !== _props.defaultProps.onSuccess;
|
|
224
|
+
if (!hasCustomOnSuccess && props.widgettype === "live-form") {
|
|
225
|
+
var successMsg = data.operationType === "insert" && props.insertmessage || data.operationType === "update" && props.updatemessage || data.operationType === "delete" && props.deletemessage || props.postmessage;
|
|
226
|
+
toggleMessage(true, successMsg, "success");
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
225
229
|
toggleMessage(true, props.postmessage, "success");
|
|
226
230
|
}, function (error) {
|
|
227
231
|
toggleMessage(true, props.errormessage || error || error.message, "error");
|
|
228
232
|
onResultCb(error, "");
|
|
229
|
-
}
|
|
233
|
+
});
|
|
230
234
|
}
|
|
231
235
|
if (props !== null && props !== void 0 && props.onSubmit) {
|
|
232
236
|
props.onSubmit(e, props, FormData);
|
|
@@ -375,7 +379,10 @@ var BaseForm = function BaseForm(WrappedComponent) {
|
|
|
375
379
|
cancel: cancel,
|
|
376
380
|
"new": create,
|
|
377
381
|
edit: edit,
|
|
378
|
-
setShowViewMode: setShowViewMode
|
|
382
|
+
setShowViewMode: setShowViewMode,
|
|
383
|
+
dataoutput: getValues(),
|
|
384
|
+
save: submit,
|
|
385
|
+
reset: reset
|
|
379
386
|
});
|
|
380
387
|
var conditionalProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, props.target && {
|
|
381
388
|
target: props.target
|
|
@@ -419,13 +426,23 @@ var BaseForm = function BaseForm(WrappedComponent) {
|
|
|
419
426
|
function cancel() {
|
|
420
427
|
setShowViewMode(true);
|
|
421
428
|
}
|
|
429
|
+
var fields = (0, _get["default"])((_props$listener4 = props.listener) === null || _props$listener4 === void 0 ? void 0 : _props$listener4.Widgets[props.name], "formfields", {});
|
|
430
|
+
var FormFields = (0, _react.useMemo)(function () {
|
|
431
|
+
var newFields = [];
|
|
432
|
+
Object.keys(fields).forEach(function (key) {
|
|
433
|
+
if (!key.includes("formWidget") && fields[key]) {
|
|
434
|
+
newFields.push(fields[key]);
|
|
435
|
+
}
|
|
436
|
+
});
|
|
437
|
+
return newFields;
|
|
438
|
+
}, [fields]);
|
|
422
439
|
|
|
423
440
|
// Call onDataSourceChange when formfields change
|
|
424
441
|
(0, _react.useEffect)(function () {
|
|
425
|
-
if (props.onDataSourceChange &&
|
|
426
|
-
props.onDataSourceChange(
|
|
442
|
+
if (props.onDataSourceChange && FormFields.length > 0) {
|
|
443
|
+
props.onDataSourceChange(FormFields);
|
|
427
444
|
}
|
|
428
|
-
}, [
|
|
445
|
+
}, [FormFields, props.onDataSourceChange]);
|
|
429
446
|
|
|
430
447
|
// Determine form classes based on wizard context
|
|
431
448
|
var formClassName = (0, _react.useMemo)(function () {
|
|
@@ -434,6 +451,29 @@ var BaseForm = function BaseForm(WrappedComponent) {
|
|
|
434
451
|
}
|
|
435
452
|
return (0, _clsx["default"])(DEFAULT_CLASS, props.className);
|
|
436
453
|
}, [isInsideWizard, props.className]);
|
|
454
|
+
|
|
455
|
+
// Notify parent containers (wizard) about validity changes
|
|
456
|
+
(0, _react.useEffect)(function () {
|
|
457
|
+
var el = formRef.current;
|
|
458
|
+
if (!el) return;
|
|
459
|
+
var emit = function emit() {
|
|
460
|
+
el.dispatchEvent(new CustomEvent("wm:form-validity", {
|
|
461
|
+
bubbles: true,
|
|
462
|
+
detail: {
|
|
463
|
+
isValid: isValid
|
|
464
|
+
}
|
|
465
|
+
}));
|
|
466
|
+
};
|
|
467
|
+
emit();
|
|
468
|
+
var unsubscribe = watch(function () {
|
|
469
|
+
return emit();
|
|
470
|
+
});
|
|
471
|
+
return function () {
|
|
472
|
+
if (typeof unsubscribe === "function") {
|
|
473
|
+
unsubscribe();
|
|
474
|
+
}
|
|
475
|
+
};
|
|
476
|
+
}, [watch, isValid]);
|
|
437
477
|
return __jsx("form", (0, _extends2["default"])({
|
|
438
478
|
name: props.name,
|
|
439
479
|
defaultmode: props.defaultmode,
|
|
@@ -14,7 +14,6 @@ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
|
14
14
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
15
15
|
var _reactHookForm = require("react-hook-form");
|
|
16
16
|
var _clsx = _interopRequireDefault(require("clsx"));
|
|
17
|
-
var _Box = _interopRequireDefault(require("@mui/material/Box"));
|
|
18
17
|
var _validationContrustor = require("@wavemaker/react-runtime/components/data/form/form-controller/validation-contrustor");
|
|
19
18
|
var _WidgetProvider = require("@wavemaker/react-runtime/context/WidgetProvider");
|
|
20
19
|
var _formContext = require("@wavemaker/react-runtime/components/data/form/form-context");
|
|
@@ -201,7 +200,7 @@ var withFormController = function withFormController(WrappedComponent) {
|
|
|
201
200
|
}
|
|
202
201
|
|
|
203
202
|
// If the incoming value is an object and we have a datafield, extract the value
|
|
204
|
-
if (valueToSet && (0, _typeof2["default"])(valueToSet) === "object" && !Array.isArray(valueToSet) && props.datafield) {
|
|
203
|
+
if (valueToSet && (0, _typeof2["default"])(valueToSet) === "object" && !Array.isArray(valueToSet) && props.datafield && props.datafield !== "All Fields") {
|
|
205
204
|
valueToSet = valueToSet[props.datafield];
|
|
206
205
|
}
|
|
207
206
|
if (type === "number") {
|
|
@@ -267,9 +266,9 @@ var withFormController = function withFormController(WrappedComponent) {
|
|
|
267
266
|
hidden: contextFormRef === null || contextFormRef === void 0 ? void 0 : contextFormRef.isViewMode
|
|
268
267
|
})
|
|
269
268
|
});
|
|
270
|
-
return __jsx(
|
|
271
|
-
|
|
272
|
-
width: "
|
|
269
|
+
return __jsx("div", {
|
|
270
|
+
style: {
|
|
271
|
+
width: "100%"
|
|
273
272
|
}
|
|
274
273
|
}, __jsx(WrappedComponent, (0, _extends2["default"])({}, controlledProps, {
|
|
275
274
|
dataset: props.dataset,
|
|
@@ -290,8 +289,7 @@ var withFormController = function withFormController(WrappedComponent) {
|
|
|
290
289
|
}
|
|
291
290
|
}
|
|
292
291
|
return value;
|
|
293
|
-
}()), hint && !shouldShowErrorMessage(validationType, fieldState, touched) && __jsx(
|
|
294
|
-
component: "p",
|
|
292
|
+
}()), hint && !shouldShowErrorMessage(validationType, fieldState, touched) && __jsx("p", {
|
|
295
293
|
className: "help-block",
|
|
296
294
|
"aria-hidden": "true",
|
|
297
295
|
role: "alert",
|
|
@@ -300,13 +298,12 @@ var withFormController = function withFormController(WrappedComponent) {
|
|
|
300
298
|
textAlign: "start",
|
|
301
299
|
width: "100%"
|
|
302
300
|
}
|
|
303
|
-
}, hint), shouldShowErrorMessage(validationType, fieldState, touched) && __jsx(
|
|
304
|
-
component: "p",
|
|
301
|
+
}, hint), shouldShowErrorMessage(validationType, fieldState, touched) && __jsx("p", {
|
|
305
302
|
className: "help-block text-danger",
|
|
306
303
|
"aria-hidden": "false",
|
|
307
304
|
role: "alert",
|
|
308
305
|
"aria-live": "assertive",
|
|
309
|
-
|
|
306
|
+
style: {
|
|
310
307
|
textAlign: "start",
|
|
311
308
|
width: "100%"
|
|
312
309
|
}
|
|
@@ -50,6 +50,10 @@ var GroupedListItems = exports.GroupedListItems = function GroupedListItems(_ref
|
|
|
50
50
|
return __jsx(_react["default"].Fragment, null, groupsToRender.map(function (groupObj) {
|
|
51
51
|
var isGroupCollapsed = groupCollapsed[groupObj.key] || false;
|
|
52
52
|
var displayCount = groupObj.originalDataLength || groupObj.data.length;
|
|
53
|
+
// Build itemclass for grouped items: if function, wrap to append group class
|
|
54
|
+
var groupedItemClass = typeof itemclass === "function" ? function (it) {
|
|
55
|
+
return (0, _clsx["default"])(itemclass(it), "group-list-item");
|
|
56
|
+
} : (0, _clsx["default"])(itemclass, "group-list-item");
|
|
53
57
|
return __jsx("li", {
|
|
54
58
|
key: "group_".concat(groupObj.key),
|
|
55
59
|
className: "app-list-item-group clearfix"
|
|
@@ -80,7 +84,7 @@ var GroupedListItems = exports.GroupedListItems = function GroupedListItems(_ref
|
|
|
80
84
|
isFirst: isFirst,
|
|
81
85
|
isLast: isLast,
|
|
82
86
|
disableitem: disableitem,
|
|
83
|
-
itemclass:
|
|
87
|
+
itemclass: groupedItemClass,
|
|
84
88
|
itemsPerRowClass: itemsPerRowClass,
|
|
85
89
|
name: "".concat(name, "_group_").concat(groupObj.key),
|
|
86
90
|
tabIndex: tabIndex,
|
|
@@ -36,11 +36,14 @@ var ListItemWithTemplate = exports.ListItemWithTemplate = function ListItemWithT
|
|
|
36
36
|
onItemMouseEnter = _ref.onItemMouseEnter,
|
|
37
37
|
onItemMouseLeave = _ref.onItemMouseLeave;
|
|
38
38
|
var templateContent = renderItem ? renderItem(item, globalIndex !== null && globalIndex !== void 0 ? globalIndex : index) : itemTemplate || __jsx(_mediaTemplate.MediaWmListtemplate, null);
|
|
39
|
+
|
|
40
|
+
// Resolve item class: support string or function callback
|
|
41
|
+
var resolvedItemClass = typeof itemclass === "function" ? itemclass(item) : itemclass;
|
|
39
42
|
return __jsx(_ListItem.WmListItem, {
|
|
40
43
|
key: itemId,
|
|
41
44
|
item: item,
|
|
42
45
|
disableItem: disableitem,
|
|
43
|
-
itemClass: (0, _clsx["default"])(
|
|
46
|
+
itemClass: (0, _clsx["default"])(resolvedItemClass, itemsPerRowClass),
|
|
44
47
|
index: globalIndex !== null && globalIndex !== void 0 ? globalIndex : index,
|
|
45
48
|
isFirst: isFirst,
|
|
46
49
|
isLast: isLast,
|
|
@@ -52,7 +52,8 @@ var useListEffects = exports.useListEffects = function useListEffects(props) {
|
|
|
52
52
|
var _useState = (0, _react.useState)(paginationState.currentPageSize),
|
|
53
53
|
lastPageSize = _useState[0],
|
|
54
54
|
setLastPageSize = _useState[1];
|
|
55
|
-
|
|
55
|
+
var rafRef1 = (0, _react.useRef)(null);
|
|
56
|
+
var rafRef2 = (0, _react.useRef)(null);
|
|
56
57
|
// Effect 1: Accumulate data for On-Demand navigation
|
|
57
58
|
(0, _react.useEffect)(function () {
|
|
58
59
|
if (navigation === _constants.LIST_NAVIGATION_TYPES.ON_DEMAND && datasource && safeDataset.length > 0) {
|
|
@@ -105,11 +106,19 @@ var useListEffects = exports.useListEffects = function useListEffects(props) {
|
|
|
105
106
|
getIndex: widgetMethods.getIndex,
|
|
106
107
|
clear: widgetMethods.clear,
|
|
107
108
|
getWidgets: widgetMethods.getWidgets,
|
|
108
|
-
showNavigation: showNavigation
|
|
109
|
+
showNavigation: showNavigation
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}, []);
|
|
113
|
+
|
|
114
|
+
// Effect 3: Expose methods through widget instance
|
|
115
|
+
(0, _react.useEffect)(function () {
|
|
116
|
+
if (listener !== null && listener !== void 0 && listener.onChange) {
|
|
117
|
+
listener.onChange(name, {
|
|
109
118
|
selecteditem: listState.selectedItems[0]
|
|
110
119
|
});
|
|
111
120
|
}
|
|
112
|
-
}, [
|
|
121
|
+
}, [listState.selectedItems]);
|
|
113
122
|
|
|
114
123
|
// Effect 3b: Update selected item widgets for state restoration (not selectfirstitem)
|
|
115
124
|
var hasInitialWidgetUpdateRun = (0, _react.useRef)(false);
|
|
@@ -124,18 +133,22 @@ var useListEffects = exports.useListEffects = function useListEffects(props) {
|
|
|
124
133
|
hasInitialWidgetUpdateRun.current = true;
|
|
125
134
|
|
|
126
135
|
// Use double RAF to ensure DOM is fully updated
|
|
127
|
-
requestAnimationFrame(function () {
|
|
128
|
-
|
|
136
|
+
rafRef1.current = requestAnimationFrame(function () {
|
|
137
|
+
// getSelectedItemWidgets(null, listener, name);
|
|
138
|
+
rafRef2.current = requestAnimationFrame(function () {
|
|
139
|
+
(0, _listHelpers.getSelectedItemWidgets)(null, listener, name);
|
|
140
|
+
});
|
|
129
141
|
});
|
|
142
|
+
return function () {
|
|
143
|
+
if (rafRef1.current) {
|
|
144
|
+
cancelAnimationFrame(rafRef1.current);
|
|
145
|
+
}
|
|
146
|
+
if (rafRef2.current) {
|
|
147
|
+
cancelAnimationFrame(rafRef2.current);
|
|
148
|
+
}
|
|
149
|
+
};
|
|
130
150
|
}, [name, listState.selectedItems.length, initialRender, selectfirstitem]);
|
|
131
151
|
|
|
132
|
-
// Effect 4: Handle widgetInstance.selecteditem
|
|
133
|
-
(0, _react.useEffect)(function () {
|
|
134
|
-
if ((widgetInstance === null || widgetInstance === void 0 ? void 0 : widgetInstance.selecteditem) != undefined) {
|
|
135
|
-
widgetMethods.selectItem(widgetInstance.selecteditem);
|
|
136
|
-
}
|
|
137
|
-
}, [widgetInstance === null || widgetInstance === void 0 ? void 0 : widgetInstance.selecteditem]);
|
|
138
|
-
|
|
139
152
|
// Effect 5: Handle selectfirstitem with onSelect
|
|
140
153
|
(0, _react.useEffect)(function () {
|
|
141
154
|
if (selectfirstitem && widgetInstance && onSelect && listState.selectedItems.length > 0) {
|
|
@@ -271,8 +284,15 @@ var useListEffects = exports.useListEffects = function useListEffects(props) {
|
|
|
271
284
|
// Merge current state with existing state
|
|
272
285
|
var stateToSave = stateManager.mergeWithExisting(stateManager.currentState, existingState);
|
|
273
286
|
|
|
274
|
-
//
|
|
275
|
-
|
|
287
|
+
// Compare state content, not object references
|
|
288
|
+
var existingStateStr = JSON.stringify(existingState);
|
|
289
|
+
var stateToSaveStr = JSON.stringify(stateToSave);
|
|
290
|
+
var statesAreEqual = existingStateStr === stateToSaveStr;
|
|
291
|
+
|
|
292
|
+
// Save the state only if content has actually changed
|
|
293
|
+
if (!statesAreEqual) {
|
|
294
|
+
(0, _listHelpers.saveListState)(name, statehandler, stateToSave);
|
|
295
|
+
}
|
|
276
296
|
}
|
|
277
297
|
}, [listState.selectedItems, paginationState.currentPage, items, name, navigation, hasBeenReordered, statehandler]);
|
|
278
298
|
(0, _react.useEffect)(function () {
|
|
@@ -54,6 +54,10 @@ var useListEventHandlers = exports.useListEventHandlers = function useListEventH
|
|
|
54
54
|
setOnDemandCurrentPage = props.setOnDemandCurrentPage,
|
|
55
55
|
listener = props.listener,
|
|
56
56
|
name = props.name;
|
|
57
|
+
var selectedItemsRef = (0, _react.useRef)(selectedItems);
|
|
58
|
+
(0, _react.useEffect)(function () {
|
|
59
|
+
selectedItemsRef.current = selectedItems;
|
|
60
|
+
}, [selectedItems]);
|
|
57
61
|
|
|
58
62
|
// Helper function to call onSelect and mark as user-initiated
|
|
59
63
|
var callOnSelect = (0, _react.useCallback)(function (selectedItem) {
|
|
@@ -61,6 +65,11 @@ var useListEventHandlers = exports.useListEventHandlers = function useListEventH
|
|
|
61
65
|
if (userInitiatedSelectionRef) {
|
|
62
66
|
userInitiatedSelectionRef.current = true;
|
|
63
67
|
}
|
|
68
|
+
if (listener !== null && listener !== void 0 && listener.onChange) {
|
|
69
|
+
listener.onChange(name, {
|
|
70
|
+
selecteditem: multiselect ? selectedItemsRef.current : selectedItem
|
|
71
|
+
});
|
|
72
|
+
}
|
|
64
73
|
onSelect(widgetInstance, selectedItem);
|
|
65
74
|
}
|
|
66
75
|
}, [onSelect, widgetInstance, userInitiatedSelectionRef]);
|
|
@@ -87,6 +96,7 @@ var useListEventHandlers = exports.useListEventHandlers = function useListEventH
|
|
|
87
96
|
return;
|
|
88
97
|
}
|
|
89
98
|
var rangeItems = (0, _lodashEs.slice)(items, start, end + 1);
|
|
99
|
+
selectedItemsRef.current = rangeItems;
|
|
90
100
|
setSelectedItems(rangeItems);
|
|
91
101
|
setActiveItems(new Set(rangeItems));
|
|
92
102
|
// Only call onSelect if this is a new selection (not already active)
|
|
@@ -108,12 +118,14 @@ var useListEventHandlers = exports.useListEventHandlers = function useListEventH
|
|
|
108
118
|
var newSelectedItems = (0, _lodashEs.filter)(selectedItems, function (selectedItem) {
|
|
109
119
|
return selectedItem !== item;
|
|
110
120
|
});
|
|
121
|
+
selectedItemsRef.current = newSelectedItems;
|
|
111
122
|
setSelectedItems(newSelectedItems);
|
|
112
123
|
var newActiveItems = new Set(activeItems);
|
|
113
124
|
newActiveItems["delete"](item);
|
|
114
125
|
setActiveItems(newActiveItems);
|
|
115
126
|
} else {
|
|
116
127
|
var _newSelectedItems = [].concat((0, _toConsumableArray2["default"])(selectedItems), [item]);
|
|
128
|
+
selectedItemsRef.current = _newSelectedItems;
|
|
117
129
|
setSelectedItems(_newSelectedItems);
|
|
118
130
|
var _newActiveItems = new Set(activeItems);
|
|
119
131
|
_newActiveItems.add(item);
|
|
@@ -128,7 +140,9 @@ var useListEventHandlers = exports.useListEventHandlers = function useListEventH
|
|
|
128
140
|
// Normal click without Ctrl - select item without deselecting if already selected
|
|
129
141
|
if (!isItemSelected) {
|
|
130
142
|
// If clicking an unselected item, select only this item
|
|
131
|
-
|
|
143
|
+
var _newSelectedItems2 = [item];
|
|
144
|
+
selectedItemsRef.current = _newSelectedItems2;
|
|
145
|
+
setSelectedItems(_newSelectedItems2);
|
|
132
146
|
setActiveItems(new Set([item]));
|
|
133
147
|
setFirstSelectedItem(item);
|
|
134
148
|
// Only call onSelect if this is a new selection (not already active)
|
|
@@ -142,7 +156,9 @@ var useListEventHandlers = exports.useListEventHandlers = function useListEventH
|
|
|
142
156
|
// Single select mode - only select, don't deselect on normal click
|
|
143
157
|
if (!isItemSelected) {
|
|
144
158
|
// If clicking an unselected item, select it
|
|
145
|
-
|
|
159
|
+
var _newSelectedItems3 = [item];
|
|
160
|
+
selectedItemsRef.current = _newSelectedItems3;
|
|
161
|
+
setSelectedItems(_newSelectedItems3);
|
|
146
162
|
setActiveItems(new Set([item]));
|
|
147
163
|
setFirstSelectedItem(item);
|
|
148
164
|
// Only call onSelect if this is a new selection (not already active)
|
|
@@ -42,6 +42,8 @@ var useListState = exports.useListState = function useListState(dataset, pagesiz
|
|
|
42
42
|
isLoadingMore = _useState8[0],
|
|
43
43
|
setIsLoadingMore = _useState8[1];
|
|
44
44
|
var isInitialMount = (0, _react.useRef)(true);
|
|
45
|
+
var rafRef1 = (0, _react.useRef)(null);
|
|
46
|
+
var rafRef2 = (0, _react.useRef)(null);
|
|
45
47
|
(0, _react.useEffect)(function () {
|
|
46
48
|
// Ensure dataset is a valid array
|
|
47
49
|
var validDataset = Array.isArray(dataset) ? dataset : [];
|
|
@@ -71,12 +73,23 @@ var useListState = exports.useListState = function useListState(dataset, pagesiz
|
|
|
71
73
|
|
|
72
74
|
// Update selected item widgets after DOM is painted
|
|
73
75
|
if (listener !== null && listener !== void 0 && listener.onChange && name) {
|
|
74
|
-
requestAnimationFrame(function () {
|
|
75
|
-
|
|
76
|
+
rafRef1.current = requestAnimationFrame(function () {
|
|
77
|
+
// getSelectedItemWidgets(null, listener, name);
|
|
78
|
+
rafRef2.current = requestAnimationFrame(function () {
|
|
79
|
+
(0, _listHelpers.getSelectedItemWidgets)(null, listener, name);
|
|
80
|
+
});
|
|
76
81
|
});
|
|
77
82
|
}
|
|
78
83
|
}
|
|
79
84
|
}
|
|
85
|
+
return function () {
|
|
86
|
+
if (rafRef1.current) {
|
|
87
|
+
cancelAnimationFrame(rafRef1.current);
|
|
88
|
+
}
|
|
89
|
+
if (rafRef2.current) {
|
|
90
|
+
cancelAnimationFrame(rafRef2.current);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
80
93
|
}, [dataset, selectfirstitem, name]);
|
|
81
94
|
return {
|
|
82
95
|
selectedItems: selectedItems,
|
|
@@ -164,10 +164,8 @@ var getSelectedItemWidgets = exports.getSelectedItemWidgets = function getSelect
|
|
|
164
164
|
return result;
|
|
165
165
|
}, {});
|
|
166
166
|
if (listener) {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
});
|
|
171
|
-
}, 0);
|
|
167
|
+
listener.onChange(name, {
|
|
168
|
+
selectedItemWidgets: currentItemWidgets
|
|
169
|
+
});
|
|
172
170
|
}
|
|
173
171
|
};
|
|
@@ -49,7 +49,7 @@ var useListWidgetMethods = exports.useListWidgetMethods = function useListWidget
|
|
|
49
49
|
onSelect(widgetInstance, item);
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
|
-
}, [listState.activeItems]);
|
|
52
|
+
}, [listState.activeItems, getItemByIndexOrModel]);
|
|
53
53
|
var deselectItem = (0, _react.useCallback)(function (val) {
|
|
54
54
|
var item = getItemByIndexOrModel(val);
|
|
55
55
|
if (!item) {
|
|
@@ -15,7 +15,6 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
|
15
15
|
var _lodashEs = require("lodash-es");
|
|
16
16
|
var _util = require("../../../core/util");
|
|
17
17
|
var _form = _interopRequireDefault(require("../form"));
|
|
18
|
-
var _withBaseWrapper = _interopRequireDefault(require("../../../higherOrder/withBaseWrapper"));
|
|
19
18
|
var _props = require("./props");
|
|
20
19
|
var _types = require("../types");
|
|
21
20
|
var _utils = require("../utils");
|
|
@@ -238,10 +237,12 @@ var WmLiveFilter = function WmLiveFilter(prop) {
|
|
|
238
237
|
}));
|
|
239
238
|
return _Livefilter.apply(this, arguments);
|
|
240
239
|
}
|
|
241
|
-
function onDataSourceChange() {
|
|
240
|
+
function onDataSourceChange(formFields) {
|
|
242
241
|
if (isDataSourceUpdatedRef.current) return;
|
|
243
|
-
|
|
244
|
-
|
|
242
|
+
// const fields = get(props.listener.Widgets[props.name], "formfields", []);
|
|
243
|
+
|
|
244
|
+
// let formFields = isArray(fields) ? fields : Object.values(fields || {});
|
|
245
|
+
|
|
245
246
|
if ((0, _lodashEs.get)(formFields, "length")) {
|
|
246
247
|
isDataSourceUpdatedRef.current = true;
|
|
247
248
|
}
|
|
@@ -276,4 +277,4 @@ var WmLiveFilter = function WmLiveFilter(prop) {
|
|
|
276
277
|
);
|
|
277
278
|
};
|
|
278
279
|
WmLiveFilter.displayName = "WmLiveFilter";
|
|
279
|
-
var _default = exports["default"] =
|
|
280
|
+
var _default = exports["default"] = WmLiveFilter;
|
|
@@ -1,44 +1,56 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var
|
|
4
|
+
var _typeof3 = require("@babel/runtime/helpers/typeof");
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports["default"] = void 0;
|
|
9
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
10
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
11
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
13
|
var _props = require("./props");
|
|
13
14
|
var _form = _interopRequireDefault(require("../form"));
|
|
14
|
-
var _get = _interopRequireDefault(require("lodash-es/get"));
|
|
15
|
-
var _isArray = _interopRequireDefault(require("lodash-es/isArray"));
|
|
16
15
|
var _fieldDataUtils = require("../utils/field-data-utils");
|
|
17
16
|
var _replace = _interopRequireDefault(require("lodash-es/replace"));
|
|
18
|
-
|
|
17
|
+
var _utils = require("../utils");
|
|
18
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); }
|
|
19
19
|
var __jsx = _react["default"].createElement;
|
|
20
20
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
21
21
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
22
22
|
var WmLiveForm = function WmLiveForm(prop) {
|
|
23
|
-
var _props$listener;
|
|
24
23
|
var props = _objectSpread(_objectSpread({}, _props.DEFAULT_PROPS), prop);
|
|
25
24
|
var dynamicFieldsRef = (0, _react.useRef)([]);
|
|
26
25
|
var isDataSourceUpdatedRef = (0, _react.useRef)(false);
|
|
27
|
-
var dataSource =
|
|
28
|
-
function formSubmit(formData, success, error
|
|
26
|
+
var dataSource = props.datasource;
|
|
27
|
+
function formSubmit(formData, success, error) {
|
|
28
|
+
var primaryKeys = dataSource.execute("getPrimaryKey");
|
|
29
|
+
var operationType = (0, _utils.findOperationType)(formData, primaryKeys);
|
|
29
30
|
if (dynamicFieldsRef.current.length > 0) {
|
|
30
31
|
dynamicFieldsRef.current.forEach(function (field) {
|
|
31
32
|
var item = field.formKey;
|
|
32
33
|
formData[item] = field.dataset[formData[item] - 1];
|
|
33
34
|
});
|
|
34
35
|
}
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
var successWithOperationType = function successWithOperationType(res) {
|
|
37
|
+
var payload = res && (0, _typeof2["default"])(res) === "object" ? _objectSpread(_objectSpread({}, res), {}, {
|
|
38
|
+
operationType: operationType
|
|
39
|
+
}) : {
|
|
40
|
+
operationType: operationType
|
|
41
|
+
};
|
|
42
|
+
if (typeof success === "function") {
|
|
43
|
+
success(payload);
|
|
44
|
+
}
|
|
45
|
+
return payload;
|
|
46
|
+
};
|
|
47
|
+
if (operationType === "delete") {
|
|
48
|
+
props.formSubmit(formData, operationType, successWithOperationType, error);
|
|
37
49
|
return;
|
|
38
50
|
}
|
|
39
51
|
props.formSubmit({
|
|
40
52
|
inputFields: formData
|
|
41
|
-
},
|
|
53
|
+
}, operationType, successWithOperationType, error);
|
|
42
54
|
}
|
|
43
55
|
function getRelatedTableData(formField) {
|
|
44
56
|
dataSource && dataSource.execute("getRelatedTableData", {
|
|
@@ -62,11 +74,9 @@ var WmLiveForm = function WmLiveForm(prop) {
|
|
|
62
74
|
});
|
|
63
75
|
});
|
|
64
76
|
}
|
|
65
|
-
function onDataSourceChange() {
|
|
77
|
+
function onDataSourceChange(formFields) {
|
|
66
78
|
if (isDataSourceUpdatedRef.current) return;
|
|
67
|
-
|
|
68
|
-
var formFields = (0, _isArray["default"])(fields) ? fields : Object.values(fields || {});
|
|
69
|
-
if ((0, _get["default"])(formFields, "length")) {
|
|
79
|
+
if (formFields.length > 0) {
|
|
70
80
|
isDataSourceUpdatedRef.current = true;
|
|
71
81
|
}
|
|
72
82
|
formFields.forEach(function (field) {
|
|
@@ -254,26 +254,10 @@ var TableBodyComponentBase = function TableBodyComponentBase(_ref4) {
|
|
|
254
254
|
className: "app-grid-content ".concat(_utils.TABLE_CSS_CLASSES.gridBody)
|
|
255
255
|
}, formposition === "top" && renderAddNewRow(), renderTableContent(), formposition === "bottom" && renderAddNewRow());
|
|
256
256
|
};
|
|
257
|
-
var TableBodyComponent = exports.TableBodyComponent = /*#__PURE__*/(0, _react.memo)(TableBodyComponentBase, function (
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
if (prevProps.isLoading !== nextProps.isLoading) return false;
|
|
263
|
-
if (prevProps.rowClass !== nextProps.rowClass) return false;
|
|
264
|
-
if (prevProps.formposition !== nextProps.formposition) return false;
|
|
265
|
-
if (prevProps.nodatamessage !== nextProps.nodatamessage) return false;
|
|
266
|
-
|
|
267
|
-
// Check expandedRows
|
|
268
|
-
if (prevProps.expandedRows !== nextProps.expandedRows) {
|
|
269
|
-
var _prevProps$expandedRo, _nextProps$expandedRo;
|
|
270
|
-
var prevSize = ((_prevProps$expandedRo = prevProps.expandedRows) === null || _prevProps$expandedRo === void 0 ? void 0 : _prevProps$expandedRo.size) || 0;
|
|
271
|
-
var nextSize = ((_nextProps$expandedRo = nextProps.expandedRows) === null || _nextProps$expandedRo === void 0 ? void 0 : _nextProps$expandedRo.size) || 0;
|
|
272
|
-
if (prevSize !== nextSize) return false;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
// Block re-render only for function reference changes (prevents infinite loops)
|
|
276
|
-
// Table key handles pagination rebuilds, so we don't need complex row comparisons
|
|
277
|
-
return true; // Prevent re-render for function reference changes only
|
|
257
|
+
var TableBodyComponent = exports.TableBodyComponent = /*#__PURE__*/(0, _react.memo)(TableBodyComponentBase, function (prev, current) {
|
|
258
|
+
var keys = ["isLoading", "rowClass", "formposition", "nodatamessage", "loadingdatamsg", "rowsVersion", "tableData", "ColClassSignature"];
|
|
259
|
+
return keys.every(function (key) {
|
|
260
|
+
return prev[key] === current[key];
|
|
261
|
+
});
|
|
278
262
|
});
|
|
279
263
|
TableBodyComponent.displayName = "TableBodyComponent";
|
|
@@ -86,6 +86,7 @@ var TableHeaderComponent = exports.TableHeaderComponent = /*#__PURE__*/(0, _reac
|
|
|
86
86
|
key: headerGroup.id,
|
|
87
87
|
className: "".concat(_utils.TABLE_CSS_CLASSES.tableRow, " ").concat(rowClass)
|
|
88
88
|
}, headerGroup.headers.map(function (header, headerIndex) {
|
|
89
|
+
var _header$column$column;
|
|
89
90
|
var cells = [];
|
|
90
91
|
|
|
91
92
|
// Insert expansion header before this cell if it's at the calculated position
|
|
@@ -104,7 +105,7 @@ var TableHeaderComponent = exports.TableHeaderComponent = /*#__PURE__*/(0, _reac
|
|
|
104
105
|
// Add the regular header cell
|
|
105
106
|
cells.push(__jsx(_material.TableCell, {
|
|
106
107
|
key: header.id,
|
|
107
|
-
className: _utils.TABLE_CSS_CLASSES.headerCell,
|
|
108
|
+
className: "".concat(_utils.TABLE_CSS_CLASSES.headerCell, " ").concat(((_header$column$column = header.column.columnDef) === null || _header$column$column === void 0 || (_header$column$column = _header$column$column.meta) === null || _header$column$column === void 0 ? void 0 : _header$column$column.className) || "").trim(),
|
|
108
109
|
style: {
|
|
109
110
|
cursor: enablesort && header.column.getCanSort() ? "pointer" : "default",
|
|
110
111
|
userSelect: "none",
|
|
@@ -147,6 +148,9 @@ var TableHeaderComponent = exports.TableHeaderComponent = /*#__PURE__*/(0, _reac
|
|
|
147
148
|
// Compare props including the sorting state
|
|
148
149
|
var prevSorting = prevProps.sorting || [];
|
|
149
150
|
var nextSorting = nextProps.sorting || [];
|
|
151
|
+
if (prevProps.ColClassSignature !== nextProps.ColClassSignature) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
150
154
|
|
|
151
155
|
// Deep compare sorting arrays
|
|
152
156
|
var sortingEqual = prevSorting.length === nextSorting.length && prevSorting.every(function (prevSort, index) {
|