@elliemae/ds-controlled-form 2.4.1-rc.5 → 2.4.1-rc.9

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 (200) hide show
  1. package/cjs/date-time-picker/ControlledDateTimePickerCTX.js +1 -114
  2. package/cjs/date-time-picker/ControlledDateTimePickerDatatestid.js +0 -2
  3. package/cjs/date-time-picker/config/useChangeHandlers.js +264 -0
  4. package/cjs/date-time-picker/config/useControlledDateTimePicker.js +37 -420
  5. package/cjs/date-time-picker/config/useGetDestructuredValues.js +25 -68
  6. package/cjs/date-time-picker/config/useGetFlags.js +173 -0
  7. package/cjs/date-time-picker/config/useGetPropsBasedOnType.js +101 -0
  8. package/cjs/date-time-picker/config/useGetPropsWithDefault.js +2 -3
  9. package/cjs/date-time-picker/config/useGetReferences.js +86 -0
  10. package/cjs/date-time-picker/config/useGlobalKeyHandlers.js +106 -0
  11. package/cjs/date-time-picker/config/useRelevantValueFromProps.js +39 -0
  12. package/cjs/date-time-picker/config/useValidateProps.js +47 -42
  13. package/cjs/date-time-picker/parts/ClearButton/ClearButton.js +20 -8
  14. package/cjs/date-time-picker/parts/ControlledDateTimePickerContent.js +14 -12
  15. package/cjs/date-time-picker/parts/DateInputs/useDateInputs.js +5 -5
  16. package/cjs/date-time-picker/parts/Pickers/Calendar/Calendar.js +11 -13
  17. package/cjs/date-time-picker/parts/Pickers/Calendar/CalendarContent.js +4 -1
  18. package/cjs/date-time-picker/parts/Pickers/Calendar/CalendarContext.js +1 -49
  19. package/cjs/date-time-picker/parts/Pickers/Calendar/CalendarDaysList.js +4 -4
  20. package/cjs/date-time-picker/parts/Pickers/Calendar/CalendarHead.js +10 -7
  21. package/cjs/date-time-picker/parts/Pickers/Calendar/CalendarIconTrigger.js +8 -4
  22. package/cjs/date-time-picker/parts/Pickers/Calendar/CalendarMonthDays.js +5 -2
  23. package/cjs/date-time-picker/parts/Pickers/Calendar/CalendarWrapper.js +5 -2
  24. package/cjs/date-time-picker/parts/Pickers/Calendar/Day.js +18 -18
  25. package/cjs/date-time-picker/parts/Pickers/Calendar/useConfigCalendarCTX.js +24 -122
  26. package/cjs/date-time-picker/parts/Pickers/Calendar/useCurrentDisplayedMonthYearLogic.js +32 -4
  27. package/cjs/date-time-picker/parts/Pickers/Calendar/useFocusLogic.js +10 -6
  28. package/cjs/date-time-picker/parts/Pickers/Calendar/useKeyboardHandlers.js +30 -14
  29. package/cjs/date-time-picker/parts/Pickers/Calendar/usePopperTriggerLogic.js +7 -4
  30. package/cjs/date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheel.js +7 -3
  31. package/cjs/date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheelContext.js +1 -16
  32. package/cjs/date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheelIconTrigger.js +0 -1
  33. package/cjs/date-time-picker/parts/Pickers/CalendarWithTimeWheel/useConfigCalendarWithTimeWheelCTX.js +10 -10
  34. package/cjs/date-time-picker/parts/Pickers/TimeWheel/HoursList.js +18 -13
  35. package/cjs/date-time-picker/parts/Pickers/TimeWheel/MeridiemList.js +60 -33
  36. package/cjs/date-time-picker/parts/Pickers/TimeWheel/MinutesList.js +18 -13
  37. package/cjs/date-time-picker/parts/Pickers/TimeWheel/TimeWheel.js +11 -13
  38. package/cjs/date-time-picker/parts/Pickers/TimeWheel/TimeWheelContent.js +5 -2
  39. package/cjs/date-time-picker/parts/Pickers/TimeWheel/TimeWheelContext.js +1 -65
  40. package/cjs/date-time-picker/parts/Pickers/TimeWheel/TimeWheelIconTrigger.js +8 -3
  41. package/cjs/date-time-picker/parts/Pickers/TimeWheel/TimeWheelWrapper.js +5 -2
  42. package/cjs/date-time-picker/parts/Pickers/TimeWheel/useConfigTimePickerCTX.js +18 -116
  43. package/cjs/date-time-picker/parts/Pickers/TimeWheel/useCurrentDisplayedWheelsLogic.js +52 -94
  44. package/cjs/date-time-picker/parts/Pickers/TimeWheel/useKeyboardHandlers.js +4 -1
  45. package/cjs/date-time-picker/parts/Pickers/TimeWheel/usePopperTriggerLogic.js +1 -1
  46. package/cjs/date-time-picker/parts/TimeInputs/HHInput.js +1 -3
  47. package/cjs/date-time-picker/parts/TimeInputs/MeridiemInput.js +1 -1
  48. package/cjs/date-time-picker/parts/TimeInputs/TimeInputs.js +3 -7
  49. package/cjs/date-time-picker/parts/TimeInputs/useTimeInputs.js +3 -6
  50. package/cjs/date-time-picker/propTypes.js +56 -23
  51. package/cjs/date-time-picker/sharedTypes.js +2 -0
  52. package/cjs/date-time-picker/utils/dateHelpers.js +56 -56
  53. package/cjs/date-time-picker/utils/hooks/useGetMonthYearFromDateStringOrEmptyStartingMonth.js +2 -5
  54. package/cjs/date-time-picker/utils/hooks/useGetStartingFocusedDay.js +50 -47
  55. package/cjs/date-time-picker/utils/hooks/useOnClickOutside.js +1 -2
  56. package/cjs/date-time-picker/utils/stringHelpers.js +8 -14
  57. package/cjs/date-time-picker/utils/typeGuards.js +14 -0
  58. package/cjs/index.js +4 -0
  59. package/cjs/mask-hook/hooks/index.js +4 -0
  60. package/cjs/mask-hook/hooks/useNumberMask.js +2 -0
  61. package/cjs/mask-hook/hooks/usePhoneMask.js +2 -0
  62. package/cjs/mask-hook/hooks/useRegExpMask.js +122 -0
  63. package/cjs/mask-hook/hooks/useSSNMask.js +2 -0
  64. package/cjs/mask-hook/hooks/useZipCodeMask.js +2 -0
  65. package/cjs/mask-hook/index.js +4 -0
  66. package/cjs/mask-hook/react-desc-prop-types.js +9 -0
  67. package/cjs/mask-hook/utils/addSpecialCharacters.js +3 -4
  68. package/cjs/mask-hook/utils/flatStringArray.js +18 -0
  69. package/cjs/mask-hook/utils/index.js +2 -0
  70. package/esm/date-time-picker/ControlledDateTimePickerCTX.js +3 -115
  71. package/esm/date-time-picker/ControlledDateTimePickerDatatestid.js +0 -2
  72. package/esm/date-time-picker/config/useChangeHandlers.js +256 -0
  73. package/esm/date-time-picker/config/useControlledDateTimePicker.js +38 -421
  74. package/esm/date-time-picker/config/useGetDestructuredValues.js +21 -68
  75. package/esm/date-time-picker/config/useGetFlags.js +165 -0
  76. package/esm/date-time-picker/config/useGetPropsBasedOnType.js +97 -0
  77. package/esm/date-time-picker/config/useGetPropsWithDefault.js +1 -2
  78. package/esm/date-time-picker/config/useGetReferences.js +82 -0
  79. package/esm/date-time-picker/config/useGlobalKeyHandlers.js +98 -0
  80. package/esm/date-time-picker/config/useRelevantValueFromProps.js +35 -0
  81. package/esm/date-time-picker/config/useValidateProps.js +47 -42
  82. package/esm/date-time-picker/parts/ClearButton/ClearButton.js +20 -9
  83. package/esm/date-time-picker/parts/ControlledDateTimePickerContent.js +14 -12
  84. package/esm/date-time-picker/parts/DateInputs/useDateInputs.js +5 -5
  85. package/esm/date-time-picker/parts/Pickers/Calendar/Calendar.js +11 -13
  86. package/esm/date-time-picker/parts/Pickers/Calendar/CalendarContent.js +4 -1
  87. package/esm/date-time-picker/parts/Pickers/Calendar/CalendarContext.js +2 -50
  88. package/esm/date-time-picker/parts/Pickers/Calendar/CalendarDaysList.js +4 -4
  89. package/esm/date-time-picker/parts/Pickers/Calendar/CalendarHead.js +10 -7
  90. package/esm/date-time-picker/parts/Pickers/Calendar/CalendarIconTrigger.js +9 -5
  91. package/esm/date-time-picker/parts/Pickers/Calendar/CalendarMonthDays.js +5 -2
  92. package/esm/date-time-picker/parts/Pickers/Calendar/CalendarWrapper.js +5 -2
  93. package/esm/date-time-picker/parts/Pickers/Calendar/Day.js +18 -18
  94. package/esm/date-time-picker/parts/Pickers/Calendar/useConfigCalendarCTX.js +23 -125
  95. package/esm/date-time-picker/parts/Pickers/Calendar/useCurrentDisplayedMonthYearLogic.js +33 -5
  96. package/esm/date-time-picker/parts/Pickers/Calendar/useFocusLogic.js +10 -6
  97. package/esm/date-time-picker/parts/Pickers/Calendar/useKeyboardHandlers.js +30 -14
  98. package/esm/date-time-picker/parts/Pickers/Calendar/usePopperTriggerLogic.js +7 -4
  99. package/esm/date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheel.js +9 -5
  100. package/esm/date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheelContext.js +1 -16
  101. package/esm/date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheelIconTrigger.js +1 -2
  102. package/esm/date-time-picker/parts/Pickers/CalendarWithTimeWheel/useConfigCalendarWithTimeWheelCTX.js +10 -10
  103. package/esm/date-time-picker/parts/Pickers/TimeWheel/HoursList.js +18 -13
  104. package/esm/date-time-picker/parts/Pickers/TimeWheel/MeridiemList.js +59 -33
  105. package/esm/date-time-picker/parts/Pickers/TimeWheel/MinutesList.js +18 -13
  106. package/esm/date-time-picker/parts/Pickers/TimeWheel/TimeWheel.js +11 -13
  107. package/esm/date-time-picker/parts/Pickers/TimeWheel/TimeWheelContent.js +5 -2
  108. package/esm/date-time-picker/parts/Pickers/TimeWheel/TimeWheelContext.js +2 -66
  109. package/esm/date-time-picker/parts/Pickers/TimeWheel/TimeWheelIconTrigger.js +8 -3
  110. package/esm/date-time-picker/parts/Pickers/TimeWheel/TimeWheelWrapper.js +5 -2
  111. package/esm/date-time-picker/parts/Pickers/TimeWheel/useConfigTimePickerCTX.js +15 -117
  112. package/esm/date-time-picker/parts/Pickers/TimeWheel/useCurrentDisplayedWheelsLogic.js +54 -96
  113. package/esm/date-time-picker/parts/Pickers/TimeWheel/useKeyboardHandlers.js +4 -1
  114. package/esm/date-time-picker/parts/Pickers/TimeWheel/usePopperTriggerLogic.js +1 -1
  115. package/esm/date-time-picker/parts/TimeInputs/HHInput.js +1 -3
  116. package/esm/date-time-picker/parts/TimeInputs/MeridiemInput.js +1 -1
  117. package/esm/date-time-picker/parts/TimeInputs/TimeInputs.js +3 -7
  118. package/esm/date-time-picker/parts/TimeInputs/useTimeInputs.js +3 -6
  119. package/esm/date-time-picker/propTypes.js +49 -17
  120. package/esm/date-time-picker/sharedTypes.js +1 -0
  121. package/esm/date-time-picker/utils/dateHelpers.js +57 -57
  122. package/esm/date-time-picker/utils/hooks/useGetMonthYearFromDateStringOrEmptyStartingMonth.js +2 -5
  123. package/esm/date-time-picker/utils/hooks/useGetStartingFocusedDay.js +46 -47
  124. package/esm/date-time-picker/utils/hooks/useOnClickOutside.js +1 -2
  125. package/esm/date-time-picker/utils/stringHelpers.js +8 -14
  126. package/esm/date-time-picker/utils/typeGuards.js +8 -0
  127. package/esm/index.js +1 -0
  128. package/esm/mask-hook/hooks/index.js +1 -0
  129. package/esm/mask-hook/hooks/useNumberMask.js +2 -0
  130. package/esm/mask-hook/hooks/usePhoneMask.js +2 -0
  131. package/esm/mask-hook/hooks/useRegExpMask.js +116 -0
  132. package/esm/mask-hook/hooks/useSSNMask.js +2 -0
  133. package/esm/mask-hook/hooks/useZipCodeMask.js +2 -0
  134. package/esm/mask-hook/index.js +1 -0
  135. package/esm/mask-hook/react-desc-prop-types.js +8 -1
  136. package/esm/mask-hook/utils/addSpecialCharacters.js +3 -4
  137. package/esm/mask-hook/utils/flatStringArray.js +14 -0
  138. package/esm/mask-hook/utils/index.js +1 -0
  139. package/package.json +55 -15
  140. package/types/date-time-picker/ControlledDateTimePicker.d.ts +25 -80
  141. package/types/date-time-picker/ControlledDateTimePickerCTX.d.ts +1 -2
  142. package/types/date-time-picker/ControlledDateTimePickerDatatestid.d.ts +46 -46
  143. package/types/date-time-picker/ControlledDateTimePickerTypes.d.ts +15 -15
  144. package/types/date-time-picker/config/useChangeHandlers.d.ts +25 -0
  145. package/types/date-time-picker/config/useControlledDateTimePicker.d.ts +18 -2
  146. package/types/date-time-picker/config/useGetDestructuredValues.d.ts +30 -4
  147. package/types/date-time-picker/config/useGetFlags.d.ts +27 -0
  148. package/types/date-time-picker/config/useGetPropsBasedOnType.d.ts +28 -0
  149. package/types/date-time-picker/config/useGetPropsWithDefault.d.ts +2 -2
  150. package/types/date-time-picker/config/useGetReferences.d.ts +39 -0
  151. package/types/date-time-picker/config/useGlobalKeyHandlers.d.ts +16 -0
  152. package/types/date-time-picker/config/useRelevantValueFromProps.d.ts +10 -0
  153. package/types/date-time-picker/config/useValidateProps.d.ts +2 -2
  154. package/types/date-time-picker/parts/ClearButton/useClearButton.d.ts +6 -6
  155. package/types/date-time-picker/parts/DateInputs/DDInput.d.ts +6 -6
  156. package/types/date-time-picker/parts/DateInputs/MMInput.d.ts +6 -6
  157. package/types/date-time-picker/parts/DateInputs/YYYYInput.d.ts +6 -6
  158. package/types/date-time-picker/parts/DateInputs/useDateInputs.d.ts +2 -2
  159. package/types/date-time-picker/parts/Pickers/Calendar/Calendar.d.ts +4 -2
  160. package/types/date-time-picker/parts/Pickers/Calendar/CalendarContext.d.ts +3 -63
  161. package/types/date-time-picker/parts/Pickers/Calendar/CalendarDaysList.d.ts +4 -4
  162. package/types/date-time-picker/parts/Pickers/Calendar/CalendarFooter.d.ts +2 -2
  163. package/types/date-time-picker/parts/Pickers/Calendar/Day.d.ts +2 -2
  164. package/types/date-time-picker/parts/Pickers/Calendar/useCurrentDisplayedMonthYearLogic.d.ts +15 -2
  165. package/types/date-time-picker/parts/Pickers/Calendar/useFocusLogic.d.ts +12 -5
  166. package/types/date-time-picker/parts/Pickers/Calendar/useKeyboardHandlers.d.ts +17 -11
  167. package/types/date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheelContext.d.ts +1 -16
  168. package/types/date-time-picker/parts/Pickers/CalendarWithTimeWheel/CalendarWithTimeWheelFooter.d.ts +2 -2
  169. package/types/date-time-picker/parts/Pickers/CalendarWithTimeWheel/useConfigCalendarWithTimeWheelCTX.d.ts +15 -1
  170. package/types/date-time-picker/parts/Pickers/TimeWheel/TimeWheel.d.ts +4 -2
  171. package/types/date-time-picker/parts/Pickers/TimeWheel/TimeWheelContext.d.ts +3 -62
  172. package/types/date-time-picker/parts/Pickers/TimeWheel/TimeWheelFooter.d.ts +2 -2
  173. package/types/date-time-picker/parts/Pickers/TimeWheel/useConfigTimePickerCTX.d.ts +4 -1
  174. package/types/date-time-picker/parts/Pickers/TimeWheel/useCurrentDisplayedWheelsLogic.d.ts +16 -5
  175. package/types/date-time-picker/parts/Pickers/TimeWheel/useKeyboardHandlers.d.ts +18 -3
  176. package/types/date-time-picker/parts/TimeInputs/HHInput.d.ts +6 -6
  177. package/types/date-time-picker/parts/TimeInputs/MeridiemInput.d.ts +6 -6
  178. package/types/date-time-picker/parts/TimeInputs/MinutesInput.d.ts +6 -6
  179. package/types/date-time-picker/parts/TimeInputs/useTimeInputs.d.ts +22 -2
  180. package/types/date-time-picker/parts/config.d.ts +3 -3
  181. package/types/date-time-picker/sharedTypes.d.ts +94 -0
  182. package/types/date-time-picker/utils/constants.d.ts +33 -33
  183. package/types/date-time-picker/utils/dateHelpers.d.ts +15 -14
  184. package/types/date-time-picker/utils/dateTimeHelpers.d.ts +3 -3
  185. package/types/date-time-picker/utils/hooks/useGetDayFromDateString.d.ts +1 -1
  186. package/types/date-time-picker/utils/hooks/useGetMonthYearFromDateStringOrEmptyStartingMonth.d.ts +2 -2
  187. package/types/date-time-picker/utils/hooks/useGetStartingFocusedDay.d.ts +6 -6
  188. package/types/date-time-picker/utils/hooks/useOnClickOutside.d.ts +1 -1
  189. package/types/date-time-picker/utils/timeHelpers.d.ts +2 -2
  190. package/types/date-time-picker/utils/typeGuards.d.ts +4 -0
  191. package/types/mask-hook/hooks/index.d.ts +1 -0
  192. package/types/mask-hook/hooks/useRegExpMask.d.ts +4 -0
  193. package/types/mask-hook/react-desc-prop-types.d.ts +6 -1
  194. package/types/mask-hook/tests/useRegExpMask.test.d.ts +1 -0
  195. package/types/mask-hook/utils/flatStringArray.d.ts +1 -0
  196. package/types/mask-hook/utils/index.d.ts +1 -0
  197. package/types/date-time-picker/parts/Pickers/Calendar/useConfigCalendarCTX.d.ts +0 -2
  198. package/types/date-time-picker/parts/Pickers/Calendar/usePopperTriggerLogic.d.ts +0 -12
  199. package/types/date-time-picker/parts/Pickers/TimeWheel/usePopperTriggerLogic.d.ts +0 -2
  200. package/types/date-time-picker/propTypes.d.ts +0 -81
@@ -0,0 +1,122 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ require('core-js/modules/web.dom-collections.iterator.js');
6
+ var React = require('react');
7
+ var dsPropsHelpers = require('@elliemae/ds-props-helpers');
8
+ var dsUtilities = require('@elliemae/ds-utilities');
9
+ var addSpecialCharacters = require('../utils/addSpecialCharacters.js');
10
+ var getPartialMaskedPos = require('../utils/getPartialMaskedPos.js');
11
+ var setCursorPosition = require('../utils/setCursorPosition.js');
12
+ require('core-js/modules/esnext.async-iterator.filter.js');
13
+ require('core-js/modules/esnext.iterator.constructor.js');
14
+ require('core-js/modules/esnext.iterator.filter.js');
15
+ var flatStringArray = require('../utils/flatStringArray.js');
16
+ var reactDescPropTypes = require('../react-desc-prop-types.js');
17
+
18
+ const isRegExp = item => typeof item === 'object';
19
+
20
+ const conformValue = (rawValue, cursorPos, lastKeyCode, regExp, filledMask) => {
21
+ const specialChars = [];
22
+ const flatRegExp = flatStringArray.flatStringArray(regExp);
23
+ const rawValueArray = rawValue.split('');
24
+ let offSet = 0;
25
+ let charsFound = 0;
26
+ let specialCharsLeft = '';
27
+ let fullRegExpMatched = false;
28
+ const maskedValue = [];
29
+
30
+ for (let i = 0; i < flatRegExp.length; i += 1) {
31
+ if (isRegExp(flatRegExp[i])) {
32
+ specialCharsLeft = '';
33
+ fullRegExpMatched = false;
34
+
35
+ for (let j = charsFound + offSet; j < rawValueArray.length; j += 1) {
36
+ var _rawValueArray$j;
37
+
38
+ const match = (_rawValueArray$j = rawValueArray[j]) === null || _rawValueArray$j === void 0 ? void 0 : _rawValueArray$j.match(flatRegExp[i]);
39
+
40
+ if (match) {
41
+ maskedValue.push(match[0]);
42
+ charsFound += 1;
43
+ fullRegExpMatched = true;
44
+ break;
45
+ } else {
46
+ offSet += 1;
47
+ }
48
+ }
49
+
50
+ if (filledMask && !fullRegExpMatched) {
51
+ maskedValue.push('_');
52
+ }
53
+ } else {
54
+ specialChars.push([flatRegExp[i], i]);
55
+ if (rawValueArray[i + offSet] === flatRegExp[i]) charsFound += 1;
56
+ specialCharsLeft += flatRegExp[i];
57
+ }
58
+ }
59
+
60
+ if (!fullRegExpMatched) specialCharsLeft = '';
61
+ const maskedPos = getPartialMaskedPos.getPartialMaskedPos(rawValue, maskedValue, cursorPos);
62
+ const [maskWithSpecialsChars, finalMaskedPos] = addSpecialCharacters.addSpecialCharacters(maskedValue, specialChars, maskedPos, lastKeyCode);
63
+ return [maskWithSpecialsChars + specialCharsLeft, finalMaskedPos];
64
+ };
65
+
66
+ const useRegExpMask = props => {
67
+ const propsWithDefault = dsPropsHelpers.useMemoMergePropsWithDefault(props, reactDescPropTypes.DSMaskRegExpHookDefaultProps);
68
+ dsPropsHelpers.useValidateTypescriptPropTypes(propsWithDefault, reactDescPropTypes.DSMaskRegExpHookPropsTypes);
69
+ const {
70
+ valueSetter,
71
+ onChange: userOnChange,
72
+ onKeyDown: userOnKeyDown,
73
+ onBlur: userOnBlur,
74
+ regExp,
75
+ filledMask
76
+ } = propsWithDefault;
77
+ const lastKeyCode = React.useRef('Unidentified');
78
+ const scheduleAfterRender = dsUtilities.useCallbackAfterRender(); // Some times, the value of the mask is not gonna change (user types invalid char for example)
79
+ // This makes the input to go from "correct" -> "incorrect" -> "correct"
80
+ // But since the input is controlled, the input does not re-render
81
+ // This makes the input go mumbo-jumbo and places the cursor in the end, because we kinda changed the value async
82
+ // Solution for this is to trigger a re-render, we do this with a set state call in the on change event
83
+
84
+ const [, setKey] = React.useState(0);
85
+ const onKeyDown = React.useCallback(e => {
86
+ lastKeyCode.current = e.code;
87
+ if (userOnKeyDown) userOnKeyDown(e);
88
+ }, [userOnKeyDown]);
89
+ const onChange = React.useCallback(e => {
90
+ var _e$target$selectionEn;
91
+
92
+ const [mask, cursorPos] = conformValue(e.target.value, (_e$target$selectionEn = e.target.selectionEnd) !== null && _e$target$selectionEn !== void 0 ? _e$target$selectionEn : 0, lastKeyCode.current, regExp, filledMask);
93
+ valueSetter(prevMask => {
94
+ // Here we need to update the key
95
+ if (mask === prevMask) setKey(key => key + 1);
96
+ return mask;
97
+ });
98
+ if (userOnChange) userOnChange(e, mask);
99
+ scheduleAfterRender(() => setCursorPosition.setCursorPosition(e.target, cursorPos));
100
+ }, [valueSetter, scheduleAfterRender, userOnChange]);
101
+ const onBlur = React.useCallback(e => {
102
+ if (filledMask) {
103
+ const maskedValue = e.target.value.split('');
104
+ const flatRegExp = flatStringArray.flatStringArray(regExp);
105
+ const firstUnderscoreIdx = maskedValue.findIndex((char, idx) => char === '_' && flatRegExp[idx] !== '_');
106
+ if (firstUnderscoreIdx > -1) valueSetter(maskedValue.slice(0, firstUnderscoreIdx).join(''));
107
+ }
108
+
109
+ if (userOnBlur) userOnBlur(e);
110
+ }, [valueSetter, userOnBlur]);
111
+ return {
112
+ onKeyDown,
113
+ onChange,
114
+ onBlur
115
+ };
116
+ };
117
+ const UseRegExpMaskWithSchema = dsPropsHelpers.describe(useRegExpMask);
118
+ UseRegExpMaskWithSchema.propTypes = reactDescPropTypes.DSMaskRegExpHookPropsTypes;
119
+
120
+ exports.UseRegExpMaskWithSchema = UseRegExpMaskWithSchema;
121
+ exports.isRegExp = isRegExp;
122
+ exports.useRegExpMask = useRegExpMask;
@@ -12,6 +12,8 @@ var dsUtilities = require('@elliemae/ds-utilities');
12
12
  var addSpecialCharacters = require('../utils/addSpecialCharacters.js');
13
13
  var getPartialMaskedPos = require('../utils/getPartialMaskedPos.js');
14
14
  var setCursorPosition = require('../utils/setCursorPosition.js');
15
+ require('core-js/modules/esnext.async-iterator.reduce.js');
16
+ require('core-js/modules/esnext.iterator.reduce.js');
15
17
  var reactDescPropTypes = require('../react-desc-prop-types.js');
16
18
 
17
19
  const ssnSpecialChars = [['-', 3], ['-', 6]];
@@ -12,6 +12,8 @@ var dsUtilities = require('@elliemae/ds-utilities');
12
12
  var addSpecialCharacters = require('../utils/addSpecialCharacters.js');
13
13
  var getPartialMaskedPos = require('../utils/getPartialMaskedPos.js');
14
14
  var setCursorPosition = require('../utils/setCursorPosition.js');
15
+ require('core-js/modules/esnext.async-iterator.reduce.js');
16
+ require('core-js/modules/esnext.iterator.reduce.js');
15
17
  var reactDescPropTypes = require('../react-desc-prop-types.js');
16
18
 
17
19
  const zipCodeSpecialChars = [['-', 5]];
@@ -5,6 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var usePhoneMask = require('./hooks/usePhoneMask.js');
6
6
  var useNumberMask = require('./hooks/useNumberMask.js');
7
7
  var useSSNMask = require('./hooks/useSSNMask.js');
8
+ var useRegExpMask = require('./hooks/useRegExpMask.js');
8
9
  var useZipCodeMask = require('./hooks/useZipCodeMask.js');
9
10
 
10
11
 
@@ -18,6 +19,9 @@ exports.useNumberMask = useNumberMask.useNumberMask;
18
19
  exports.UseSSNMaskWithSchema = useSSNMask.UseSSNMaskWithSchema;
19
20
  exports.getSSNMaskedValue = useSSNMask.getSSNMaskedValue;
20
21
  exports.useSSNMask = useSSNMask.useSSNMask;
22
+ exports.UseRegExpMaskWithSchema = useRegExpMask.UseRegExpMaskWithSchema;
23
+ exports.isRegExp = useRegExpMask.isRegExp;
24
+ exports.useRegExpMask = useRegExpMask.useRegExpMask;
21
25
  exports.UseZipCodeMaskWithSchema = useZipCodeMask.UseZipCodeMaskWithSchema;
22
26
  exports.getUseZipMaskedValue = useZipCodeMask.getUseZipMaskedValue;
23
27
  exports.useZipCodeMask = useZipCodeMask.useZipCodeMask;
@@ -25,6 +25,9 @@ const DSMaskHookDefaultProps = {
25
25
  const DSMaskPhoneHookDefaultProps = _objectSpread(_objectSpread({}, DSMaskHookDefaultProps), {}, {
26
26
  isInternational: false
27
27
  });
28
+ const DSMaskRegExpHookDefaultProps = _objectSpread(_objectSpread({}, DSMaskHookDefaultProps), {}, {
29
+ filledMask: false
30
+ });
28
31
  const DSMaskNumberHookDefaultProps = _objectSpread(_objectSpread({}, DSMaskHookDefaultProps), {}, {
29
32
  suffix: '',
30
33
  prefix: '',
@@ -38,6 +41,10 @@ const DSMaskHookPropsTypes = {
38
41
  onChange: dsPropsHelpers.PropTypes.func.description('Callback for onChange'),
39
42
  onKeyDown: dsPropsHelpers.PropTypes.func.description('Callback for onKeyDown')
40
43
  };
44
+ const DSMaskRegExpHookPropsTypes = _objectSpread(_objectSpread({}, DSMaskHookPropsTypes), {}, {
45
+ regExp: dsPropsHelpers.PropTypes.arrayOf(dsPropsHelpers.PropTypes.oneOfType([dsPropsHelpers.PropTypes.string, dsPropsHelpers.PropTypes.instanceOf(RegExp)])).description('Array with regexp or special chars per character').isRequired,
46
+ filledMask: dsPropsHelpers.PropTypes.bool.description('Show blank chars positions').defaultValue(false)
47
+ });
41
48
  const DSMaskPhoneHookPropsTypes = _objectSpread(_objectSpread({}, DSMaskHookPropsTypes), {}, {
42
49
  isInternational: dsPropsHelpers.PropTypes.bool.description('Use or not internaltional phone mask number').defaultValue(false)
43
50
  });
@@ -56,3 +63,5 @@ exports.DSMaskNumberHookDefaultProps = DSMaskNumberHookDefaultProps;
56
63
  exports.DSMaskNumberHookPropsTypes = DSMaskNumberHookPropsTypes;
57
64
  exports.DSMaskPhoneHookDefaultProps = DSMaskPhoneHookDefaultProps;
58
65
  exports.DSMaskPhoneHookPropsTypes = DSMaskPhoneHookPropsTypes;
66
+ exports.DSMaskRegExpHookDefaultProps = DSMaskRegExpHookDefaultProps;
67
+ exports.DSMaskRegExpHookPropsTypes = DSMaskRegExpHookPropsTypes;
@@ -38,10 +38,9 @@ const addSpecialCharacters = (maskWithoutSpecialChars, specialCharsDescr, masked
38
38
  });
39
39
  } else if (lastKeyCode === 'Backspace' && finalMaskedPos) {
40
40
  // If erasing, move the cursor back if we are in a special chars area
41
- specialCharsDescr.forEach(_ref3 => {
42
- let [chars, pos] = _ref3;
43
- if (pos + 1 <= finalMaskedPos && finalMaskedPos <= pos + chars.length) finalMaskedPos = pos;
44
- });
41
+ for (let i = specialCharsDescr.length - 1; i >= 0; i -= 1) {
42
+ if (specialCharsDescr[i][1] + 1 <= finalMaskedPos && finalMaskedPos <= specialCharsDescr[i][1] + specialCharsDescr[i][0].length) [, finalMaskedPos] = specialCharsDescr[i];
43
+ }
45
44
  }
46
45
 
47
46
  return [finalMask.join(''), finalMaskedPos];
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ require('core-js/modules/esnext.async-iterator.reduce.js');
6
+ require('core-js/modules/esnext.iterator.constructor.js');
7
+ require('core-js/modules/esnext.iterator.reduce.js');
8
+ require('core-js/modules/web.dom-collections.iterator.js');
9
+
10
+ const flatStringArray = stringArray => stringArray.reduce((acc, curr) => {
11
+ if (typeof curr === 'string') {
12
+ return [...acc, ...curr.split('')];
13
+ }
14
+
15
+ return [...acc, curr];
16
+ }, []);
17
+
18
+ exports.flatStringArray = flatStringArray;
@@ -6,6 +6,7 @@ var addSpecialCharacters = require('./addSpecialCharacters.js');
6
6
  var getPartialMaskedPos = require('./getPartialMaskedPos.js');
7
7
  var setCursorPosition = require('./setCursorPosition.js');
8
8
  var sharedFilters = require('./sharedFilters.js');
9
+ var flatStringArray = require('./flatStringArray.js');
9
10
 
10
11
 
11
12
 
@@ -13,3 +14,4 @@ exports.addSpecialCharacters = addSpecialCharacters.addSpecialCharacters;
13
14
  exports.getPartialMaskedPos = getPartialMaskedPos.getPartialMaskedPos;
14
15
  exports.setCursorPosition = setCursorPosition.setCursorPosition;
15
16
  exports.filterNumbersOnly = sharedFilters.filterNumbersOnly;
17
+ exports.flatStringArray = flatStringArray.flatStringArray;
@@ -1,120 +1,8 @@
1
- import { createContext, createRef } from 'react';
2
- import { CONTROLLED_DATE_TIME_PICKER_TYPES } from './ControlledDateTimePickerTypes.js';
1
+ import { createContext } from 'react';
3
2
 
4
- // eslint-disable-next-line @typescript-eslint/no-empty-function
5
- const noop = () => {};
6
-
7
- const defaultReturnFalse = () => false; // const mockedStringStateSetter: React.Dispatch<React.SetStateAction<string>> = noop;
8
-
9
-
10
- const mockedSetLatestInteractionRegion = noop;
11
- const defaultProps = {
12
- // changing default type requires changing default booleans (hideDate, withAnyInputs, etc...) in the context too
13
- type: CONTROLLED_DATE_TIME_PICKER_TYPES.DATE_TIME.FULL,
14
- dateTime: '',
15
- date: '',
16
- time: '',
17
- onDateChange: noop,
18
- onMonthChange: noop,
19
- onDayChange: noop,
20
- onYearChange: noop,
21
- onTimeChange: noop,
22
- onHourChange: noop,
23
- onMinuteChange: noop,
24
- // onSecondsChange: noop,
25
- onMeridiemChange: noop,
26
- onDateTimeChange: noop,
27
- onPickerOpen: noop,
28
- onPickerClose: noop,
29
- getIsDisabledDay: defaultReturnFalse,
30
- getIsOutOfRangeDay: defaultReturnFalse,
31
- getIsStartRangeDay: defaultReturnFalse,
32
- getIsDayInRange: defaultReturnFalse,
33
- getIsEndRangeDay: defaultReturnFalse,
34
- getIsDisabledTime: defaultReturnFalse,
35
- emptyPickerStartingMonth: undefined,
36
- onCalendarOpenFocusedDay: undefined,
37
- minutesInterval: 1,
38
- isClearable: false,
39
- disabled: false,
40
- hasError: false,
41
- autoFocus: false,
42
- preventCloseOnSelection: false,
43
- pickerFooterMsg: undefined
44
- };
45
- const defaultContext = {
46
- props: defaultProps,
47
- monthInputRef: /*#__PURE__*/createRef(),
48
- dayInputRef: /*#__PURE__*/createRef(),
49
- yearInputRef: /*#__PURE__*/createRef(),
50
- hourInputRef: /*#__PURE__*/createRef(),
51
- minutesInputRef: /*#__PURE__*/createRef(),
52
- // secondsInputRef: createRef<HTMLInputElement>(),
53
- meridiemInputRef: /*#__PURE__*/createRef(),
54
- clearButtonRef: /*#__PURE__*/createRef(),
55
- pickerButtonRef: /*#__PURE__*/createRef(),
56
- prevYearBtnRef: /*#__PURE__*/createRef(),
57
- prevMonthBtnRef: /*#__PURE__*/createRef(),
58
- nextMonthBtnRef: /*#__PURE__*/createRef(),
59
- nextYearBtnRef: /*#__PURE__*/createRef(),
60
- calendarDaysWrapperRef: /*#__PURE__*/createRef(),
61
- prevHourBtnRef: /*#__PURE__*/createRef(),
62
- currHourBtnRef: /*#__PURE__*/createRef(),
63
- nextHourBtnRef: /*#__PURE__*/createRef(),
64
- prevMinutesBtnRef: /*#__PURE__*/createRef(),
65
- currMinutesBtnRef: /*#__PURE__*/createRef(),
66
- nextMinutesBtnRef: /*#__PURE__*/createRef(),
67
- prevMeridiemBtnRef: /*#__PURE__*/createRef(),
68
- currMeridiemBtnRef: /*#__PURE__*/createRef(),
69
- nextMeridiemBtnRef: /*#__PURE__*/createRef(),
70
- firstSegmentRef: /*#__PURE__*/createRef(),
71
- lastSegmentRef: /*#__PURE__*/createRef(),
72
- ariaCurrentValueForInputs: '',
73
- dateStringFromProps: '',
74
- tempDateString: '__/__/____',
75
- // setDateString: mockedStringStateSetter,
76
- tempTimeString: '__:__:__ __',
77
- // setTimeString: mockedStringStateSetter,
78
- handleChangeComposedDateTimeString: noop,
79
- handleChangeComposedDateString: noop,
80
- handleChangeComposedTimeString: noop,
81
- handleChangeMonth: noop,
82
- handleChangeDay: noop,
83
- handleChangeYear: noop,
84
- handleChangeHours: noop,
85
- handleChangeMinutes: noop,
86
- handleChangeMeridiem: noop,
87
- handleClearAll: noop,
88
- hideDate: false,
89
- hideTime: false,
90
- hideDateTimePicker: false,
91
- hideDatePicker: true,
92
- hideTimePicker: true,
93
- withAnyInputs: true,
94
- withAnyPicker: true,
95
- withClearBtn: false,
96
- withAnyRightController: true,
97
- isDateSelector: false,
98
- isTimeSelector: false,
99
- isDateTimeSelector: true,
100
- isControllerOnly: false,
101
- isWithTimeWheelToo: true,
102
- isWithCalendarToo: true,
103
- isWithDateInputs: true,
104
- isWithDateInputsOnly: false,
105
- isWithTimeInputs: true,
106
- isWithTimeInputsOnly: false,
107
- autoFocusMonthInput: false,
108
- autoFocusHourInput: false,
109
- autoFocusPrevMonthArrow: false,
110
- autoFocusHourTimeWheel: false,
111
- shouldPreserveClearableSpace: false,
112
- latestInteractionRegion: '',
113
- setLatestInteractionRegion: mockedSetLatestInteractionRegion,
114
- onGlobalKeyDown: noop
115
- };
3
+ const defaultContext = {};
116
4
  /** Context for cross component communication */
117
5
 
118
6
  const ControlledDateTimePickerContext = /*#__PURE__*/createContext(defaultContext);
119
7
 
120
- export { ControlledDateTimePickerContext, ControlledDateTimePickerContext as default, defaultProps };
8
+ export { ControlledDateTimePickerContext, ControlledDateTimePickerContext as default };
@@ -20,9 +20,7 @@ const ControlledDateTimePickerDatatestid = {
20
20
  DAY: 'ds-controlled-date-time-picker-calendar-day',
21
21
  FOCUSED_DAY: 'ds-controlled-date-time-picker-calendar-focused-day',
22
22
  START_RANGE_DAY: 'ds-controlled-date-time-picker-calendar-start-range-day',
23
- // <-nuevo
24
23
  IN_RANGE_DAY: 'ds-controlled-date-time-picker-calendar-in-range-day',
25
- // <-nuevo
26
24
  END_RANGE_DAY: 'ds-controlled-date-time-picker-calendar-end-range-day',
27
25
  SELECTED_DAY: 'ds-controlled-date-time-picker-calendar-selected-day',
28
26
  SELECTED_FOCUSED_DAY: 'ds-controlled-date-time-picker-calendar-selected-focused-day',
@@ -0,0 +1,256 @@
1
+ import 'core-js/modules/esnext.async-iterator.filter.js';
2
+ import 'core-js/modules/esnext.iterator.constructor.js';
3
+ import 'core-js/modules/esnext.iterator.filter.js';
4
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
5
+ import 'core-js/modules/esnext.iterator.for-each.js';
6
+ import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
7
+ import { useCallback, useMemo } from 'react';
8
+ import { getValidationDateStringMetaInfo } from '../utils/dateHelpers.js';
9
+ import { getValidationTimeStringMetaInfo } from '../utils/timeHelpers.js';
10
+ import { getFormattedDateString, getFormattedTimeString, isEmptyDateStringMask, isEmptyTimeStringMask, isEmptyDateTimeStringMask } from '../utils/stringHelpers.js';
11
+ import { defaultMetaInfo } from '../utils/constants.js';
12
+
13
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
14
+
15
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
16
+ const useChangeHandlers = _ref => {
17
+ let {
18
+ relevantValues,
19
+ destructuredValues,
20
+ propsBasedOnType,
21
+ DOMRefs
22
+ } = _ref;
23
+ const {
24
+ tempDateString,
25
+ setTempDateString,
26
+ tempTimeString,
27
+ setTimeString
28
+ } = relevantValues;
29
+ const {
30
+ getIsDisabledDay,
31
+ getIsOutOfRangeDay,
32
+ appOnDateChange,
33
+ appOnMonthChange,
34
+ appOnDayChange,
35
+ appOnYearChange,
36
+ getIsDisabledTime,
37
+ appOnTimeChange,
38
+ appOnHourChange,
39
+ appOnMinuteChange,
40
+ appOnMeridiemChange,
41
+ appOnDateTimeChange,
42
+ isDateTime,
43
+ isDate,
44
+ isTime
45
+ } = propsBasedOnType;
46
+ const {
47
+ month,
48
+ day,
49
+ year,
50
+ hours,
51
+ minutes,
52
+ meridiem
53
+ } = destructuredValues;
54
+ const {
55
+ firstSegmentRef
56
+ } = DOMRefs;
57
+ const getDateMetaInfo = useCallback(function () {
58
+ let newDateString = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
59
+ let metaInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
60
+ const finalDateString = newDateString || tempDateString;
61
+
62
+ const finalMetaInfo = _objectSpread(_objectSpread({}, metaInfo), getValidationDateStringMetaInfo(finalDateString, getIsOutOfRangeDay, getIsDisabledDay));
63
+
64
+ return finalMetaInfo;
65
+ }, [tempDateString, getIsDisabledDay, getIsOutOfRangeDay]);
66
+ const getTimeMetaInfo = useCallback(function () {
67
+ let newTimeString = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
68
+ let metaInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
69
+ const finalTimeString = newTimeString || tempTimeString;
70
+
71
+ const finalMetaInfo = _objectSpread(_objectSpread({}, metaInfo), getValidationTimeStringMetaInfo(finalTimeString, getIsDisabledTime));
72
+
73
+ return finalMetaInfo;
74
+ }, [tempTimeString, getIsDisabledTime]);
75
+ const handleChangeComposedDateTimeString = useCallback((newDateString, newTimeString, metaInfo) => {
76
+ const appDateString = isEmptyDateStringMask(newDateString) ? '' : newDateString;
77
+ const appTimeString = isEmptyTimeStringMask(newTimeString) ? '' : newTimeString;
78
+ appOnDateChange(appDateString, metaInfo); // don't do this on useEffect to avoid complete chaos
79
+
80
+ setTempDateString(newDateString);
81
+ appOnTimeChange(appTimeString, metaInfo); // don't do this on useEffect to avoid complete chaos
82
+
83
+ setTimeString(newTimeString);
84
+ const newDateTimeString = "".concat(newDateString, " ").concat(newTimeString);
85
+
86
+ const newMetaInfo = _objectSpread(_objectSpread(_objectSpread({}, getTimeMetaInfo(newTimeString, metaInfo)), getDateMetaInfo(newDateString, metaInfo)), {}, {
87
+ newDateString,
88
+ newTimeString,
89
+ newDateTimeString
90
+ });
91
+
92
+ const appDateTimeString = isEmptyDateTimeStringMask(newDateTimeString) ? '' : newDateTimeString;
93
+ appOnDateTimeChange(appDateTimeString, newMetaInfo); // don't do this on useEffect to avoid complete chaos
94
+ }, [appOnDateChange, setTempDateString, appOnTimeChange, setTimeString, getTimeMetaInfo, getDateMetaInfo, appOnDateTimeChange]);
95
+ const handleChangeComposedDateString = useCallback((newDateString, metaInfo) => {
96
+ // if we receive an "empty" mask, we comunicate empty string to the app
97
+ const appDateString = isEmptyDateStringMask(newDateString) ? '' : newDateString;
98
+ appOnDateChange(appDateString, metaInfo); // don't do this on useEffect to avoid complete chaos
99
+
100
+ setTempDateString(newDateString);
101
+ const newDateTimeString = "".concat(newDateString, " ").concat(tempTimeString);
102
+
103
+ const newMetaInfo = _objectSpread(_objectSpread(_objectSpread({}, getTimeMetaInfo(tempTimeString, metaInfo)), getDateMetaInfo(newDateString, metaInfo)), {}, {
104
+ newDateString,
105
+ newTimeString: tempTimeString,
106
+ newDateTimeString
107
+ });
108
+
109
+ const appDateTimeString = isEmptyDateTimeStringMask(newDateTimeString) ? '' : newDateTimeString;
110
+ appOnDateTimeChange(appDateTimeString, newMetaInfo); // don't do this on useEffect to avoid complete chaos
111
+ }, [appOnDateChange, setTempDateString, tempTimeString, getTimeMetaInfo, getDateMetaInfo, appOnDateTimeChange]);
112
+ const handleChangeComposedTimeString = useCallback((newTimeString, metaInfo) => {
113
+ const appTimeString = isEmptyTimeStringMask(newTimeString) ? '' : newTimeString;
114
+ appOnTimeChange(appTimeString, metaInfo); // don't do this on useEffect to avoid complete chaos
115
+
116
+ setTimeString(newTimeString);
117
+ const newDateTimeString = "".concat(tempDateString, " ").concat(newTimeString);
118
+
119
+ const newMetaInfo = _objectSpread(_objectSpread(_objectSpread({}, getTimeMetaInfo(newTimeString, metaInfo)), getDateMetaInfo(tempDateString, metaInfo)), {}, {
120
+ newDateTimeString,
121
+ newDateString: tempDateString,
122
+ newTimeString
123
+ });
124
+
125
+ const appDateTimeString = isEmptyDateTimeStringMask(newDateTimeString) ? '' : newDateTimeString;
126
+ appOnDateTimeChange(appDateTimeString, newMetaInfo); // don't do this on useEffect to avoid complete chaos
127
+ }, [appOnTimeChange, setTimeString, tempDateString, getTimeMetaInfo, getDateMetaInfo, appOnDateTimeChange]);
128
+ const handleChangeMonth = useCallback(function (newMonth, e) {
129
+ let metaInfo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultMetaInfo;
130
+ const newDateString = getFormattedDateString({
131
+ month: newMonth,
132
+ day,
133
+ year
134
+ });
135
+
136
+ const finalMetaInfo = _objectSpread(_objectSpread(_objectSpread({}, metaInfo), getValidationDateStringMetaInfo(newDateString, getIsOutOfRangeDay, getIsDisabledDay)), {}, {
137
+ newDateString
138
+ });
139
+
140
+ appOnMonthChange(newMonth, e, finalMetaInfo);
141
+ handleChangeComposedDateString(newDateString, finalMetaInfo);
142
+ }, [day, year, getIsOutOfRangeDay, getIsDisabledDay, appOnMonthChange, handleChangeComposedDateString]);
143
+ const handleChangeDay = useCallback(function (newDay, e) {
144
+ let metaInfo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultMetaInfo;
145
+ const newDateString = getFormattedDateString({
146
+ month,
147
+ day: newDay,
148
+ year
149
+ });
150
+
151
+ const finalMetaInfo = _objectSpread(_objectSpread(_objectSpread({}, metaInfo), getValidationDateStringMetaInfo(newDateString, getIsOutOfRangeDay, getIsDisabledDay)), {}, {
152
+ newDateString
153
+ });
154
+
155
+ appOnDayChange(newDay, e, finalMetaInfo);
156
+ handleChangeComposedDateString(newDateString, finalMetaInfo);
157
+ }, [month, year, getIsOutOfRangeDay, getIsDisabledDay, appOnDayChange, handleChangeComposedDateString]);
158
+ const handleChangeYear = useCallback(function (newYear, e) {
159
+ let metaInfo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultMetaInfo;
160
+ const newDateString = getFormattedDateString({
161
+ month,
162
+ day,
163
+ year: newYear
164
+ });
165
+
166
+ const finalMetaInfo = _objectSpread(_objectSpread(_objectSpread({}, metaInfo), getValidationDateStringMetaInfo(newDateString, getIsOutOfRangeDay, getIsDisabledDay)), {}, {
167
+ newDateString
168
+ });
169
+
170
+ appOnYearChange(newYear, e, finalMetaInfo);
171
+ handleChangeComposedDateString(newDateString, finalMetaInfo);
172
+ }, [month, day, getIsOutOfRangeDay, getIsDisabledDay, appOnYearChange, handleChangeComposedDateString]);
173
+ const handleChangeHours = useCallback(function (newHours, e) {
174
+ let metaInfo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultMetaInfo;
175
+ const newTimeString = getFormattedTimeString({
176
+ hours: newHours,
177
+ minutes,
178
+ // seconds,
179
+ meridiem
180
+ });
181
+
182
+ const finalMetaInfo = _objectSpread(_objectSpread(_objectSpread({}, metaInfo), getValidationTimeStringMetaInfo(newTimeString, getIsDisabledTime)), {}, {
183
+ newTimeString
184
+ });
185
+
186
+ appOnHourChange(newHours, e, finalMetaInfo);
187
+ handleChangeComposedTimeString(newTimeString, finalMetaInfo);
188
+ }, [minutes, meridiem, getIsDisabledTime, appOnHourChange, handleChangeComposedTimeString]);
189
+ const handleChangeMinutes = useCallback(function (newMinutes, e) {
190
+ let metaInfo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultMetaInfo;
191
+ const newTimeString = getFormattedTimeString({
192
+ hours,
193
+ minutes: newMinutes,
194
+ meridiem
195
+ });
196
+
197
+ const finalMetaInfo = _objectSpread(_objectSpread(_objectSpread({}, metaInfo), getValidationTimeStringMetaInfo(newTimeString, getIsDisabledTime)), {}, {
198
+ newTimeString
199
+ });
200
+
201
+ appOnMinuteChange(newMinutes, e, finalMetaInfo);
202
+ handleChangeComposedTimeString(newTimeString, finalMetaInfo);
203
+ }, [hours, meridiem, getIsDisabledTime, appOnMinuteChange, handleChangeComposedTimeString]);
204
+ const handleChangeMeridiem = useCallback(function (newMeridiem, e) {
205
+ let metaInfo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultMetaInfo;
206
+ const newTimeString = getFormattedTimeString({
207
+ hours,
208
+ minutes,
209
+ meridiem: newMeridiem
210
+ });
211
+
212
+ const finalMetaInfo = _objectSpread(_objectSpread(_objectSpread({}, metaInfo), getValidationTimeStringMetaInfo(newTimeString, getIsDisabledTime)), {}, {
213
+ newTimeString
214
+ });
215
+
216
+ appOnMeridiemChange(newMeridiem, e, finalMetaInfo);
217
+ handleChangeComposedTimeString(newTimeString, finalMetaInfo);
218
+ }, [hours, minutes, getIsDisabledTime, appOnMeridiemChange, handleChangeComposedTimeString]);
219
+ const handleClearAll = useCallback(e => {
220
+ const metaInfo = {
221
+ isAutomaticFillTrigger: false,
222
+ isClearButtonAction: true,
223
+ newDateString: '',
224
+ newTimeString: '',
225
+ newDateTimeString: ''
226
+ };
227
+ appOnMonthChange('', e, metaInfo);
228
+ appOnDayChange('', e, metaInfo);
229
+ appOnYearChange('', e, metaInfo);
230
+ appOnHourChange('', e, metaInfo);
231
+ appOnMinuteChange('', e, metaInfo);
232
+ appOnMeridiemChange('', e, metaInfo);
233
+ if (isDateTime) handleChangeComposedDateTimeString('__/__/____', '__:__ __', metaInfo);
234
+ if (isDate) handleChangeComposedDateString('__/__/____', metaInfo);
235
+ if (isTime) handleChangeComposedTimeString('__:__ __', metaInfo);
236
+ setTimeout(() => {
237
+ var _firstSegmentRef$curr;
238
+
239
+ (_firstSegmentRef$curr = firstSegmentRef.current) === null || _firstSegmentRef$curr === void 0 ? void 0 : _firstSegmentRef$curr.focus();
240
+ });
241
+ }, [appOnDayChange, appOnHourChange, appOnMeridiemChange, appOnMinuteChange, appOnMonthChange, appOnYearChange, firstSegmentRef, handleChangeComposedDateString, handleChangeComposedDateTimeString, handleChangeComposedTimeString, isDate, isDateTime, isTime]);
242
+ return useMemo(() => ({
243
+ handleChangeComposedDateTimeString,
244
+ handleChangeComposedDateString,
245
+ handleChangeComposedTimeString,
246
+ handleChangeMonth,
247
+ handleChangeDay,
248
+ handleChangeYear,
249
+ handleChangeHours,
250
+ handleChangeMinutes,
251
+ handleChangeMeridiem,
252
+ handleClearAll
253
+ }), [handleChangeComposedDateString, handleChangeComposedDateTimeString, handleChangeComposedTimeString, handleChangeDay, handleChangeHours, handleChangeMeridiem, handleChangeMinutes, handleChangeMonth, handleChangeYear, handleClearAll]);
254
+ };
255
+
256
+ export { useChangeHandlers };