@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.
Files changed (73) hide show
  1. package/actions/navigation-action.js +5 -3
  2. package/actions/notification-action.js +6 -3
  3. package/components/basic/anchor/index.js +6 -7
  4. package/components/basic/label/index.js +2 -2
  5. package/components/basic/search/index.js +7 -3
  6. package/components/chart/components/barColumnChart/index.js +2 -4
  7. package/components/chart/components/pieDonutChart/index.js +3 -1
  8. package/components/chart/hooks/useBarYAxisExtras.js +52 -0
  9. package/components/chart/hooks/useXAxisConfig.js +98 -0
  10. package/components/chart/index.js +72 -39
  11. package/components/chart/utils.js +23 -12
  12. package/components/container/index.js +6 -7
  13. package/components/container/panel/components/panel-header/index.js +3 -2
  14. package/components/container/panel/index.js +13 -9
  15. package/components/container/tabs/index.js +1 -0
  16. package/components/container/tabs/tab-pane/index.js +39 -3
  17. package/components/container/wizard/index.js +187 -57
  18. package/components/container/wizard/utils.js +1 -1
  19. package/components/container/wizard/wizard-action/index.js +9 -4
  20. package/components/container/wizard/wizard-step/index.js +21 -8
  21. package/components/data/form/base-form/index.js +51 -11
  22. package/components/data/form/form-controller/withFormController.js +7 -10
  23. package/components/data/list/components/GroupedListItems.js +5 -1
  24. package/components/data/list/components/ListItemWithTemplate.js +4 -1
  25. package/components/data/list/hooks/useListEffects.js +34 -14
  26. package/components/data/list/hooks/useListEventHandlers.js +18 -2
  27. package/components/data/list/hooks/useListState.js +15 -2
  28. package/components/data/list/index.js +1 -0
  29. package/components/data/list/utils/list-helpers.js +3 -5
  30. package/components/data/list/utils/list-widget-methods.js +1 -1
  31. package/components/data/live-filter/index.js +6 -5
  32. package/components/data/live-form/index.js +24 -14
  33. package/components/data/table/components/TableBody.js +5 -21
  34. package/components/data/table/components/TableHeader.js +5 -1
  35. package/components/data/table/index.js +21 -5
  36. package/components/data/utils/field-data-utils.js +1 -1
  37. package/components/dialogs/index.js +14 -16
  38. package/components/input/currency/index.js +11 -7
  39. package/components/input/default/checkbox/index.js +2 -3
  40. package/components/input/default/checkboxset/index.js +2 -22
  41. package/components/input/default/radioset/index.js +5 -4
  42. package/components/input/epoch/datetime/index.js +6 -2
  43. package/components/input/epoch/time/index.js +2 -1
  44. package/components/input/number/index.js +2 -2
  45. package/components/input/text/util.js +2 -0
  46. package/components/input/textarea/index.js +22 -24
  47. package/components/layout/leftnav/index.js +1 -1
  48. package/components/navbar/nav/index.js +97 -7
  49. package/components/navbar/nav-item/index.js +5 -2
  50. package/components/navigation/menu/index.js +73 -12
  51. package/components/navigation/popover/index.js +2 -0
  52. package/components/page/error-boundary/index.js +1 -0
  53. package/components/prefab/container/index.js +10 -3
  54. package/context/LocalizationProvider.js +1 -0
  55. package/context/PrefabContext.js +138 -13
  56. package/context/WidgetProvider.js +2 -2
  57. package/core/constants/events.js +12 -6
  58. package/core/constants/index.js +6 -11
  59. package/core/formatter/number-formatters.js +1 -1
  60. package/core/proxy-service.js +72 -36
  61. package/core/util/utils.js +23 -4
  62. package/higherOrder/BaseApp.js +60 -18
  63. package/higherOrder/BasePage.js +99 -77
  64. package/higherOrder/BasePrefab.js +13 -5
  65. package/higherOrder/withBaseWrapper.js +3 -3
  66. package/hooks/useDataSourceSubscription.js +1 -1
  67. package/hooks/useHttp.js +20 -13
  68. package/mui-config/theme.js +3 -0
  69. package/package-lock.json +781 -669
  70. package/package.json +3 -3
  71. package/store/index.js +5 -1
  72. package/utils/lib-error-skipper.js +196 -0
  73. package/variables/service-variable.js +17 -14
@@ -35,15 +35,13 @@ var WmPanel = function WmPanel(props) {
35
35
  fullscreen = _props$fullscreen === void 0 ? false : _props$fullscreen,
36
36
  helptext = props.helptext,
37
37
  hint = props.hint,
38
- _props$iconclass = props.iconclass,
39
- iconclass = _props$iconclass === void 0 ? "wi wi-account-circle" : _props$iconclass,
38
+ iconclass = props.iconclass,
40
39
  iconheight = props.iconheight,
41
40
  iconmargin = props.iconmargin,
42
41
  iconurl = props.iconurl,
43
42
  iconwidth = props.iconwidth,
44
43
  subheading = props.subheading,
45
- _props$title = props.title,
46
- title = _props$title === void 0 ? "Title" : _props$title,
44
+ title = props.title,
47
45
  className = props.className,
48
46
  style = props.style,
49
47
  children = props.children,
@@ -77,6 +75,7 @@ var WmPanel = function WmPanel(props) {
77
75
  var _useState2 = (0, _react.useState)(true),
78
76
  show = _useState2[0],
79
77
  setShow = _useState2[1];
78
+ var hasTriggeredOnLoadRef = (0, _react.useRef)(false);
80
79
 
81
80
  // Manages expand/collapse state
82
81
  var _usePanelExpansion = (0, _hooks.usePanelExpansion)(expanded, onExpand, onCollapse, name, listener),
@@ -134,8 +133,10 @@ var WmPanel = function WmPanel(props) {
134
133
  // onLoad handler
135
134
  (0, _react.useEffect)(function () {
136
135
  var _listener$Widgets6;
136
+ if (hasTriggeredOnLoadRef.current || !isExpanded) return;
137
+ hasTriggeredOnLoadRef.current = true;
137
138
  onLoad === null || onLoad === void 0 || onLoad(listener === null || listener === void 0 || (_listener$Widgets6 = listener.Widgets) === null || _listener$Widgets6 === void 0 ? void 0 : _listener$Widgets6[name]);
138
- }, []);
139
+ }, [isExpanded]);
139
140
  (0, _react.useEffect)(function () {
140
141
  if (isExpanded) {
141
142
  computeDimensions();
@@ -156,6 +157,7 @@ var WmPanel = function WmPanel(props) {
156
157
  };
157
158
  }
158
159
  }, [closable]);
160
+ var showHeader = Boolean(iconurl || iconclass || collapsible || actions && (Array.isArray(actions) ? actions.length > 0 : true) || title || subheading || enablefullscreen);
159
161
 
160
162
  // Panel methods exposed via listener
161
163
  var collapse = function collapse() {
@@ -219,7 +221,7 @@ var WmPanel = function WmPanel(props) {
219
221
  onMouseOut: handleMouseOut,
220
222
  hidden: !show,
221
223
  component: "div"
222
- }, componentProps), __jsx(_material.Box, {
224
+ }, componentProps), showHeader && __jsx(_material.Box, {
223
225
  className: (0, _clsx["default"])("panel-heading", {
224
226
  "show-help": helpVisible
225
227
  }),
@@ -251,7 +253,8 @@ var WmPanel = function WmPanel(props) {
251
253
  onToggleHelp: toggleHelp,
252
254
  onClose: handleClose,
253
255
  onActionsclick: onActionsclick
254
- })), isExpanded && __jsx(_material.Box, {
256
+ })), __jsx(_material.Box, {
257
+ hidden: !isExpanded,
255
258
  className: "panel-content",
256
259
  ref: panelContentRef
257
260
  }, __jsx(_material.Box, {
@@ -276,9 +279,10 @@ var WmPanel = function WmPanel(props) {
276
279
  var WmPanelFooter = exports.WmPanelFooter = function WmPanelFooter(_ref) {
277
280
  var children = _ref.children,
278
281
  name = _ref.name;
279
- return __jsx(_material.Box, {
282
+ return __jsx("div", {
280
283
  className: "app-panel-footer panel-footer clearfix",
281
- "aria-label": name
284
+ "aria-label": name,
285
+ name: name
282
286
  }, children);
283
287
  };
284
288
  WmPanelFooter.displayName = "WmPanelFooter";
@@ -333,6 +333,7 @@ var WmTabs = /*#__PURE__*/(0, _react.memo)(function (Props) {
333
333
  display: "flex",
334
334
  flexDirection: getFlexDirection()
335
335
  }),
336
+ name: name,
336
337
  value: selectedIndex,
337
338
  onValueChange: function onValueChange(value) {
338
339
  var newIndex = value;
@@ -1,16 +1,18 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports["default"] = exports.WmTabpane = void 0;
8
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
- var _react = _interopRequireDefault(require("react"));
10
+ var _react = _interopRequireWildcard(require("react"));
10
11
  var _clsx2 = _interopRequireDefault(require("clsx"));
11
12
  var _tabs = require("@base-ui-components/react/tabs");
12
13
  var _withBaseWrapper = _interopRequireDefault(require("@wavemaker/react-runtime/higherOrder/withBaseWrapper"));
13
14
  var _ = require("..");
15
+ 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); }
14
16
  var __jsx = _react["default"].createElement;
15
17
  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; }
16
18
  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,10 +24,44 @@ var WmTabpane = exports.WmTabpane = function WmTabpane(props) {
22
24
  name = props.name,
23
25
  index = props.index;
24
26
  var _useTabsContext = (0, _.useTabsContext)(),
25
- selectedIndex = _useTabsContext.selectedIndex;
27
+ selectedIndex = _useTabsContext.selectedIndex,
28
+ setSelectedIndex = _useTabsContext.setSelectedIndex;
29
+ var wasActiveRef = _react["default"].useRef(false);
30
+ var loadedRef = _react["default"].useRef(false);
31
+ (0, _react.useEffect)(function () {
32
+ var _props$listener;
33
+ var isActive = selectedIndex === index;
34
+ var widgetInstance = props === null || props === void 0 || (_props$listener = props.listener) === null || _props$listener === void 0 || (_props$listener = _props$listener.Widgets) === null || _props$listener === void 0 ? void 0 : _props$listener[name];
35
+ if (isActive) {
36
+ if (!loadedRef.current) {
37
+ var _props$onLoad;
38
+ props === null || props === void 0 || (_props$onLoad = props.onLoad) === null || _props$onLoad === void 0 || _props$onLoad.call(props, null, widgetInstance);
39
+ loadedRef.current = true;
40
+ }
41
+ if (!wasActiveRef.current) {
42
+ var _props$onSelect;
43
+ props === null || props === void 0 || (_props$onSelect = props.onSelect) === null || _props$onSelect === void 0 || _props$onSelect.call(props, null, widgetInstance, index);
44
+ wasActiveRef.current = true;
45
+ }
46
+ } else if (wasActiveRef.current) {
47
+ var _props$onDeselect;
48
+ props === null || props === void 0 || (_props$onDeselect = props.onDeselect) === null || _props$onDeselect === void 0 || _props$onDeselect.call(props, null, widgetInstance, index);
49
+ wasActiveRef.current = false;
50
+ }
51
+ // eslint-disable-next-line react-hooks/exhaustive-deps
52
+ }, [selectedIndex, name]);
53
+ (0, _react.useEffect)(function () {
54
+ if (props.listener && props.listener.onChange) {
55
+ props.listener.onChange(name, {
56
+ select: function select() {
57
+ return setSelectedIndex(index);
58
+ }
59
+ });
60
+ }
61
+ }, []);
26
62
  return __jsx(_tabs.Tabs.Panel, {
27
63
  value: index,
28
- className: (0, _clsx2["default"])((_clsx = {
64
+ className: (0, _clsx2["default"])("tab-pane", (_clsx = {
29
65
  disabled: disabled
30
66
  }, (0, _defineProperty2["default"])(_clsx, className, !!className), (0, _defineProperty2["default"])(_clsx, "active", selectedIndex === index), _clsx)),
31
67
  role: "tabpanel",
@@ -20,6 +20,7 @@ var _wizardStep = _interopRequireDefault(require("./wizard-step"));
20
20
  var _WizardStep = require("./components/WizardStep");
21
21
  var _form = _interopRequireDefault(require("@wavemaker/react-runtime/components/data/form"));
22
22
  var _formUtils = require("@wavemaker/react-runtime/utils/form-utils");
23
+ var _isEqual = _interopRequireDefault(require("lodash-es/isEqual"));
23
24
  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); }
24
25
  var __jsx = _react["default"].createElement;
25
26
  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; }
@@ -88,6 +89,10 @@ var WmWizard = /*#__PURE__*/(0, _react.memo)(function (props) {
88
89
  isInitialized = _useState3[0],
89
90
  setIsInitialized = _useState3[1];
90
91
  var formRefs = (0, _react.useRef)({});
92
+ var navIndexRef = (0, _react.useRef)(-1);
93
+ var _useState4 = (0, _react.useState)(false),
94
+ formReady = _useState4[0],
95
+ setFormReady = _useState4[1];
91
96
 
92
97
  // Create dynamic steps callback
93
98
  var createDynamicSteps = (0, _react.useCallback)(function (datasetItems) {
@@ -132,6 +137,11 @@ var WmWizard = /*#__PURE__*/(0, _react.memo)(function (props) {
132
137
  return step.name === currentStep.name;
133
138
  });
134
139
  }, [currentStep, visibleSteps]);
140
+
141
+ // Sync navigation ref whenever the visible current index changes
142
+ (0, _react.useEffect)(function () {
143
+ navIndexRef.current = currentStepIndex;
144
+ }, [currentStepIndex]);
135
145
  var _hasNextStep = (0, _react.useMemo)(function () {
136
146
  return currentStepIndex < visibleSteps.length - 1;
137
147
  }, [currentStepIndex, visibleSteps]);
@@ -141,9 +151,41 @@ var WmWizard = /*#__PURE__*/(0, _react.memo)(function (props) {
141
151
  var showDoneBtn = (0, _react.useMemo)(function () {
142
152
  return !_hasNextStep && (currentStep === null || currentStep === void 0 ? void 0 : currentStep.enableDone) !== false;
143
153
  }, [_hasNextStep, currentStep]);
144
- var _useState4 = (0, _react.useState)(true),
145
- isStepValid = _useState4[0],
146
- setIsStepValid = _useState4[1];
154
+ var _useState5 = (0, _react.useState)(true),
155
+ isStepValid = _useState5[0],
156
+ setIsStepValid = _useState5[1];
157
+ var _useState6 = (0, _react.useState)(""),
158
+ formValiditySignature = _useState6[0],
159
+ setFormValiditySignature = _useState6[1];
160
+ (0, _react.useEffect)(function () {
161
+ var unbind = null;
162
+ var bindEmitEvent = function bindEmitEvent() {
163
+ var _formRefs$current;
164
+ var stepName = currentStep === null || currentStep === void 0 ? void 0 : currentStep.name;
165
+ if (!stepName) return false;
166
+ var formElOrList = (_formRefs$current = formRefs.current) === null || _formRefs$current === void 0 ? void 0 : _formRefs$current[stepName];
167
+ var forms = formElOrList ? Array.isArray(formElOrList) ? formElOrList : [formElOrList] : [];
168
+ if (forms.length === 0) return false;
169
+ var onValidity = function onValidity(e) {
170
+ var detail = e.detail;
171
+ var isValid = (detail === null || detail === void 0 ? void 0 : detail.isValid) !== false;
172
+ setFormValiditySignature(isValid ? "1" : "0");
173
+ };
174
+ forms.forEach(function (f) {
175
+ return f.addEventListener("wm:form-validity", onValidity);
176
+ });
177
+ unbind = function unbind() {
178
+ forms.forEach(function (f) {
179
+ return f.removeEventListener("wm:form-validity", onValidity);
180
+ });
181
+ };
182
+ return true;
183
+ };
184
+ bindEmitEvent();
185
+ return function () {
186
+ if (unbind) unbind();
187
+ };
188
+ }, [currentStep, formReady]);
147
189
  (0, _react.useEffect)(function () {
148
190
  var validateStep = /*#__PURE__*/function () {
149
191
  var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
@@ -199,7 +241,7 @@ var WmWizard = /*#__PURE__*/(0, _react.memo)(function (props) {
199
241
  };
200
242
  }();
201
243
  validateStep();
202
- }, [currentStep]);
244
+ }, [currentStep, formValiditySignature, formReady]);
203
245
  var enableNext = (0, _react.useMemo)(function () {
204
246
  return enablenext || (currentStep === null || currentStep === void 0 ? void 0 : currentStep.enableNext) !== false && (currentStep === null || currentStep === void 0 ? void 0 : currentStep.isValid) !== false && isStepValid;
205
247
  }, [enablenext, currentStep, isStepValid]);
@@ -273,108 +315,143 @@ var WmWizard = /*#__PURE__*/(0, _react.memo)(function (props) {
273
315
  // Navigation functions
274
316
  var _next = (0, _react.useCallback)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
275
317
  var eventName,
276
- _currentStep$onSkip,
318
+ fromIndex,
319
+ fromStep,
320
+ nextStep,
321
+ nextIndex,
322
+ _fromStep$onSkip,
277
323
  response,
278
- _currentStep$onNext,
324
+ _fromStep$onNext,
279
325
  _response,
280
326
  _args2 = arguments;
281
327
  return _regenerator["default"].wrap(function _callee2$(_context2) {
282
328
  while (1) switch (_context2.prev = _context2.next) {
283
329
  case 0:
284
330
  eventName = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : "next";
285
- if (currentStep) {
286
- _context2.next = 3;
331
+ fromIndex = navIndexRef.current >= 0 ? navIndexRef.current : currentStepIndex;
332
+ fromStep = (0, _utils.getStepByIndex)(fromIndex, visibleSteps);
333
+ if (fromStep) {
334
+ _context2.next = 5;
287
335
  break;
288
336
  }
289
337
  return _context2.abrupt("return");
290
- case 3:
338
+ case 5:
339
+ nextStep = (0, _utils.getNextValidStep)(fromIndex + 1, visibleSteps);
340
+ if (nextStep) {
341
+ _context2.next = 8;
342
+ break;
343
+ }
344
+ return _context2.abrupt("return");
345
+ case 8:
346
+ nextIndex = visibleSteps.findIndex(function (s) {
347
+ return s.name === nextStep.name;
348
+ });
291
349
  if (!(eventName === "skip")) {
292
- _context2.next = 13;
350
+ _context2.next = 19;
293
351
  break;
294
352
  }
295
- response = (_currentStep$onSkip = currentStep.onSkip) === null || _currentStep$onSkip === void 0 ? void 0 : _currentStep$onSkip.call(currentStep, currentStep, currentStep, currentStepIndex);
353
+ response = (_fromStep$onSkip = fromStep.onSkip) === null || _fromStep$onSkip === void 0 ? void 0 : _fromStep$onSkip.call(fromStep, fromStep, fromStep, fromIndex);
296
354
  if (!(response !== undefined)) {
297
- _context2.next = 10;
355
+ _context2.next = 16;
298
356
  break;
299
357
  }
300
- _context2.next = 8;
358
+ _context2.next = 14;
301
359
  return (0, _utils.handleNavigation)(response, function () {
302
- return (0, _utils.extendNextFn)(currentStep, currentStepIndex, visibleSteps, setSteps);
360
+ return (0, _utils.extendNextFn)(fromStep, fromIndex, visibleSteps, setSteps);
303
361
  });
304
- case 8:
305
- _context2.next = 11;
362
+ case 14:
363
+ _context2.next = 17;
306
364
  break;
307
- case 10:
308
- (0, _utils.extendNextFn)(currentStep, currentStepIndex, visibleSteps, setSteps);
309
- case 11:
310
- _context2.next = 24;
365
+ case 16:
366
+ (0, _utils.extendNextFn)(fromStep, fromIndex, visibleSteps, setSteps);
367
+ case 17:
368
+ _context2.next = 30;
311
369
  break;
312
- case 13:
313
- if (!(currentStep.isValid && eventName === "next")) {
314
- _context2.next = 23;
370
+ case 19:
371
+ if (!(fromStep.isValid && eventName === "next")) {
372
+ _context2.next = 29;
315
373
  break;
316
374
  }
317
- _response = (_currentStep$onNext = currentStep.onNext) === null || _currentStep$onNext === void 0 ? void 0 : _currentStep$onNext.call(currentStep, currentStep, currentStep, currentStepIndex);
375
+ _response = (_fromStep$onNext = fromStep.onNext) === null || _fromStep$onNext === void 0 ? void 0 : _fromStep$onNext.call(fromStep, fromStep, fromStep, fromIndex);
318
376
  if (!(_response !== undefined)) {
319
- _context2.next = 20;
377
+ _context2.next = 26;
320
378
  break;
321
379
  }
322
- _context2.next = 18;
380
+ _context2.next = 24;
323
381
  return (0, _utils.handleNavigation)(_response, function () {
324
- return (0, _utils.extendNextFn)(currentStep, currentStepIndex, visibleSteps, setSteps);
382
+ return (0, _utils.extendNextFn)(fromStep, fromIndex, visibleSteps, setSteps);
325
383
  });
326
- case 18:
327
- _context2.next = 21;
384
+ case 24:
385
+ _context2.next = 27;
328
386
  break;
329
- case 20:
330
- (0, _utils.extendNextFn)(currentStep, currentStepIndex, visibleSteps, setSteps);
331
- case 21:
332
- _context2.next = 24;
387
+ case 26:
388
+ (0, _utils.extendNextFn)(fromStep, fromIndex, visibleSteps, setSteps);
389
+ case 27:
390
+ _context2.next = 30;
333
391
  break;
334
- case 23:
335
- if (enablenext && !currentStep.isValid) {
392
+ case 29:
393
+ if (enablenext && !fromStep.isValid) {
336
394
  console.warn("Cannot proceed: current step is invalid");
337
395
  } else {
338
- (0, _utils.extendNextFn)(currentStep, currentStepIndex, visibleSteps, setSteps);
396
+ (0, _utils.extendNextFn)(fromStep, fromIndex, visibleSteps, setSteps);
339
397
  }
340
- case 24:
398
+ case 30:
399
+ // update ref to reflect the logical next position immediately
400
+ navIndexRef.current = nextIndex;
401
+ setFormReady(false);
402
+ case 32:
341
403
  case "end":
342
404
  return _context2.stop();
343
405
  }
344
406
  }, _callee2);
345
- })), [currentStep, currentStepIndex, visibleSteps, enablenext]);
407
+ })), [currentStepIndex, visibleSteps, enablenext]);
346
408
  var prev = (0, _react.useCallback)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
347
- var _currentStep$onPrev;
348
- var response;
409
+ var _fromStep$onPrev;
410
+ var fromIndex, fromStep, targetStep, prevIndex, response;
349
411
  return _regenerator["default"].wrap(function _callee3$(_context3) {
350
412
  while (1) switch (_context3.prev = _context3.next) {
351
413
  case 0:
352
- if (currentStep) {
353
- _context3.next = 2;
414
+ fromIndex = navIndexRef.current >= 0 ? navIndexRef.current : currentStepIndex;
415
+ fromStep = (0, _utils.getStepByIndex)(fromIndex, visibleSteps);
416
+ if (fromStep) {
417
+ _context3.next = 4;
418
+ break;
419
+ }
420
+ return _context3.abrupt("return");
421
+ case 4:
422
+ targetStep = (0, _utils.getPrevValidStep)(fromIndex - 1, visibleSteps);
423
+ if (targetStep) {
424
+ _context3.next = 7;
354
425
  break;
355
426
  }
356
427
  return _context3.abrupt("return");
357
- case 2:
358
- response = (_currentStep$onPrev = currentStep.onPrev) === null || _currentStep$onPrev === void 0 ? void 0 : _currentStep$onPrev.call(currentStep, currentStep, currentStep, currentStepIndex);
428
+ case 7:
429
+ prevIndex = visibleSteps.findIndex(function (s) {
430
+ return s.name === targetStep.name;
431
+ });
432
+ response = (_fromStep$onPrev = fromStep.onPrev) === null || _fromStep$onPrev === void 0 ? void 0 : _fromStep$onPrev.call(fromStep, fromStep, fromStep, fromIndex);
359
433
  if (!(response !== undefined)) {
360
- _context3.next = 8;
434
+ _context3.next = 14;
361
435
  break;
362
436
  }
363
- _context3.next = 6;
437
+ _context3.next = 12;
364
438
  return (0, _utils.handleNavigation)(response, function () {
365
- return (0, _utils.extendPrevFn)(currentStep, currentStepIndex, visibleSteps, setSteps);
439
+ return (0, _utils.extendPrevFn)(fromStep, fromIndex, visibleSteps, setSteps);
366
440
  });
367
- case 6:
368
- _context3.next = 9;
441
+ case 12:
442
+ _context3.next = 15;
369
443
  break;
370
- case 8:
371
- (0, _utils.extendPrevFn)(currentStep, currentStepIndex, visibleSteps, setSteps);
372
- case 9:
444
+ case 14:
445
+ (0, _utils.extendPrevFn)(fromStep, fromIndex, visibleSteps, setSteps);
446
+ case 15:
447
+ navIndexRef.current = prevIndex;
448
+ setFormReady(false);
449
+ case 17:
373
450
  case "end":
374
451
  return _context3.stop();
375
452
  }
376
453
  }, _callee3);
377
- })), [currentStep, currentStepIndex, visibleSteps]);
454
+ })), [currentStepIndex, visibleSteps]);
378
455
  var registerStep = (0, _react.useCallback)(function (stepData) {
379
456
  setSteps(function (prevSteps) {
380
457
  var existingIndex = prevSteps.findIndex(function (step) {
@@ -435,6 +512,11 @@ var WmWizard = /*#__PURE__*/(0, _react.memo)(function (props) {
435
512
  return;
436
513
  }
437
514
  if ((_targetStep = targetStep) !== null && _targetStep !== void 0 && _targetStep.show) {
515
+ var visIndex = visibleSteps.findIndex(function (s) {
516
+ var _targetStep2;
517
+ return s.name === ((_targetStep2 = targetStep) === null || _targetStep2 === void 0 ? void 0 : _targetStep2.name);
518
+ });
519
+ if (visIndex >= 0) navIndexRef.current = visIndex;
438
520
  onStepHeaderClick({}, targetStep);
439
521
  } else {
440
522
  console.error("The gotoStep function cannot navigate to hidden steps");
@@ -478,6 +560,30 @@ var WmWizard = /*#__PURE__*/(0, _react.memo)(function (props) {
478
560
  }
479
561
  }
480
562
  }, [visibleSteps]);
563
+ var showSignature = steps.map(function (s) {
564
+ var _listener$Widgets, _listener$Widgets2;
565
+ return (listener === null || listener === void 0 || (_listener$Widgets = listener.Widgets) === null || _listener$Widgets === void 0 || (_listener$Widgets = _listener$Widgets[s.name]) === null || _listener$Widgets === void 0 ? void 0 : _listener$Widgets.show) === false || (listener === null || listener === void 0 || (_listener$Widgets2 = listener.Widgets) === null || _listener$Widgets2 === void 0 || (_listener$Widgets2 = _listener$Widgets2[s.name]) === null || _listener$Widgets2 === void 0 ? void 0 : _listener$Widgets2.show) === "false" ? "0" : "1";
566
+ }).join("|");
567
+ (0, _react.useEffect)(function () {
568
+ if (!(listener !== null && listener !== void 0 && listener.Widgets)) return;
569
+ steps.forEach(function (step, index) {
570
+ var _listener$Widgets$ste;
571
+ var widgetShow = (_listener$Widgets$ste = listener.Widgets[step.name]) === null || _listener$Widgets$ste === void 0 ? void 0 : _listener$Widgets$ste.show;
572
+ if ((widgetShow === false || widgetShow === "false") && step.show !== false) {
573
+ updateStep(step.name, {
574
+ show: false,
575
+ enableskip: false
576
+ });
577
+ var prevStep = steps[index - 1];
578
+ if (prevStep && step.active) {
579
+ updateStep(prevStep.name, {
580
+ active: true
581
+ });
582
+ navIndexRef.current = index - 1;
583
+ }
584
+ }
585
+ });
586
+ }, [showSignature]);
481
587
  var updateListener = _react["default"].useCallback(function () {
482
588
  if (listener && typeof listener.onChange === "function") {
483
589
  listener.onChange(name, {
@@ -514,6 +620,7 @@ var WmWizard = /*#__PURE__*/(0, _react.memo)(function (props) {
514
620
  disableDone: function disableDone() {
515
621
  return !enableDone;
516
622
  },
623
+ prev: prev,
517
624
  cancelable: cancelable,
518
625
  nextbtnlabel: nextbtnlabel,
519
626
  previousbtnlabel: previousbtnlabel,
@@ -528,10 +635,12 @@ var WmWizard = /*#__PURE__*/(0, _react.memo)(function (props) {
528
635
  return _gotoStep(step);
529
636
  },
530
637
  isFirstStep: isFirstStep,
531
- isLastStep: isLastStep
638
+ isLastStep: isLastStep,
639
+ currentStepIndex: currentStepIndex,
640
+ currentStep: currentStep
532
641
  });
533
642
  }
534
- }, [_hasNextStep, hasPrevStep, showDoneBtn, enableNext, enablePrev, enableDone, cancelable, currentStep === null || currentStep === void 0 ? void 0 : currentStep.enableskip, nextbtnlabel, previousbtnlabel, donebtnlabel, cancelbtnlabel, actionsalignment, currentStepIndex]);
643
+ }, [_hasNextStep, hasPrevStep, showDoneBtn, enableNext, enablePrev, enableDone, cancelable, currentStep === null || currentStep === void 0 ? void 0 : currentStep.enableskip, nextbtnlabel, previousbtnlabel, donebtnlabel, cancelbtnlabel, actionsalignment, currentStepIndex, isFirstStep, isLastStep]);
535
644
  (0, _react.useEffect)(function () {
536
645
  updateListener();
537
646
  }, [updateListener]);
@@ -640,7 +749,8 @@ var WmWizard = /*#__PURE__*/(0, _react.memo)(function (props) {
640
749
  style: _objectSpread(_objectSpread({}, styles), {}, {
641
750
  width: width,
642
751
  height: height
643
- })
752
+ }),
753
+ name: name
644
754
  }, __jsx(_material.Box, {
645
755
  className: "app-wizard-heading"
646
756
  }, __jsx(_material.Stepper, {
@@ -673,7 +783,9 @@ var WmWizard = /*#__PURE__*/(0, _react.memo)(function (props) {
673
783
  }, __jsx(_material.Typography, {
674
784
  variant: "body2",
675
785
  color: wizardMessage.type === "error" ? "error" : "textSecondary"
676
- }, wizardMessage.caption)), steps.map(function (step, index) {
786
+ }, wizardMessage.caption)), (type === "dynamic" ? steps.filter(function (s) {
787
+ return s.active;
788
+ }) : steps).map(function (step, index) {
677
789
  return __jsx("div", {
678
790
  key: step.name,
679
791
  ref: function ref(el) {
@@ -681,6 +793,15 @@ var WmWizard = /*#__PURE__*/(0, _react.memo)(function (props) {
681
793
  var formElement = el.querySelector("form");
682
794
  if (formElement) {
683
795
  formRefs.current[step.name] = formElement;
796
+ if (formElement.classList.contains("app-form")) {
797
+ setFormReady(true);
798
+ }
799
+ }
800
+ if (step.haveForm === undefined) {
801
+ var hasFormNow = !!formElement;
802
+ updateStep(step.name, {
803
+ haveForm: hasFormNow
804
+ });
684
805
  }
685
806
  }
686
807
  },
@@ -705,6 +826,15 @@ var WmWizard = /*#__PURE__*/(0, _react.memo)(function (props) {
705
826
  key: ((_step$props = step.props) === null || _step$props === void 0 ? void 0 : _step$props.name) || index
706
827
  });
707
828
  })));
829
+ }, function (prev, next) {
830
+ var keys = ["render", "dataset", "className", "styles", "width", "height", "type", "stepstyle", "orientation", "alternativeLabel", "nonLinear", "defaultstep", "defaultstepindex", "message", "cancelable", "enablenext", "nextbtnlabel", "previousbtnlabel", "donebtnlabel", "cancelbtnlabel", "children"];
831
+ return keys.every(function (key) {
832
+ // Never deep-compare children; treat as referential
833
+ if (key === "children") {
834
+ return prev[key] === next[key];
835
+ }
836
+ return (0, _isEqual["default"])(prev[key], next[key]);
837
+ });
708
838
  });
709
839
  WmWizard.displayName = "WmWizard";
710
840
  var _default = exports["default"] = (0, _withBaseWrapper.withBaseWrapper)(WmWizard);
@@ -36,7 +36,7 @@ var getPrevValidStep = exports.getPrevValidStep = function getPrevValidStep(from
36
36
  var getStepByName = exports.getStepByName = function getStepByName(stepName, steps) {
37
37
  return steps.find(function (step) {
38
38
  return step.name === stepName;
39
- }) || null;
39
+ }) || steps[0];
40
40
  };
41
41
  var getStepByIndex = exports.getStepByIndex = function getStepByIndex(index, visibleSteps) {
42
42
  return visibleSteps[index] || null;
@@ -1,22 +1,27 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports["default"] = void 0;
8
- var _react = _interopRequireDefault(require("react"));
9
+ var _react = _interopRequireWildcard(require("react"));
9
10
  var _material = require("@mui/material");
10
11
  var _clsx = _interopRequireDefault(require("clsx"));
12
+ var _withBaseWrapper = require("@wavemaker/react-runtime/higherOrder/withBaseWrapper");
13
+ 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); }
11
14
  var __jsx = _react["default"].createElement;
12
15
  var ACTIONS_CLASS = "app-wizard-actions panel-footer";
13
- var WmWizardAction = function WmWizardAction(_ref) {
16
+ var WmWizardAction = /*#__PURE__*/(0, _react.memo)(function (_ref) {
14
17
  var children = _ref.children,
15
18
  _ref$actionsalignment = _ref.actionsalignment,
16
19
  actionsalignment = _ref$actionsalignment === void 0 ? "right" : _ref$actionsalignment;
17
20
  return __jsx(_material.Box, {
18
21
  className: (0, _clsx["default"])(ACTIONS_CLASS, actionsalignment)
19
22
  }, children);
20
- };
23
+ }, function (prev, next) {
24
+ return prev.actionsalignment === next.actionsalignment && prev.children === next.children && prev.listener === next.listener;
25
+ });
21
26
  WmWizardAction.displayName = "WmWizardAction";
22
- var _default = exports["default"] = WmWizardAction;
27
+ var _default = exports["default"] = (0, _withBaseWrapper.withBaseWrapper)(WmWizardAction);
@@ -1,11 +1,17 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
6
8
  exports["default"] = void 0;
7
- var _react = require("react");
9
+ var _react = _interopRequireWildcard(require("react"));
8
10
  var _WizardContext = require("../WizardContext");
11
+ var _withBaseWrapper = require("@wavemaker/react-runtime/higherOrder/withBaseWrapper");
12
+ var _isEqual = _interopRequireDefault(require("lodash-es/isEqual"));
13
+ 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); }
14
+ var __jsx = _react["default"].createElement;
9
15
  var WmWizardstep = /*#__PURE__*/(0, _react.memo)(function (props) {
10
16
  var name = props.name,
11
17
  _props$title = props.title,
@@ -81,14 +87,21 @@ var WmWizardstep = /*#__PURE__*/(0, _react.memo)(function (props) {
81
87
  if (isRegistered && name) {
82
88
  context.updateStep(name, {
83
89
  content: content || children,
84
- onLoad: onLoad,
85
- onNext: onNext,
86
- onPrev: onPrev,
87
- onSkip: onSkip
90
+ enableNext: !disablenext,
91
+ enablePrev: !disableprevious,
92
+ enableDone: !disabledone,
93
+ title: title,
94
+ enableskip: enableskip,
95
+ show: show
88
96
  });
89
97
  }
90
- }, [context, name, content, children, onLoad, onNext, onPrev, onSkip, isRegistered]);
91
- return null;
98
+ }, [name, title, enableskip, show, disablenext, disableprevious, disabledone, content]);
99
+ return __jsx(_react["default"].Fragment, null);
100
+ }, function (prev, next) {
101
+ var keys = ["name", "title", "subtitle", "iconclass", "doneiconclass", "show", "enableskip", "disablenext", "disableprevious", "disabledone", "content", "dynamicStepIndex", "isdynamic", "haveForm", "onLoad", "onNext", "onPrev", "onSkip", "render"];
102
+ return keys.every(function (key) {
103
+ return (0, _isEqual["default"])(prev[key], next[key]);
104
+ });
92
105
  });
93
106
  WmWizardstep.displayName = "WmWizardstep";
94
- var _default = exports["default"] = WmWizardstep;
107
+ var _default = exports["default"] = (0, _withBaseWrapper.withBaseWrapper)(WmWizardstep);