@wavemaker/react-runtime 11.14.3-rc.6401 → 11.15.0-2.247

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 (245) hide show
  1. package/actions/base-action.js +5 -7
  2. package/actions/login-action.js +7 -8
  3. package/actions/logout-action.js +5 -7
  4. package/actions/navigation-action.js +73 -18
  5. package/actions/notification-action.js +22 -8
  6. package/actions/timer-action.js +13 -15
  7. package/actions/toast.js +4 -2
  8. package/actions/toast.service.js +1 -2
  9. package/components/advanced/carousel/index.js +1 -1
  10. package/components/advanced/carousel/template.js +1 -1
  11. package/components/basic/anchor/index.js +31 -11
  12. package/components/basic/html/index.js +115 -24
  13. package/components/basic/icon/index.js +2 -1
  14. package/components/basic/iframe/index.js +2 -1
  15. package/components/basic/label/index.js +12 -9
  16. package/components/basic/message/index.js +12 -3
  17. package/components/basic/picture/index.js +11 -4
  18. package/components/basic/progress-bar/index.js +4 -1
  19. package/components/basic/progress-circle/index.js +34 -28
  20. package/components/basic/progress-circle/props.js +10 -2
  21. package/components/basic/richtexteditor/index.js +95 -94
  22. package/components/basic/search/index.js +401 -156
  23. package/components/basic/search/providers.js +126 -61
  24. package/components/basic/spinner/index.js +2 -1
  25. package/components/basic/tree/index.js +34 -34
  26. package/components/basic/tree/utils.js +10 -4
  27. package/components/chart/components/barColumnChart/index.js +36 -33
  28. package/components/chart/components/bubbleChart/index.js +35 -25
  29. package/components/chart/components/chartLegend/utils.js +2 -1
  30. package/components/chart/components/cumulativeLineChart/index.js +30 -26
  31. package/components/chart/components/lineAreaChart/index.js +50 -32
  32. package/components/chart/components/pieDonutChart/index.js +13 -4
  33. package/components/chart/hooks/useXAxisConfig.js +15 -8
  34. package/components/chart/index.js +223 -53
  35. package/components/chart/utils.js +12 -1
  36. package/components/constants.js +5 -2
  37. package/components/container/accordion/accordion-pane/index.js +17 -12
  38. package/components/container/accordion/index.js +9 -4
  39. package/components/container/alignment-utils.js +56 -1
  40. package/components/container/index.js +49 -20
  41. package/components/container/panel/components/panel-header/index.js +3 -4
  42. package/components/container/panel/index.js +15 -10
  43. package/components/container/repeat-template/index.js +33 -0
  44. package/components/container/tabs/index.js +83 -14
  45. package/components/container/tabs/tab-pane/index.js +33 -10
  46. package/components/container/tabs/utils.js +51 -0
  47. package/components/container/wizard/components/StepComponents.js +2 -1
  48. package/components/container/wizard/components/WizardStep.js +2 -1
  49. package/components/container/wizard/index.js +64 -35
  50. package/components/container/wizard/utils.js +46 -1
  51. package/components/container/wizard/wizard-step/index.js +11 -1
  52. package/components/data/card/card-content/index.js +1 -1
  53. package/components/data/form/base-form/index.js +985 -183
  54. package/components/data/form/base-form/props.js +3 -1
  55. package/components/data/form/base-form/utils.js +159 -1
  56. package/components/data/form/dynamic-fields/constant.js +53 -0
  57. package/components/data/form/dynamic-fields/index.js +10 -45
  58. package/components/data/form/dynamic-fields/utils.js +37 -2
  59. package/components/data/form/form-action/index.js +5 -4
  60. package/components/data/form/form-context.js +5 -1
  61. package/components/data/form/form-controller/utils.js +84 -0
  62. package/components/data/form/form-controller/validation-contrustor.js +402 -189
  63. package/components/data/form/form-controller/withFormController.js +191 -52
  64. package/components/data/form/form-field/base-field.js +67 -45
  65. package/components/data/form/form-field/index.js +28 -5
  66. package/components/data/form/form-header/index.js +3 -4
  67. package/components/data/form/index.js +20 -1
  68. package/components/data/list/components/ListDND.js +2 -1
  69. package/components/data/list/components/ListItem.js +6 -2
  70. package/components/data/list/components/ListItemWithTemplate.js +46 -2
  71. package/components/data/list/components/ListItems.js +17 -26
  72. package/components/data/list/components/ListPagination.js +3 -3
  73. package/components/data/list/components/StandardListItems.js +3 -4
  74. package/components/data/list/hooks/useListEffects.js +55 -14
  75. package/components/data/list/hooks/useListEventHandlers.js +3 -1
  76. package/components/data/list/hooks/useListState.js +3 -1
  77. package/components/data/list/hooks/usePaginatedGroupedData.js +18 -5
  78. package/components/data/list/index.js +74 -55
  79. package/components/data/list/utils/list-helpers.js +73 -35
  80. package/components/data/list/utils/list-widget-methods.js +138 -95
  81. package/components/data/live-filter/index.js +26 -15
  82. package/components/data/live-form/index.js +51 -18
  83. package/components/data/live-form/props.js +1 -1
  84. package/components/data/pagination/components/BasicPagination.js +71 -16
  85. package/components/data/pagination/components/PageSizeSelector.js +8 -3
  86. package/components/data/pagination/components/TotalRecords.js +1 -5
  87. package/components/data/pagination/hooks/usePagination.js +349 -66
  88. package/components/data/pagination/index.js +137 -19
  89. package/components/data/table/components/AddNewRow.js +5 -1
  90. package/components/data/table/components/EditableCell.js +2 -2
  91. package/components/data/table/components/RowCells.js +64 -0
  92. package/components/data/table/components/RowExpansionButton.js +2 -2
  93. package/components/data/table/components/SummaryCell.js +111 -0
  94. package/components/data/table/components/SummaryRow.js +54 -0
  95. package/components/data/table/components/SummaryRowFooter.js +46 -0
  96. package/components/data/table/components/TableBody.js +61 -59
  97. package/components/data/table/components/TableDataRow.js +109 -0
  98. package/components/data/table/components/TableFilters.js +225 -121
  99. package/components/data/table/components/TableHeader.js +291 -23
  100. package/components/data/table/components/TablePanelHeading.js +139 -8
  101. package/components/data/table/components/index.js +22 -1
  102. package/components/data/table/hooks/use-edited-rows.js +141 -0
  103. package/components/data/table/hooks/useCellState.js +5 -12
  104. package/components/data/table/hooks/useFormWidget.js +58 -52
  105. package/components/data/table/hooks/usePaginationState.js +45 -24
  106. package/components/data/table/hooks/usePanelStructure.js +4 -4
  107. package/components/data/table/hooks/useRowHandlers.js +39 -5
  108. package/components/data/table/hooks/useRowSelection.js +244 -50
  109. package/components/data/table/hooks/useServerSideSorting.js +81 -37
  110. package/components/data/table/hooks/useTableColumns.js +211 -118
  111. package/components/data/table/hooks/useTableData.js +54 -9
  112. package/components/data/table/hooks/useTableEdit.js +272 -97
  113. package/components/data/table/hooks/useTableEffects.js +31 -13
  114. package/components/data/table/hooks/useTableFilter.js +1 -1
  115. package/components/data/table/hooks/useTableInitialization.js +23 -22
  116. package/components/data/table/hooks/useTableState.js +11 -5
  117. package/components/data/table/hooks/useTableStateManager.js +140 -65
  118. package/components/data/table/index.js +637 -274
  119. package/components/data/table/live-table/index.js +54 -22
  120. package/components/data/table/table-action/index.js +1 -1
  121. package/components/data/table/table-group/index.js +26 -0
  122. package/components/data/table/table-row-action/index.js +32 -18
  123. package/components/data/table/utils/buildSelectionColumns.js +12 -21
  124. package/components/data/table/utils/columnBuilder.js +29 -14
  125. package/components/data/table/utils/columnProxy.js +68 -1
  126. package/components/data/table/utils/constants.js +6 -2
  127. package/components/data/table/utils/crud-handlers.js +68 -63
  128. package/components/data/table/utils/groupHeaderUtils.js +102 -0
  129. package/components/data/table/utils/index.js +210 -21
  130. package/components/data/table/utils/renderDisplayCell.js +6 -6
  131. package/components/data/table/utils/selectionUtils.js +25 -26
  132. package/components/data/table/utils/validation.js +1 -0
  133. package/components/data/utils/filter-field-util.js +3 -3
  134. package/components/dialogs/alert-dialog/index.js +1 -1
  135. package/components/dialogs/confirm-dialog/index.js +1 -1
  136. package/components/dialogs/dialog/index.js +4 -1
  137. package/components/dialogs/dialog-content/index.js +3 -1
  138. package/components/dialogs/dialog-header/index.js +2 -2
  139. package/components/dialogs/iframe-dialog/index.js +11 -5
  140. package/components/dialogs/index.js +1 -1
  141. package/components/dialogs/login-dialog/index.js +1 -1
  142. package/components/dialogs/page-dialog/index.js +1 -1
  143. package/components/form/button/index.js +33 -7
  144. package/components/input/calendar/index.js +18 -6
  145. package/components/input/chips/index.js +99 -28
  146. package/components/input/chips/utils.js +34 -4
  147. package/components/input/color-picker/index.js +74 -25
  148. package/components/input/composite/index.js +3 -3
  149. package/components/input/currency/index.js +35 -49
  150. package/components/input/default/checkbox/index.js +23 -28
  151. package/components/input/default/checkboxset/index.js +38 -18
  152. package/components/input/default/checkboxset/utils.js +30 -0
  153. package/components/input/default/radioset/index.js +36 -39
  154. package/components/input/default/switch/index.js +30 -13
  155. package/components/input/epoch/date/index.js +130 -69
  156. package/components/input/epoch/date/utils.js +94 -1
  157. package/components/input/epoch/datetime/index.js +72 -22
  158. package/components/input/epoch/datetime/utils.js +49 -10
  159. package/components/input/epoch/time/index.js +68 -19
  160. package/components/input/epoch/time/utils.js +62 -14
  161. package/components/input/fileupload/Utils.js +12 -7
  162. package/components/input/fileupload/components/MultiUpload.js +2 -6
  163. package/components/input/fileupload/components/SingleUpload.js +3 -7
  164. package/components/input/fileupload/index.js +6 -10
  165. package/components/input/fileupload/useFileUpload.js +16 -5
  166. package/components/input/number/index.js +158 -43
  167. package/components/input/rating/index.js +90 -7
  168. package/components/input/select/index.js +209 -72
  169. package/components/input/slider/index.js +84 -26
  170. package/components/input/text/index.js +38 -18
  171. package/components/input/text/util.js +283 -130
  172. package/components/input/textarea/index.js +13 -10
  173. package/components/input/upload/index.js +124 -0
  174. package/components/input/upload/props.js +5 -0
  175. package/components/input/util/index.js +11 -0
  176. package/components/navbar/index.js +51 -3
  177. package/components/navbar/nav/index.js +46 -16
  178. package/components/navbar/nav-item/index.js +11 -5
  179. package/components/navigation/menu/components/ListItems.js +3 -0
  180. package/components/navigation/menu/constants.js +2 -1
  181. package/components/navigation/menu/hooks/useHoverState.hook.js +48 -0
  182. package/components/navigation/menu/hooks/useKeyboardMovements.hook.js +37 -0
  183. package/components/navigation/menu/hooks/useTransformedDataset.hook.js +15 -0
  184. package/components/navigation/menu/index.js +326 -188
  185. package/components/navigation/menu/utils/action-task.js +14 -0
  186. package/components/navigation/menu/utils/role-filter.js +76 -0
  187. package/components/navigation/popover/index.js +105 -32
  188. package/components/page/partial-container/index.js +34 -5
  189. package/components/prefab/index.js +2 -4
  190. package/context/PrefabContext.js +10 -6
  191. package/context/WidgetProvider.js +30 -31
  192. package/core/app.service.js +1 -1
  193. package/core/constants/events.js +57 -1
  194. package/core/dialog.service.js +1 -2
  195. package/core/event-notifier.js +1 -2
  196. package/core/formatter/array-formatters.js +33 -0
  197. package/core/formatter/date-formatters.js +2 -4
  198. package/core/formatter/index.js +2 -1
  199. package/core/formatter/number-formatters.js +5 -10
  200. package/core/formatter/security-formatters.js +2 -4
  201. package/core/formatter/string-formatters.js +3 -6
  202. package/core/proxy-service.js +85 -13
  203. package/core/script-registry.js +108 -48
  204. package/core/util/common.js +4 -4
  205. package/core/util/compare.js +30 -0
  206. package/core/util/dom.js +8 -8
  207. package/core/util/index.js +16 -6
  208. package/core/util/safe-is-equal.js +156 -0
  209. package/core/util/security.js +1 -2
  210. package/core/util/utils.js +16 -7
  211. package/higherOrder/BaseApp.js +108 -65
  212. package/higherOrder/BaseDateTime.js +31 -13
  213. package/higherOrder/BasePage.js +268 -144
  214. package/higherOrder/BasePartial.js +1 -1
  215. package/higherOrder/BasePrefab.js +33 -15
  216. package/higherOrder/DataNav.js +99 -16
  217. package/higherOrder/helper.js +41 -3
  218. package/higherOrder/withBaseWrapper.js +41 -28
  219. package/hooks/useAuth.js +11 -5
  220. package/hooks/useHttp.js +280 -94
  221. package/mui-config/theme-provider.js +1 -1
  222. package/mui-config/theme.js +1 -1
  223. package/package-lock.json +423 -331
  224. package/package.json +8 -8
  225. package/store/bindActions/i18nActions.js +18 -0
  226. package/store/index.js +3 -1
  227. package/store/slices/appConfigSlice.js +2 -2
  228. package/store/slices/authSlice.js +31 -28
  229. package/store/slices/i18nSlice.js +2 -2
  230. package/store/slices/navigationSlice.js +35 -0
  231. package/store/viewport.service.js +255 -0
  232. package/utils/attr.js +35 -0
  233. package/utils/dataset-util.js +1 -2
  234. package/utils/form-state.util.js +43 -12
  235. package/utils/form-utils.js +47 -2
  236. package/utils/format-util.js +28 -13
  237. package/utils/page-params-util.js +33 -1
  238. package/utils/state-persistance.js +72 -13
  239. package/utils/transformedDataset-utils.js +35 -24
  240. package/variables/base-variable.js +12 -14
  241. package/variables/crud-variable.js +225 -0
  242. package/variables/live-variable.js +56 -20
  243. package/variables/metadata.service.js +123 -0
  244. package/variables/model-variable.js +21 -15
  245. package/variables/service-variable.js +88 -83
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports["default"] = void 0;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
11
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
12
  var _react = _interopRequireWildcard(require("react"));
@@ -16,37 +17,13 @@ var _utils = require("./utils");
16
17
  var _DatePickerPopover = _interopRequireDefault(require("./components/DatePickerPopover"));
17
18
  var _store = require("@wavemaker/react-runtime/store");
18
19
  var _withFormController = _interopRequireDefault(require("@wavemaker/react-runtime/components/data/form/form-controller/withFormController"));
19
- var _excluded = ["name", "hint", "shortcutkey", "datavalue", "width", "arialabel", "invokeOnChange", "handleKeyDown", "getDateObj", "updatePrevDatavalue", "updateBoundVariable", "onChange", "onClick", "onFocus", "onBlur", "onMouseEnter", "onMouseLeave", "onBeforeload", "placeholder", "tabindex", "datepattern", "outputformat", "required", "excludedays", "excludedates", "showweeks", "showbuttonbar", "autofocus", "readonly", "disabled", "showdropdownon", "adaptiveposition", "selectfromothermonth", "todaybutton", "clearbutton", "todaybuttonlabel", "clearbuttonlabel", "showcustompicker", "showdateformatasplaceholder", "viewmode", "dataentrymode", "listener", "className", "styles"];
20
+ var _excluded = ["name", "hint", "shortcutkey", "datavalue", "width", "arialabel", "invokeOnChange", "handleKeyDown", "getDateObj", "updatePrevDatavalue", "updateBoundVariable", "onChange", "onClick", "onFocus", "onBlur", "onMouseEnter", "onMouseLeave", "onBeforeload", "placeholder", "tabindex", "datepattern", "outputformat", "required", "excludedays", "excludedates", "showweeks", "showbuttonbar", "autofocus", "readonly", "disabled", "showdropdownon", "adaptiveposition", "selectfromothermonth", "todaybutton", "clearbutton", "todaybuttonlabel", "clearbuttonlabel", "showcustompicker", "showdateformatasplaceholder", "viewmode", "dataentrymode", "listener", "className", "styles", "validators", "validationmessage"];
20
21
  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); }
21
22
  var __jsx = _react["default"].createElement;
22
23
  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; }
23
24
  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; }
24
25
  // Types
25
26
 
26
- // Custom Hooks
27
- var useDateValidation = function useDateValidation(excludedDays, excludedDates, mindate, maxdate, getDateObj) {
28
- return (0, _react.useCallback)(function (date) {
29
- if (!(date !== null && date !== void 0 && date.isValid())) return true;
30
-
31
- // Check excluded days
32
- if (excludedDays.includes(date.day())) return true;
33
-
34
- // Check excluded dates
35
- var dateFormatted = date.format("YYYY-MM-DD");
36
- var isExcluded = excludedDates.some(function (excludedDate) {
37
- return excludedDate && (0, _momentTimezone["default"])(excludedDate).format("YYYY-MM-DD") === dateFormatted;
38
- });
39
- if (isExcluded) return true;
40
-
41
- // Check date range
42
- var minDateObj = mindate ? (0, _momentTimezone["default"])(getDateObj === null || getDateObj === void 0 ? void 0 : getDateObj(mindate)) : null;
43
- var maxDateObj = maxdate ? (0, _momentTimezone["default"])(getDateObj === null || getDateObj === void 0 ? void 0 : getDateObj(maxdate)) : null;
44
- if (minDateObj !== null && minDateObj !== void 0 && minDateObj.isValid() && date.isBefore(minDateObj, "day")) return true;
45
- if (maxDateObj !== null && maxDateObj !== void 0 && maxDateObj.isValid() && date.isAfter(maxDateObj, "day")) return true;
46
- return false;
47
- }, [excludedDays, excludedDates, mindate, maxdate, getDateObj]);
48
- };
49
-
50
27
  // Main Component
51
28
  var WmDate = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
52
29
  // Merge props with defaults
@@ -74,10 +51,7 @@ var WmDate = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
74
51
  placeholder = _props$placeholder === void 0 ? "Select Date" : _props$placeholder,
75
52
  _props$tabindex = _props.tabindex,
76
53
  tabindex = _props$tabindex === void 0 ? 0 : _props$tabindex,
77
- _props$datepattern = _props.datepattern,
78
- datepattern = _props$datepattern === void 0 ? (0, _store.useAppSelector)(function (state) {
79
- return state.i18n.dateFormat || "MMM d, y";
80
- }) : _props$datepattern,
54
+ datepatternProp = _props.datepattern,
81
55
  _props$outputformat = _props.outputformat,
82
56
  outputformat = _props$outputformat === void 0 ? "yyyy-MM-dd" : _props$outputformat,
83
57
  _props$required = _props.required,
@@ -121,7 +95,16 @@ var WmDate = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
121
95
  listener = _props.listener,
122
96
  className = _props.className,
123
97
  styles = _props.styles,
98
+ _props$validators = _props.validators,
99
+ validators = _props$validators === void 0 ? [] : _props$validators,
100
+ validationmessage = _props.validationmessage,
124
101
  restProps = (0, _objectWithoutProperties2["default"])(_props, _excluded);
102
+ var defaultDateFormat = (0, _store.useAppSelector)(function (state) {
103
+ return state.i18n.dateFormat;
104
+ }) || "MMM d, y";
105
+ var datepattern = (0, _react.useMemo)(function () {
106
+ return datepatternProp !== null && datepatternProp !== void 0 ? datepatternProp : defaultDateFormat;
107
+ }, [datepatternProp, defaultDateFormat]);
125
108
  var currentLocale = (0, _store.useAppSelector)(function (state) {
126
109
  return state.i18n.selectedLocale;
127
110
  });
@@ -141,15 +124,21 @@ var WmDate = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
141
124
  var _useState5 = (0, _react.useState)(false),
142
125
  dateNotInRange = _useState5[0],
143
126
  setDateNotInRange = _useState5[1];
144
- var _useState6 = (0, _react.useState)(viewmode),
145
- calendarViewMode = _useState6[0],
146
- setCalendarViewMode = _useState6[1];
147
- var _useState7 = (0, _react.useState)((0, _momentTimezone["default"])()),
148
- calendarDate = _useState7[0],
149
- setCalendarDate = _useState7[1];
150
- var _useState8 = (0, _react.useState)(null),
151
- selectedDate = _useState8[0],
152
- setSelectedDate = _useState8[1];
127
+ var _useState6 = (0, _react.useState)(""),
128
+ validationFailureMessage = _useState6[0],
129
+ setValidationFailureMessage = _useState6[1];
130
+ var _useState7 = (0, _react.useState)(viewmode),
131
+ calendarViewMode = _useState7[0],
132
+ setCalendarViewMode = _useState7[1];
133
+ var _useState8 = (0, _react.useState)((0, _momentTimezone["default"])()),
134
+ calendarDate = _useState8[0],
135
+ setCalendarDate = _useState8[1];
136
+ var _useState9 = (0, _react.useState)(null),
137
+ selectedDate = _useState9[0],
138
+ setSelectedDate = _useState9[1];
139
+ var _useState0 = (0, _react.useState)(false),
140
+ isCurrentDate = _useState0[0],
141
+ setIsCurrentDate = _useState0[1];
153
142
 
154
143
  // Refs
155
144
  var datepickerRef = (0, _react.useRef)(null);
@@ -164,9 +153,36 @@ var WmDate = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
164
153
  return (0, _utils.parseExcludedDates)(excludedates, getDateObj);
165
154
  }, [excludedates, getDateObj]);
166
155
  var dateValue = (0, _react.useMemo)(function () {
156
+ if (datavalue === "CURRENT_DATE") {
157
+ setIsCurrentDate(true);
158
+ }
167
159
  return getDateObj(datavalue);
168
160
  }, [datavalue, getDateObj]);
169
- var isDateDisabled = useDateValidation(excludedDaysToDisable, excludedDatesToDisable, restProps.mindate, restProps.maxdate, getDateObj);
161
+
162
+ // Parse min/max dates
163
+ var minDateObj = (0, _react.useMemo)(function () {
164
+ return restProps.mindate ? getDateObj(restProps.mindate) : null;
165
+ }, [restProps.mindate, getDateObj]);
166
+ var maxDateObj = (0, _react.useMemo)(function () {
167
+ return restProps.maxdate ? getDateObj(restProps.maxdate) : null;
168
+ }, [restProps.maxdate, getDateObj]);
169
+
170
+ // Unified validation function - handles both validation messages and UI disabling
171
+ var validateDateWithProps = (0, _react.useCallback)(function (date) {
172
+ if (!date) return true;
173
+ var validation = (0, _utils.validateDate)(date, minDateObj, maxDateObj, excludedDaysToDisable, excludedDatesToDisable, validators, validationmessage);
174
+ setDateNotInRange(validation.isOutOfRange);
175
+ setValidationFailureMessage(validation.validationMessage || "");
176
+ setInvalidDateTimeFormat(false);
177
+ return validation.isValid;
178
+ }, [minDateObj, maxDateObj, excludedDaysToDisable, excludedDatesToDisable, validators, validationmessage]);
179
+
180
+ // Function for calendar UI - returns boolean for disabling dates
181
+ var isDateDisabled = (0, _react.useCallback)(function (date) {
182
+ if (!(date !== null && date !== void 0 && date.isValid())) return false;
183
+ var validation = (0, _utils.validateDate)(date, minDateObj, maxDateObj, excludedDaysToDisable, excludedDatesToDisable, validators, validationmessage);
184
+ return validation.isDisabled || false;
185
+ }, [minDateObj, maxDateObj, excludedDaysToDisable, excludedDatesToDisable, validators, validationmessage]);
170
186
  var isNavigationDisabled = (0, _react.useMemo)(function () {
171
187
  if (!restProps.mindate || !restProps.maxdate) return false;
172
188
  var minMoment = (0, _momentTimezone["default"])(getDateObj(restProps.mindate));
@@ -193,6 +209,7 @@ var WmDate = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
193
209
 
194
210
  // Effects
195
211
  (0, _react.useEffect)(function () {
212
+ if (invalidDateTimeFormat) return;
196
213
  var displayValue = getDisplayValue();
197
214
  setInputValue(displayValue);
198
215
  if (dateValue) {
@@ -200,17 +217,27 @@ var WmDate = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
200
217
  setSelectedDate(momentDateValue);
201
218
  setCalendarDate(momentDateValue);
202
219
  if (listener !== null && listener !== void 0 && listener.onChange) {
203
- listener.onChange(name, _objectSpread(_objectSpread({}, props), {}, {
220
+ listener.onChange(name || props.fieldName, {
204
221
  displayValue: displayValue,
205
222
  datavalue: (0, _utils.formatDate)(momentDateValue.toDate(), outputformat),
206
223
  timestamp: (0, _utils.formatDate)(momentDateValue.toDate(), "timestamp")
207
- }));
224
+ });
225
+ }
226
+ } else if (props.maxdate) {
227
+ var maxDate = (0, _momentTimezone["default"])(props.maxdate);
228
+
229
+ // Get the current date
230
+ var currentDate = (0, _momentTimezone["default"])();
231
+ // If maxDate is valid and less than current date, set to maxDate
232
+ if (maxDate.isValid() && maxDate.isBefore(currentDate)) {
233
+ setSelectedDate(maxDate);
234
+ setCalendarDate(maxDate);
208
235
  }
209
236
  } else {
210
237
  setSelectedDate(null);
211
238
  setCalendarDate((0, _momentTimezone["default"])());
212
239
  }
213
- }, [dateValue, getDisplayValue, datavalue]);
240
+ }, [dateValue, getDisplayValue, datavalue, props.maxdate]);
214
241
  (0, _react.useEffect)(function () {
215
242
  if (autofocus && inputRef.current) {
216
243
  var timer = setTimeout(function () {
@@ -228,7 +255,7 @@ var WmDate = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
228
255
 
229
256
  // Update input value when locale changes
230
257
  (0, _react.useEffect)(function () {
231
- if (dateValue) {
258
+ if (dateValue && !invalidDateTimeFormat) {
232
259
  var newDisplayValue = getDisplayValue();
233
260
  setInputValue(newDisplayValue);
234
261
 
@@ -237,7 +264,7 @@ var WmDate = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
237
264
  listener.Widgets[name].displayValue = newDisplayValue;
238
265
  }
239
266
  }
240
- }, [currentLocale, getDisplayValue, dateValue, name, listener]);
267
+ }, [currentLocale, getDisplayValue, dateValue, name, invalidDateTimeFormat]);
241
268
 
242
269
  // Call onBeforeload callback on component mount
243
270
  (0, _react.useEffect)(function () {
@@ -248,7 +275,7 @@ var WmDate = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
248
275
  onBeforeload(syntheticEvent, (_props$listener2 = props.listener) === null || _props$listener2 === void 0 || (_props$listener2 = _props$listener2.Widgets) === null || _props$listener2 === void 0 ? void 0 : _props$listener2[name]);
249
276
  onBeforeloadExecutedRef.current = true;
250
277
  }
251
- }, [onBeforeload, name, props.listener]);
278
+ }, [onBeforeload, name]);
252
279
 
253
280
  // Event Handlers
254
281
  var handleOpen = (0, _react.useCallback)(function (event) {
@@ -262,7 +289,8 @@ var WmDate = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
262
289
  }
263
290
  setCalendarViewMode(viewmode === "month" ? "month" : viewmode);
264
291
  }, [disabled, readonly, selectedDate, dateValue, viewmode]);
265
- var clearDateValue = function clearDateValue(invokeOnChange, updatePrevDatavalue, updateBoundVariable, setInputValue, setSelectedDate, setInvalidDateTimeFormat, setDateNotInRange) {
292
+ var clearDateValue = (0, _react.useCallback)(function (invokeOnChange, updatePrevDatavalue, updateBoundVariable, setInputValue, setSelectedDate, setInvalidDateTimeFormat, setDateNotInRange) {
293
+ var oldValue = inputValue;
266
294
  invokeOnChange === null || invokeOnChange === void 0 || invokeOnChange("");
267
295
  updatePrevDatavalue === null || updatePrevDatavalue === void 0 || updatePrevDatavalue("");
268
296
  updateBoundVariable === null || updateBoundVariable === void 0 || updateBoundVariable("");
@@ -270,11 +298,26 @@ var WmDate = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
270
298
  setSelectedDate === null || setSelectedDate === void 0 || setSelectedDate(null);
271
299
  setInvalidDateTimeFormat === null || setInvalidDateTimeFormat === void 0 || setInvalidDateTimeFormat(false);
272
300
  setDateNotInRange === null || setDateNotInRange === void 0 || setDateNotInRange(false);
273
- };
301
+ setValidationFailureMessage === null || setValidationFailureMessage === void 0 || setValidationFailureMessage("");
302
+ if (listener !== null && listener !== void 0 && listener.onChange) {
303
+ listener.onChange(props.fieldName || name, _objectSpread(_objectSpread({}, props), {}, {
304
+ datavalue: "",
305
+ timestamp: null
306
+ }));
307
+ }
308
+ if (onChange && name && listener !== null && listener !== void 0 && listener.Widgets[name]) {
309
+ onChange({}, listener === null || listener === void 0 ? void 0 : listener.Widgets[name], "", oldValue);
310
+ }
311
+ }, [name, onChange, props, inputValue]);
274
312
  var handleDateSelection = function handleDateSelection(date) {
275
313
  var shouldClose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
314
+ var dateObj = date.toDate();
315
+ if (!validateDateWithProps(dateObj)) {
316
+ return;
317
+ }
276
318
  setDateNotInRange(false);
277
319
  setInvalidDateTimeFormat(false);
320
+ setValidationFailureMessage("");
278
321
  setSelectedDate(date.clone());
279
322
  updateDateValue(date);
280
323
  setCalendarDate(date);
@@ -286,8 +329,10 @@ var WmDate = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
286
329
  var isRequired = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
287
330
  if (errorType === "dateNotInRange") {
288
331
  setDateNotInRange(true);
332
+ setValidationFailureMessage(validationmessage || "Date not in range");
289
333
  } else if (errorType === "invalidFormat" && isRequired) {
290
334
  setInvalidDateTimeFormat(true);
335
+ setValidationFailureMessage(validationmessage || "Invalid date format");
291
336
  }
292
337
  };
293
338
  var handleClose = (0, _react.useCallback)(function () {
@@ -312,7 +357,7 @@ var WmDate = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
312
357
  listener.Widgets[name].displayValue = displayValue;
313
358
  }
314
359
  if (listener !== null && listener !== void 0 && listener.onChange) {
315
- listener.onChange(name, _objectSpread(_objectSpread({}, props), {}, {
360
+ listener.onChange(props.fieldName || name, _objectSpread(_objectSpread({}, props), {}, {
316
361
  datavalue: outputValue,
317
362
  timestamp: (0, _utils.formatDate)(date.toDate(), "timestamp")
318
363
  }));
@@ -325,12 +370,14 @@ var WmDate = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
325
370
  if (!(date !== null && date !== void 0 && date.isValid())) return;
326
371
  setCalendarDate(date);
327
372
  var isMonthOrYearView = viewmode === "month" || viewmode === "year";
328
- if (!isMonthOrYearView && isDateDisabled(date)) {
329
- handleValidationError("dateNotInRange");
330
- return;
373
+ if (!isMonthOrYearView) {
374
+ var dateObj = date.toDate();
375
+ if (!validateDateWithProps(dateObj)) {
376
+ return;
377
+ }
331
378
  }
332
379
  handleDateSelection(date, true);
333
- }, [viewmode, isDateDisabled, handleDateSelection]);
380
+ }, [viewmode, validateDateWithProps, handleDateSelection]);
334
381
  var handleMonthChange = (0, _react.useCallback)(function (value) {
335
382
  if (!(value !== null && value !== void 0 && value.isValid())) return;
336
383
  if (viewmode === "month") {
@@ -366,14 +413,21 @@ var WmDate = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
366
413
  var parsedDate = datepattern === "timestamp" ? (0, _momentTimezone["default"])(parseInt(value, 10)) : (0, _momentTimezone["default"])(value, (0, _utils.convertToMomentFormat)(datepattern), true);
367
414
  if (!parsedDate.isValid()) {
368
415
  handleValidationError("invalidFormat", props.required);
416
+ if (onChange && name && listener !== null && listener !== void 0 && listener.Widgets[name] && props.formfield) {
417
+ onChange({}, listener === null || listener === void 0 ? void 0 : listener.Widgets[name], value, inputValue, false);
418
+ }
369
419
  return;
370
420
  }
371
- if (isDateDisabled(parsedDate)) {
372
- handleValidationError("dateNotInRange");
421
+ setInvalidDateTimeFormat(false);
422
+ var dateObj = parsedDate.toDate();
423
+ if (!validateDateWithProps(dateObj)) {
424
+ if (onChange && name && listener !== null && listener !== void 0 && listener.Widgets[name] && props.formfield) {
425
+ onChange({}, listener === null || listener === void 0 ? void 0 : listener.Widgets[name], value, inputValue, false);
426
+ }
373
427
  return;
374
428
  }
375
429
  handleDateSelection(parsedDate, false);
376
- }, [dataentrymode, datepattern, isDateDisabled, invokeOnChange, updatePrevDatavalue, updateBoundVariable, inputValue]);
430
+ }, [dataentrymode, datepattern, validateDateWithProps, invokeOnChange, updatePrevDatavalue, updateBoundVariable, inputValue]);
377
431
  var handleInputKeyDown = (0, _react.useCallback)(function (event) {
378
432
  var allowedKeys = ["Tab", "Escape", "Enter", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"];
379
433
  if (dataentrymode === "picker" && !allowedKeys.includes(event.key)) {
@@ -390,6 +444,10 @@ var WmDate = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
390
444
  }
391
445
  var parsedDate = (0, _momentTimezone["default"])(inputValue, datepattern, true);
392
446
  if (parsedDate.isValid()) {
447
+ var dateObj = parsedDate.toDate();
448
+ if (!validateDateWithProps(dateObj)) {
449
+ return;
450
+ }
393
451
  handleCalendarChange(parsedDate);
394
452
  } else {
395
453
  handleValidationError("invalidFormat", props.required);
@@ -402,7 +460,7 @@ var WmDate = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
402
460
  if (showPicker) handleClose();
403
461
  break;
404
462
  }
405
- }, [dataentrymode, datepattern, inputValue, showPicker, handleKeyDown, handleCalendarChange, handleClose, invokeOnChange, updatePrevDatavalue, updateBoundVariable]);
463
+ }, [dataentrymode, datepattern, inputValue, showPicker, handleKeyDown, handleCalendarChange, handleClose, validateDateWithProps, invokeOnChange, updatePrevDatavalue, updateBoundVariable]);
406
464
  var handleTodayClick = (0, _react.useCallback)(function () {
407
465
  handleCalendarChange((0, _momentTimezone["default"])());
408
466
  }, [handleCalendarChange]);
@@ -425,33 +483,36 @@ var WmDate = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
425
483
  }, [shouldOpenOnInput, readonly, disabled, handleIconButtonClick]);
426
484
 
427
485
  // Render
428
- return __jsx(_material.Box, {
429
- className: "ng-pristine ng-valid app-date input-group ng-touched",
486
+ return __jsx(_material.Box, (0, _extends2["default"])({
487
+ className: "ng-pristine ng-valid app-date input-group ng-touched ".concat(className),
430
488
  ref: datepickerRef,
431
- style: (0, _utils.getWidthStyle)(width),
432
- title: hint
433
- }, __jsx(_material.TextField, {
489
+ style: _objectSpread(_objectSpread({}, (0, _utils.getWidthStyle)(width)), styles),
490
+ title: hint,
491
+ hidden: props.hidden
492
+ }, readonly && {
493
+ readOnly: true
494
+ }, disabled && {
495
+ disabled: true
496
+ }), __jsx(_material.TextField, {
434
497
  inputRef: inputRef,
435
498
  fullWidth: true,
436
499
  placeholder: getPlaceholderText(),
437
500
  disabled: disabled || readonly,
438
501
  "aria-readonly": readonly,
439
- error: invalidDateTimeFormat || dateNotInRange,
440
- helperText: invalidDateTimeFormat ? "Invalid date format" : dateNotInRange ? "Date not in valid range" : "",
502
+ error: validationFailureMessage || invalidDateTimeFormat || dateNotInRange,
503
+ helperText: validationFailureMessage || (invalidDateTimeFormat ? "Invalid date format" : dateNotInRange ? "Date not in valid range" : ""),
441
504
  slotProps: {
442
505
  htmlInput: {
443
506
  "aria-label": arialabel || "Date input ".concat(getPlaceholderText()),
444
507
  tabIndex: tabindex,
445
508
  accessKey: shortcutkey,
446
- "aria-invalid": invalidDateTimeFormat || dateNotInRange,
509
+ "aria-invalid": validationFailureMessage || invalidDateTimeFormat || dateNotInRange,
447
510
  readOnly: readonly || dataentrymode === "picker",
448
511
  required: required,
449
512
  autoFocus: autofocus,
450
513
  name: name,
451
- className: "form-control app-textbox app-dateinput display-input ".concat(className),
452
- style: _objectSpread(_objectSpread({
453
- cursor: dataentrymode === "picker" ? "pointer" : "text"
454
- }, (0, _utils.getWidthStyle)(width)), styles),
514
+ className: "form-control app-textbox app-dateinput display-input",
515
+ style: _objectSpread({}, (0, _utils.getWidthStyle)(width)),
455
516
  onMouseEnter: function onMouseEnter(event) {
456
517
  return _onMouseEnter && name && _onMouseEnter(event, listener === null || listener === void 0 ? void 0 : listener.Widgets[name]);
457
518
  },
@@ -476,7 +537,7 @@ var WmDate = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
476
537
  className: "input-group-btn"
477
538
  }, __jsx(_material.Button, {
478
539
  type: "button",
479
- className: "btn btn-default btn-time ".concat(className),
540
+ className: "btn btn-default btn-time",
480
541
  tabIndex: tabindex,
481
542
  disabled: disabled || readonly,
482
543
  "aria-label": inputValue ? "Change Date ".concat(inputValue) : "Choose date by pressing enter",
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.parseExcludedDays = exports.parseExcludedDates = exports.getWidthStyle = exports.formatDate = exports.defaultGetDateObj = exports.createFormatTokenRegex = exports.convertToMomentFormat = exports.DATE_FORMAT_MAPPING = void 0;
8
+ exports.validateDate = validateDate;
9
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
8
10
  var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
9
11
  // Constants
10
12
  var DATE_FORMAT_MAPPING = exports.DATE_FORMAT_MAPPING = {
@@ -105,4 +107,95 @@ var getWidthStyle = exports.getWidthStyle = function getWidthStyle(width) {
105
107
  };
106
108
  }
107
109
  return {};
108
- };
110
+ };
111
+
112
+ // Get validator error message
113
+ function getValidatorErrorMessage(validators, validatorType) {
114
+ if (!validators || validators.length === 0) return undefined;
115
+ var validator = validators.find(function (v) {
116
+ return (0, _typeof2["default"])(v) === "object" && v !== null && "type" in v && v.type === validatorType;
117
+ });
118
+ if (validator && (0, _typeof2["default"])(validator) === "object" && "errorMessage" in validator) {
119
+ var errorMessage = validator.errorMessage;
120
+ if (typeof errorMessage === "string") {
121
+ return errorMessage;
122
+ }
123
+ }
124
+ return undefined;
125
+ }
126
+
127
+ // Unified date validation function - handles both UI disabling and validation messages
128
+ function validateDate(date, minDateObj, maxDateObj, excludedDaysArray, excludedDatesArray) {
129
+ var validators = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];
130
+ var validationmessage = arguments.length > 6 ? arguments[6] : undefined;
131
+ if (!date) return {
132
+ isValid: true,
133
+ isOutOfRange: false,
134
+ isDisabled: false
135
+ };
136
+
137
+ // Convert to moment for consistent handling
138
+ var dateMoment = _momentTimezone["default"].isMoment(date) ? date : (0, _momentTimezone["default"])(date);
139
+ if (!dateMoment.isValid()) return {
140
+ isValid: true,
141
+ isOutOfRange: false,
142
+ isDisabled: false
143
+ };
144
+
145
+ // Check min date
146
+ if (minDateObj && dateMoment.startOf("day").valueOf() < (0, _momentTimezone["default"])(minDateObj).startOf("day").valueOf()) {
147
+ var validatorMessage = getValidatorErrorMessage(validators, "mindate");
148
+ var errorMessage = validatorMessage || validationmessage || "Date is before minimum date";
149
+ return {
150
+ isValid: false,
151
+ isOutOfRange: true,
152
+ validationMessage: errorMessage,
153
+ isDisabled: true
154
+ };
155
+ }
156
+
157
+ // Check max date
158
+ if (maxDateObj && dateMoment.startOf("day").valueOf() > (0, _momentTimezone["default"])(maxDateObj).startOf("day").valueOf()) {
159
+ var _validatorMessage = getValidatorErrorMessage(validators, "maxdate");
160
+ var _errorMessage = _validatorMessage || validationmessage || "Date is after maximum date";
161
+ return {
162
+ isValid: false,
163
+ isOutOfRange: true,
164
+ validationMessage: _errorMessage,
165
+ isDisabled: true
166
+ };
167
+ }
168
+
169
+ // Check excluded days
170
+ var day = dateMoment.day();
171
+ if (excludedDaysArray.includes(day)) {
172
+ var _validatorMessage2 = getValidatorErrorMessage(validators, "excludedays");
173
+ var _errorMessage2 = _validatorMessage2 || validationmessage || "Date is excluded";
174
+ return {
175
+ isValid: false,
176
+ isOutOfRange: true,
177
+ validationMessage: _errorMessage2,
178
+ isDisabled: true
179
+ };
180
+ }
181
+
182
+ // Check excluded dates
183
+ var formattedDate = dateMoment.startOf("day").valueOf();
184
+ if (excludedDatesArray.some(function (excludedDate) {
185
+ return (0, _momentTimezone["default"])(excludedDate).startOf("day").valueOf() === formattedDate;
186
+ })) {
187
+ var _validatorMessage3 = getValidatorErrorMessage(validators, "excludedates");
188
+ var _errorMessage3 = _validatorMessage3 || validationmessage || "Date is excluded";
189
+ return {
190
+ isValid: false,
191
+ isOutOfRange: true,
192
+ validationMessage: _errorMessage3,
193
+ isDisabled: true
194
+ };
195
+ }
196
+ return {
197
+ isValid: true,
198
+ isOutOfRange: false,
199
+ isDisabled: false
200
+ };
201
+ }