@wavemaker/react-runtime 11.15.3-rc.647481 → 11.15.4-rc.250

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 (46) hide show
  1. package/components/basic/richtexteditor/index.js +53 -9
  2. package/components/chart/index.js +2 -11
  3. package/components/common/AppSpinner.js +4 -1
  4. package/components/container/panel/components/panel-content/index.js +18 -0
  5. package/components/container/wizard/index.js +1 -1
  6. package/components/data/form/base-form/index.js +156 -105
  7. package/components/data/form/form-context.js +17 -1
  8. package/components/data/form/form-controller/hooks/index.js +127 -0
  9. package/components/data/form/form-controller/utils.js +52 -1
  10. package/components/data/form/form-controller/withFormController.js +10 -162
  11. package/components/data/form/form-dynamic-section/index.js +46 -0
  12. package/components/data/form/form-dynamic-section/props.js +5 -0
  13. package/components/data/form/index.js +5 -0
  14. package/components/data/list/hooks/useListEffects.js +10 -3
  15. package/components/data/list/hooks/useListEventHandlers.js +20 -15
  16. package/components/data/list/index.js +7 -8
  17. package/components/data/list/utils/list-helpers.js +21 -1
  18. package/components/data/list/utils/list-widget-methods.js +2 -0
  19. package/components/data/list/utils/widget-instance-utils.js +82 -0
  20. package/components/data/pagination/components/BasicPagination.js +1 -0
  21. package/components/data/pagination/components/PageSizeSelector.js +11 -3
  22. package/components/data/pagination/index.js +1 -2
  23. package/components/data/table/hooks/useServerSideSorting.js +10 -16
  24. package/components/data/table/index.js +55 -57
  25. package/components/data/table/utils/buildSelectionColumns.js +23 -32
  26. package/components/data/table/utils/index.js +7 -2
  27. package/components/dialogs/index.js +6 -0
  28. package/components/input/default/checkbox/index.js +5 -2
  29. package/components/input/epoch/date/components/DatePickerPopover.js +17 -2
  30. package/components/input/epoch/date/index.js +21 -17
  31. package/components/input/epoch/datetime/index.js +2 -4
  32. package/components/navigation/popover/index.js +8 -21
  33. package/components/page/partial-container/index.js +19 -1
  34. package/context/WidgetProvider.js +28 -14
  35. package/core/proxy-service.js +1 -2
  36. package/core/util/compare.js +6 -0
  37. package/higherOrder/BasePage.js +1 -1
  38. package/higherOrder/withBaseWrapper.js +22 -8
  39. package/libs/index.js +3 -10
  40. package/libs/prefab/index.js +20 -0
  41. package/package-lock.json +119 -90
  42. package/package.json +2 -2
  43. package/utils/lib-error-skipper.js +5 -2
  44. package/utils/state-persistance.js +42 -33
  45. package/utils/widget-cleanup-util.js +30 -0
  46. package/variables/live-variable.js +18 -0
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.setWidgetPageIndex = exports.setWidgetItem = exports.setWidgetIndexWithContext = exports.setWidgetIndex = void 0;
7
+ var _lodashEs = require("lodash-es");
8
+ /**
9
+ * Sets the $index property on widget instance based on item position in items array
10
+ *
11
+ * @param widgetInstance - The widget instance (proxy object from useWidgetProxy)
12
+ * @param items - Array of list items
13
+ * @param item - The current item to find index for
14
+ */
15
+ var setWidgetIndex = exports.setWidgetIndex = function setWidgetIndex(widgetInstance, items, item) {
16
+ if (!widgetInstance || !item) {
17
+ return;
18
+ }
19
+ var instance = widgetInstance;
20
+ var itemIndex = (0, _lodashEs.findIndex)(items, function (i) {
21
+ return i === item;
22
+ });
23
+ instance.$index = itemIndex;
24
+ };
25
+
26
+ /**
27
+ * Sets the $index property for pagination-based callbacks (page number converted to 0-based index)
28
+ *
29
+ * @param widgetInstance - The widget instance
30
+ * @param page - The page number (1-based)
31
+ */
32
+ var setWidgetPageIndex = exports.setWidgetPageIndex = function setWidgetPageIndex(widgetInstance, page) {
33
+ if (!widgetInstance) {
34
+ return;
35
+ }
36
+ var instance = widgetInstance;
37
+ var pageIndex = page - 1; // Page index is 1-based, convert to 0-based
38
+ instance.$index = pageIndex;
39
+ };
40
+
41
+ /**
42
+ * Sets both $index and context on widget instance (used for selection operations)
43
+ *
44
+ * @param widgetInstance - The widget instance
45
+ * @param items - Array of list items
46
+ * @param selectedItem - The selected item
47
+ */
48
+ var setWidgetIndexWithContext = exports.setWidgetIndexWithContext = function setWidgetIndexWithContext(widgetInstance, items, selectedItem) {
49
+ if (!widgetInstance || !selectedItem) {
50
+ return;
51
+ }
52
+ var instance = widgetInstance;
53
+ var itemIndex = items.findIndex(function (item) {
54
+ return item === selectedItem;
55
+ });
56
+ instance.$index = itemIndex;
57
+ instance.context = {
58
+ $index: itemIndex,
59
+ $count: items.length,
60
+ $implicit: selectedItem
61
+ };
62
+ };
63
+
64
+ /**
65
+ * Sets item property on widget instance along with $index
66
+ * Used in click handlers where we need to store the current item
67
+ *
68
+ * @param widgetInstance - The widget instance
69
+ * @param items - Array of list items
70
+ * @param item - The current item
71
+ */
72
+ var setWidgetItem = exports.setWidgetItem = function setWidgetItem(widgetInstance, items, item) {
73
+ if (!widgetInstance || !item) {
74
+ return;
75
+ }
76
+ var instance = widgetInstance;
77
+ delete instance._wmListItemId;
78
+ instance.item = item;
79
+ instance.$index = (0, _lodashEs.findIndex)(items, function (i) {
80
+ return i === item;
81
+ });
82
+ };
@@ -98,6 +98,7 @@ var BasicPagination = exports.BasicPagination = function BasicPagination(_ref) {
98
98
  ref: paginationRef,
99
99
  component: "nav",
100
100
  role: "navigation",
101
+ className: "pagination basic",
101
102
  "aria-label": "Showing Page ".concat(currentPage, " of ").concat(pageCount, " pages"),
102
103
  sx: {
103
104
  // Hide MUI SVG icons for navigation buttons since CSS ::before will provide the icons
@@ -13,6 +13,7 @@ var _Select = _interopRequireDefault(require("@mui/material/Select"));
13
13
  var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
14
14
  var _FormControl = _interopRequireDefault(require("@mui/material/FormControl"));
15
15
  var _constants = require("../../list/utils/constants");
16
+ var _store = require("@wavemaker/react-runtime/store");
16
17
  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" != _typeof(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); }
17
18
  var __jsx = _react["default"].createElement;
18
19
  var PageSizeSelectorComponent = function PageSizeSelectorComponent(_ref) {
@@ -26,6 +27,12 @@ var PageSizeSelectorComponent = function PageSizeSelectorComponent(_ref) {
26
27
  dataSize = _ref$dataSize === void 0 ? 0 : _ref$dataSize,
27
28
  paginationMeta = _ref.paginationMeta,
28
29
  onPageSizeChange = _ref.onPageSizeChange;
30
+ // Get localized strings from store with fallback to APP_LOCALE constant
31
+ var appLocale = (0, _store.useAppSelector)(function (state) {
32
+ return state.i18n.appLocale;
33
+ });
34
+ var itemsPerPageLabel = (appLocale === null || appLocale === void 0 ? void 0 : appLocale.LABEL_ITEMS_PER_PAGE) || _constants.APP_LOCALE.LABEL_ITEMS_PER_PAGE;
35
+
29
36
  // Parse page size options and include paginationMeta.size if available
30
37
  var options = (0, _react.useMemo)(function () {
31
38
  var parsedOptions = pagesizeoptions.split(",").map(function (opt) {
@@ -89,8 +96,8 @@ var PageSizeSelectorComponent = function PageSizeSelectorComponent(_ref) {
89
96
  color: "text.primary",
90
97
  whiteSpace: "nowrap"
91
98
  },
92
- title: _constants.APP_LOCALE.LABEL_ITEMS_PER_PAGE
93
- }, _constants.APP_LOCALE.LABEL_ITEMS_PER_PAGE, " :"), __jsx(_FormControl["default"], {
99
+ title: itemsPerPageLabel
100
+ }, itemsPerPageLabel, " :"), __jsx(_FormControl["default"], {
94
101
  size: "small",
95
102
  sx: {
96
103
  minWidth: 70,
@@ -156,7 +163,8 @@ var PageSizeSelectorComponent = function PageSizeSelectorComponent(_ref) {
156
163
  display: "flex",
157
164
  alignItems: "center",
158
165
  gap: 0.5
159
- }
166
+ },
167
+ className: "item-range"
160
168
  }, __jsx(_Typography["default"], {
161
169
  sx: {
162
170
  fontSize: "14px",
@@ -11,7 +11,6 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
11
11
  var _react = _interopRequireWildcard(require("react"));
12
12
  var _clsx = _interopRequireDefault(require("clsx"));
13
13
  var _Box = _interopRequireDefault(require("@mui/material/Box"));
14
- var _withBaseWrapper = require("@wavemaker/react-runtime/higherOrder/withBaseWrapper");
15
14
  var _hooks = require("./hooks");
16
15
  var _components = require("./components");
17
16
  var _constants = require("../list/utils/constants");
@@ -437,4 +436,4 @@ var WmPagination = /*#__PURE__*/(0, _react.memo)(function (props) {
437
436
  }, renderPaginationContent());
438
437
  });
439
438
  WmPagination.displayName = "WmPagination";
440
- var _default = exports["default"] = (0, _withBaseWrapper.withBaseWrapper)(WmPagination);
439
+ var _default = exports["default"] = WmPagination;
@@ -25,7 +25,6 @@ var useServerSideSorting = exports.useServerSideSorting = function useServerSide
25
25
  onBeforefilter = _ref.onBeforefilter,
26
26
  filterFields = _ref.filterFields,
27
27
  logicalOp = _ref.logicalOp,
28
- setLoading = _ref.setLoading,
29
28
  listener = _ref.listener,
30
29
  name = _ref.name;
31
30
  var prevSortingRef = (0, _react.useRef)(sorting);
@@ -61,18 +60,17 @@ var useServerSideSorting = exports.useServerSideSorting = function useServerSide
61
60
  }
62
61
  return _context.abrupt("return");
63
62
  case 2:
64
- setLoading(true);
65
- _context.prev = 3;
63
+ _context.prev = 2;
66
64
  orderBy = convertSortingToOrderBy(sorting); // Use forcePage if provided (for sorting changes), otherwise use current page
67
65
  currentPage = forcePage !== undefined ? forcePage : pageIndex + 1; // Convert 0-based to 1-based
68
- _context.next = 8;
66
+ _context.next = 7;
69
67
  return (0, _crudHandlers.refreshDataSource)(datasource, {
70
68
  orderBy: orderBy,
71
69
  page: currentPage || 1,
72
70
  filterFields: filterFields || {},
73
71
  condition: logicalOp || ""
74
72
  });
75
- case 8:
73
+ case 7:
76
74
  response = _context.sent;
77
75
  // Handle response data - always update dataset even if empty
78
76
  responseData = []; // Handle different response formats
@@ -83,11 +81,11 @@ var useServerSideSorting = exports.useServerSideSorting = function useServerSide
83
81
  // Add unique row IDs to the server response data
84
82
  dataWithIds = (0, _utils.addUniqueRowIds)(responseData);
85
83
  setInternalDataset(dataWithIds);
86
- _context.next = 20;
84
+ _context.next = 19;
87
85
  break;
88
- case 15:
89
- _context.prev = 15;
90
- _context.t0 = _context["catch"](3);
86
+ case 14:
87
+ _context.prev = 14;
88
+ _context.t0 = _context["catch"](2);
91
89
  console.error("Error fetching sorted data:", _context.t0);
92
90
  if (showToast) {
93
91
  showToast("Failed to sort data", "Error");
@@ -96,20 +94,16 @@ var useServerSideSorting = exports.useServerSideSorting = function useServerSide
96
94
  widget = name ? listener === null || listener === void 0 || (_listener$Widgets = listener.Widgets) === null || _listener$Widgets === void 0 ? void 0 : _listener$Widgets[name] : undefined;
97
95
  onError(null, widget, _context.t0, "sort");
98
96
  }
99
- case 20:
100
- _context.prev = 20;
101
- setLoading(false);
102
- return _context.finish(20);
103
- case 23:
97
+ case 19:
104
98
  case "end":
105
99
  return _context.stop();
106
100
  }
107
- }, _callee, null, [[3, 15, 20, 23]]);
101
+ }, _callee, null, [[2, 14]]);
108
102
  }));
109
103
  return function (_x) {
110
104
  return _ref2.apply(this, arguments);
111
105
  };
112
- }(), [datasource, isServerSideSorting, sorting, pageIndex, convertSortingToOrderBy, setInternalDataset, showToast, onError, filterFields, logicalOp, setLoading, listener, name]);
106
+ }(), [datasource, isServerSideSorting, sorting, pageIndex, convertSortingToOrderBy, setInternalDataset, showToast, onError, filterFields, logicalOp, listener, name]);
113
107
 
114
108
  // Debounced version to handle rapid successive calls
115
109
  var fetchSortedData = (0, _useDebounce.useDebounceCallback)(fetchSortedDataImpl, 100);
@@ -35,7 +35,7 @@ var __jsx = _react["default"].createElement;
35
35
  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; }
36
36
  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; }
37
37
  var WmTableComponent = exports.WmTableComponent = /*#__PURE__*/(0, _react.memo)(function (props) {
38
- var _listener$Widgets, _datasource$paginatio2, _datasource$paginatio4;
38
+ var _listener$App, _listener$Widgets, _datasource$paginatio2, _datasource$paginatio4;
39
39
  var name = props.name,
40
40
  _props$dataset = props.dataset,
41
41
  dataset = _props$dataset === void 0 ? [] : _props$dataset,
@@ -157,23 +157,15 @@ var WmTableComponent = exports.WmTableComponent = /*#__PURE__*/(0, _react.memo)(
157
157
  onBeforeexport = props.onBeforeexport,
158
158
  onAfterexport = props.onAfterexport,
159
159
  rest = (0, _objectWithoutProperties2["default"])(props, _excluded);
160
- var _useState = (0, _react.useState)((datasource === null || datasource === void 0 ? void 0 : datasource.loading) || false),
161
- loading = _useState[0],
162
- setLoading = _useState[1];
160
+ var loading = (datasource === null || datasource === void 0 ? void 0 : datasource.loading) || false;
163
161
  var prevDatasetRef = (0, _react.useRef)(dataset);
164
162
  var prevSelectedRow = (0, _react.useRef)(null);
165
163
  var tableApisRegistered = (0, _react.useRef)(false);
166
- (0, _react.useEffect)(function () {
167
- // Sync local loading state with datasource loading
168
- if ((datasource === null || datasource === void 0 ? void 0 : datasource.loading) !== undefined) {
169
- setLoading(datasource.loading);
170
- }
171
- }, [datasource === null || datasource === void 0 ? void 0 : datasource.loading]);
172
164
 
173
165
  // State for accumulated data in Scroll and On-Demand navigation modes
174
- var _useState2 = (0, _react.useState)([]),
175
- accumulatedData = _useState2[0],
176
- setAccumulatedData = _useState2[1];
166
+ var _useState = (0, _react.useState)([]),
167
+ accumulatedData = _useState[0],
168
+ setAccumulatedData = _useState[1];
177
169
 
178
170
  // Callback to receive accumulated data from pagination (for Scroll and On-Demand)
179
171
  var handleAccumulatedDataUpdate = (0, _react.useCallback)(function (data) {
@@ -194,13 +186,14 @@ var WmTableComponent = exports.WmTableComponent = /*#__PURE__*/(0, _react.memo)(
194
186
  setAccumulatedData([]);
195
187
  }
196
188
  }, [navigation]);
189
+ var notifyApp = listener === null || listener === void 0 || (_listener$App = listener.App) === null || _listener$App === void 0 ? void 0 : _listener$App.notifyApp;
197
190
 
198
191
  // Create a centralized toast notification function
199
192
  var showToast = (0, _react.useCallback)(function (message, type) {
200
- if (listener && listener.App && typeof listener.App.notifyApp === "function") {
201
- listener.App.notifyApp(message, type);
193
+ if (notifyApp) {
194
+ notifyApp(message, type);
202
195
  }
203
- }, [listener]);
196
+ }, [notifyApp]);
204
197
 
205
198
  // Determine if we're using server-side pagination
206
199
  // Check if datasource is API-aware (server-side) rather than checking runtime pagination data
@@ -276,7 +269,7 @@ var WmTableComponent = exports.WmTableComponent = /*#__PURE__*/(0, _react.memo)(
276
269
  var persisted = (0, _utils.getTableState)(name, effectiveStateHandler);
277
270
 
278
271
  // Determine the actual page size (original datasource page size)
279
- var actualPageSize = 0;
272
+ var actualPageSize;
280
273
  if ((persisted === null || persisted === void 0 ? void 0 : persisted.actualpagesize) !== undefined) {
281
274
  // If we have a persisted actualPageSize, use it (it should never change)
282
275
  actualPageSize = persisted.actualpagesize;
@@ -312,7 +305,7 @@ var WmTableComponent = exports.WmTableComponent = /*#__PURE__*/(0, _react.memo)(
312
305
  }
313
306
  return {
314
307
  initialPage: 1,
315
- initialPageSize: actualPageSize,
308
+ initialPageSize: actualPageSize || pagesize,
316
309
  initialActualPageSize: pagesize,
317
310
  initialSearchState: undefined,
318
311
  initialSortState: undefined
@@ -327,6 +320,9 @@ var WmTableComponent = exports.WmTableComponent = /*#__PURE__*/(0, _react.memo)(
327
320
  // Create a ref to hold the table instance
328
321
  var tableRef = _react["default"].useRef(null);
329
322
 
323
+ // Create a ref to hold the table container DOM element
324
+ var tableContainerRef = _react["default"].useRef(null);
325
+
330
326
  // Track previous page index to detect actual page changes
331
327
  var prevPageIndexRef = (0, _react.useRef)(-1);
332
328
 
@@ -537,7 +533,7 @@ var WmTableComponent = exports.WmTableComponent = /*#__PURE__*/(0, _react.memo)(
537
533
  }, [paginationState.pageIndex, isAddingNewRow, cancelEditing]);
538
534
 
539
535
  // Track sorting and column sizing states
540
- var _useState3 = (0, _react.useState)(function () {
536
+ var _useState2 = (0, _react.useState)(function () {
541
537
  // Convert initialSortState to TanStack Table sorting format
542
538
  if (initialSortState) {
543
539
  return [{
@@ -547,14 +543,14 @@ var WmTableComponent = exports.WmTableComponent = /*#__PURE__*/(0, _react.memo)(
547
543
  }
548
544
  return [];
549
545
  }),
550
- sorting = _useState3[0],
551
- setSorting = _useState3[1];
552
- var _useState4 = (0, _react.useState)({}),
553
- columnSizing = _useState4[0],
554
- setColumnSizing = _useState4[1];
555
- var _useState5 = (0, _react.useState)(false),
556
- isResizing = _useState5[0],
557
- setIsResizing = _useState5[1];
546
+ sorting = _useState2[0],
547
+ setSorting = _useState2[1];
548
+ var _useState3 = (0, _react.useState)({}),
549
+ columnSizing = _useState3[0],
550
+ setColumnSizing = _useState3[1];
551
+ var _useState4 = (0, _react.useState)(false),
552
+ isResizing = _useState4[0],
553
+ setIsResizing = _useState4[1];
558
554
 
559
555
  // Column selection handlers - just call the external callbacks
560
556
  // The class toggling is handled directly in TableHeaderComponent
@@ -672,31 +668,31 @@ var WmTableComponent = exports.WmTableComponent = /*#__PURE__*/(0, _react.memo)(
672
668
 
673
669
  //column proxy changes
674
670
  var columnsStateRef = (0, _react.useRef)(columns);
675
- var _useState6 = (0, _react.useState)(0),
676
- columnsVersion = _useState6[0],
677
- setColumnsVersion = _useState6[1];
671
+ var _useState5 = (0, _react.useState)(0),
672
+ columnsVersion = _useState5[0],
673
+ setColumnsVersion = _useState5[1];
678
674
  var parentFormColumns = (listener === null || listener === void 0 || (_listener$Widgets = listener.Widgets) === null || _listener$Widgets === void 0 || (_listener$Widgets = _listener$Widgets[parentForm]) === null || _listener$Widgets === void 0 ? void 0 : _listener$Widgets.dataoutput) || {};
679
- var _useState7 = (0, _react.useState)({}),
680
- columnOverrides = _useState7[0],
681
- setColumnOverrides = _useState7[1];
675
+ var _useState6 = (0, _react.useState)({}),
676
+ columnOverrides = _useState6[0],
677
+ setColumnOverrides = _useState6[1];
682
678
  var applyOverride = (0, _react.useCallback)(function (index, key, value) {
683
679
  setColumnOverrides(function (prev) {
684
680
  return _objectSpread(_objectSpread({}, prev), {}, (0, _defineProperty2["default"])({}, index, _objectSpread(_objectSpread({}, prev[index] || {}), {}, (0, _defineProperty2["default"])({}, key, value))));
685
681
  });
686
682
  }, []);
687
- var _useState8 = (0, _react.useState)([]),
688
- summaryRowDefs = _useState8[0],
689
- setSummaryRowDefs = _useState8[1];
690
- var _useState9 = (0, _react.useState)(false),
691
- summaryRowEnabled = _useState9[0],
692
- setSummaryRowEnabled = _useState9[1];
693
- var _useState0 = (0, _react.useState)([]),
694
- summaryRowDefObjects = _useState0[0],
695
- setSummaryRowDefObjects = _useState0[1];
683
+ var _useState7 = (0, _react.useState)([]),
684
+ summaryRowDefs = _useState7[0],
685
+ setSummaryRowDefs = _useState7[1];
686
+ var _useState8 = (0, _react.useState)(false),
687
+ summaryRowEnabled = _useState8[0],
688
+ setSummaryRowEnabled = _useState8[1];
689
+ var _useState9 = (0, _react.useState)([]),
690
+ summaryRowDefObjects = _useState9[0],
691
+ setSummaryRowDefObjects = _useState9[1];
696
692
  // Store column show property for summary rows: [rowIndex][columnKey] => show boolean
697
- var _useState1 = (0, _react.useState)({}),
698
- summaryRowColumnShow = _useState1[0],
699
- setSummaryRowColumnShow = _useState1[1];
693
+ var _useState0 = (0, _react.useState)({}),
694
+ summaryRowColumnShow = _useState0[0],
695
+ setSummaryRowColumnShow = _useState0[1];
700
696
  var setSummaryRowDef = (0, _react.useCallback)(function (columnKey, data, rowIndex, refresh, show) {
701
697
  setSummaryRowDefs(function (prev) {
702
698
  var newDefs = (0, _toConsumableArray2["default"])(prev);
@@ -901,7 +897,6 @@ var WmTableComponent = exports.WmTableComponent = /*#__PURE__*/(0, _react.memo)(
901
897
  pageIndex: table.getState().pagination.pageIndex,
902
898
  onError: onError,
903
899
  onBeforefilter: onBeforefilter,
904
- setLoading: setLoading,
905
900
  filterFields: memoizedFilterFields,
906
901
  logicalOp: memoizedLogicalOp,
907
902
  listener: listener,
@@ -1113,6 +1108,10 @@ var WmTableComponent = exports.WmTableComponent = /*#__PURE__*/(0, _react.memo)(
1113
1108
  // Use requestAnimationFrame to ensure DOM is fully painted
1114
1109
  requestAnimationFrame(function () {
1115
1110
  if (onDatarender) {
1111
+ // Set nativeElement to the table container DOM element
1112
+ if (listener.Widgets[name] && tableContainerRef.current) {
1113
+ listener.Widgets[name].nativeElement = tableContainerRef.current;
1114
+ }
1116
1115
  onDatarender(listener === null || listener === void 0 ? void 0 : listener.Widgets[name],
1117
1116
  // widget reference to match Angular format
1118
1117
  {
@@ -1386,7 +1385,7 @@ var WmTableComponent = exports.WmTableComponent = /*#__PURE__*/(0, _react.memo)(
1386
1385
  return _context2.stop();
1387
1386
  }
1388
1387
  }, _callee2, null, [[4, 23]]);
1389
- })), [datasource, isServerSidePagination(), setInternalDataset, showToast, onError, listener, name]); // Removed 'table' from dependencies to prevent recreation
1388
+ })), [datasource, isServerSidePagination(), setInternalDataset, showToast, onError, name]); // Removed 'table' from dependencies to prevent recreation
1390
1389
 
1391
1390
  var tableApis = {
1392
1391
  columns: columnsProxy,
@@ -1399,14 +1398,6 @@ var WmTableComponent = exports.WmTableComponent = /*#__PURE__*/(0, _react.memo)(
1399
1398
  selectPageSize: selectPageSize
1400
1399
  };
1401
1400
 
1402
- // Expose table API through listener
1403
- (0, _react.useEffect)(function () {
1404
- if (listener && listener.onChange && !tableApisRegistered.current) {
1405
- listener.onChange(name, tableApis);
1406
- tableApisRegistered.current = true;
1407
- }
1408
- }, []);
1409
-
1410
1401
  // Register table with parent form's formWidgets when parentForm is present
1411
1402
  (0, _react.useEffect)(function () {
1412
1403
  var _listener$Widgets5;
@@ -1461,6 +1452,13 @@ var WmTableComponent = exports.WmTableComponent = /*#__PURE__*/(0, _react.memo)(
1461
1452
  // Update only if changed
1462
1453
  if (!(0, _lodashEs.isEqual)(prevSelectedRow.current, selecteditem)) {
1463
1454
  prevSelectedRow.current = selecteditem;
1455
+ if (tableApisRegistered.current) {
1456
+ listener.onChange(name, {
1457
+ selecteditem: selecteditem
1458
+ });
1459
+ return;
1460
+ }
1461
+ tableApisRegistered.current = true;
1464
1462
  listener.onChange(name, _objectSpread(_objectSpread({}, tableApis), {}, {
1465
1463
  selecteditem: selecteditem
1466
1464
  }));
@@ -1477,6 +1475,7 @@ var WmTableComponent = exports.WmTableComponent = /*#__PURE__*/(0, _react.memo)(
1477
1475
  className: "app-livegrid",
1478
1476
  name: name
1479
1477
  }, __jsx(_material.Box, {
1478
+ ref: tableContainerRef,
1480
1479
  className: "app-grid app-panel panel app-datagrid ".concat(className).trim(),
1481
1480
  name: name,
1482
1481
  editmode: editmode,
@@ -1660,15 +1659,14 @@ var WmTableComponent = exports.WmTableComponent = /*#__PURE__*/(0, _react.memo)(
1660
1659
  // If all checks pass, consider components equal (skip re-render)
1661
1660
  return true;
1662
1661
  });
1663
- WmTableComponent.displayName = "WmTableComponent";
1664
1662
 
1665
1663
  // Wrapper component that provides EditedRowsContext to WmTableComponent
1666
1664
  var WmTableWithProvider = function WmTableWithProvider(props) {
1667
1665
  return __jsx(_useEditedRows.EditedRowsProvider, null, __jsx(WmTableComponent, props));
1668
1666
  };
1667
+ WmTableWithProvider.displayName = "WmTable";
1669
1668
 
1670
1669
  // @ts-ignore
1671
1670
  var WmTable = (0, _withBaseWrapper["default"])(WmTableWithProvider);
1672
- // Override the displayName set by withBaseWrapper
1673
1671
  WmTable.displayName = "WmTable";
1674
1672
  var _default = exports["default"] = WmTable;
@@ -89,7 +89,6 @@ var buildSelectionColumns = exports.buildSelectionColumns = function buildSelect
89
89
  // Use selectedRowIds and internalDataset directly for reliable state
90
90
  var selectedCount = selectedRowIds.length;
91
91
  var isAllSelected = selectedCount > 0 && selectedCount === internalDataset.length;
92
- var isIndeterminate = selectedCount > 0 && selectedCount < internalDataset.length;
93
92
  return __jsx(_material.Box, {
94
93
  sx: {
95
94
  display: "flex",
@@ -98,20 +97,16 @@ var buildSelectionColumns = exports.buildSelectionColumns = function buildSelect
98
97
  }
99
98
  }, __jsx(_material.Box, {
100
99
  className: "app-checkbox checkbox"
101
- }, __jsx(_material.FormControlLabel, {
102
- control: __jsx(_material.Checkbox, {
103
- checked: isAllSelected,
104
- indeterminate: isIndeterminate,
105
- onChange: function onChange(e) {
106
- return handleSelectAll(e.target.checked);
107
- },
108
- size: "small",
109
- inputProps: {
110
- "aria-label": "Select all rows"
111
- }
112
- }),
113
- label: "",
114
- className: "caption"
100
+ }, __jsx(_material.Checkbox, {
101
+ checked: isAllSelected,
102
+ indeterminate: false,
103
+ onChange: function onChange(e) {
104
+ return handleSelectAll(e.target.checked);
105
+ },
106
+ size: "small",
107
+ inputProps: {
108
+ "aria-label": "Select all rows"
109
+ }
115
110
  })));
116
111
  },
117
112
  cell: function cell(_ref3) {
@@ -129,23 +124,19 @@ var buildSelectionColumns = exports.buildSelectionColumns = function buildSelect
129
124
  placement: "top"
130
125
  }, __jsx(_material.Box, {
131
126
  className: "app-checkbox checkbox"
132
- }, __jsx(_material.FormControlLabel, {
133
- control: __jsx(_material.Checkbox, {
134
- checked: isSelected,
135
- onChange: function onChange(e) {
136
- return handleMultiSelection(rowId, row.original, e.target.checked);
137
- },
138
- value: rowId,
139
- name: "gridMultiSelect",
140
- inputProps: {
141
- "aria-label": multiselectarialabel,
142
- role: "checkbox",
143
- "aria-live": "assertive"
144
- },
145
- size: "small"
146
- }),
147
- label: "",
148
- className: "caption"
127
+ }, __jsx(_material.Checkbox, {
128
+ checked: isSelected,
129
+ onChange: function onChange(e) {
130
+ return handleMultiSelection(rowId, row.original, e.target.checked);
131
+ },
132
+ value: rowId,
133
+ name: "gridMultiSelect",
134
+ inputProps: {
135
+ "aria-label": multiselectarialabel,
136
+ role: "checkbox",
137
+ "aria-live": "assertive"
138
+ },
139
+ size: "small"
149
140
  }))), isSelected ? __jsx("span", {
150
141
  className: "sr-only",
151
142
  "aria-live": "assertive"
@@ -703,8 +703,13 @@ var INTERNAL_PROPERTIES = exports.INTERNAL_PROPERTIES = ["_wmTableRowId",
703
703
  // Helper function to get property values
704
704
  "rowOperations",
705
705
  // Internal column for row action buttons
706
- "rowActions" // Internal row actions property
707
- ];
706
+ "rowActions",
707
+ // Internal row actions property
708
+ "_wmListItemId",
709
+ // Internal list item identifier
710
+ "selected",
711
+ // Internal selected property
712
+ "_wm"];
708
713
 
709
714
  /**
710
715
  * Cleans row data by removing internal properties
@@ -105,6 +105,12 @@ var WmDialog = exports.WmDialog = /*#__PURE__*/(0, _react.memo)(function (props)
105
105
  disableEscapeKeyDown: modal && props.closable === false,
106
106
  fullWidth: true,
107
107
  keepMounted: true,
108
+ hideBackdrop: false,
109
+ BackdropProps: {
110
+ sx: {
111
+ pointerEvents: "auto"
112
+ }
113
+ },
108
114
  sx: {
109
115
  "& .MuiDialog-scrollPaper": _objectSpread({}, props.sheet && {
110
116
  borderRadius: 0
@@ -100,8 +100,11 @@ var WmCheckbox = exports.WmCheckbox = /*#__PURE__*/(0, _react.memo)(function (pr
100
100
  });
101
101
  }
102
102
  if (onChange) {
103
- // Pass the actual value in the onChange callback
104
- onChange(event, listener === null || listener === void 0 ? void 0 : listener.Widgets[name], newValue, actualValue !== null && actualValue !== void 0 ? actualValue : uncheckedvalue);
103
+ var _window;
104
+ (_window = window) === null || _window === void 0 || _window.queueMicrotask(function () {
105
+ // Pass the actual value in the onChange callback
106
+ onChange(event, listener === null || listener === void 0 ? void 0 : listener.Widgets[name], newValue, actualValue !== null && actualValue !== void 0 ? actualValue : uncheckedvalue);
107
+ });
105
108
  }
106
109
  }, [checkedvalue, uncheckedvalue, onChange, listener, name, actualValue]);
107
110
  var handleBlur = (0, _react.useCallback)(function (event) {
@@ -72,11 +72,23 @@ var DatePickerPopover = function DatePickerPopover(_ref) {
72
72
  var renderCalendarView = function renderCalendarView() {
73
73
  var minDateMoment = restProps.mindate ? (0, _momentTimezone["default"])(getDateObj(restProps.mindate)) : undefined;
74
74
  var maxDateMoment = restProps.maxdate ? (0, _momentTimezone["default"])(getDateObj(restProps.maxdate)) : undefined;
75
+
76
+ // Disable prev/next arrows when at min/max month
77
+ var isAtMinMonth = (minDateMoment === null || minDateMoment === void 0 ? void 0 : minDateMoment.isValid()) && calendarDate.isValid() && calendarDate.clone().startOf("month").isSameOrBefore(minDateMoment.clone().startOf("month"));
78
+ var isAtMaxMonth = (maxDateMoment === null || maxDateMoment === void 0 ? void 0 : maxDateMoment.isValid()) && calendarDate.isValid() && calendarDate.clone().startOf("month").isSameOrAfter(maxDateMoment.clone().startOf("month"));
75
79
  var commonProps = {
76
80
  minDate: minDateMoment,
77
81
  maxDate: maxDateMoment,
78
82
  disabled: isNavigationDisabled
79
83
  };
84
+ var dateCalendarSlotProps = {
85
+ previousIconButton: {
86
+ disabled: isAtMinMonth
87
+ },
88
+ nextIconButton: {
89
+ disabled: isAtMaxMonth
90
+ }
91
+ };
80
92
  switch (viewmode) {
81
93
  case "year":
82
94
  return __jsx(_styled.StyledYearCalendar, (0, _extends2["default"])({
@@ -107,7 +119,8 @@ var DatePickerPopover = function DatePickerPopover(_ref) {
107
119
  },
108
120
  dayOfWeekFormatter: function dayOfWeekFormatter(date) {
109
121
  return date.locale(currentLocale).format("ddd");
110
- }
122
+ },
123
+ slotProps: dateCalendarSlotProps
111
124
  }, commonProps));
112
125
  }
113
126
  default:
@@ -131,7 +144,8 @@ var DatePickerPopover = function DatePickerPopover(_ref) {
131
144
  },
132
145
  dayOfWeekFormatter: function dayOfWeekFormatter(date) {
133
146
  return date.locale(currentLocale).format("ddd");
134
- }
147
+ },
148
+ slotProps: dateCalendarSlotProps
135
149
  }, commonProps));
136
150
  default:
137
151
  return __jsx(_styled.StyledDateCalendar, (0, _extends2["default"])({
@@ -141,6 +155,7 @@ var DatePickerPopover = function DatePickerPopover(_ref) {
141
155
  displayWeekNumber: showweeks,
142
156
  views: ["day", "year", "month"],
143
157
  view: calendarViewMode,
158
+ slotProps: dateCalendarSlotProps,
144
159
  onViewChange: function onViewChange(newView) {
145
160
  if (!isNavigationDisabled && newView) {
146
161
  setCalendarViewMode(newView);