intelicoreact 1.8.6 → 1.8.7

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 (225) hide show
  1. package/dist/Atomic/FormElements/Dropdown/components/DropdownLoader.jsx +1 -18
  2. package/dist/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN_old.jsx +1 -121
  3. package/dist/Atomic/FormElements/MobileCalendar/MobileCalendar.jsx +1 -507
  4. package/dist/Atomic/FormElements/MultiSelect/MultiSelect.jsx +1 -46
  5. package/dist/Atomic/FormElements/NumericInput/NumericInput.jsx +1 -337
  6. package/dist/Atomic/FormElements/RadioGroup/RadioGroup.jsx +1 -66
  7. package/dist/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.jsx +1 -78
  8. package/dist/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.jsx +1 -54
  9. package/dist/Atomic/FormElements/RangeCalendar/RangeCalendar.jsx +1 -183
  10. package/dist/Atomic/FormElements/RangeList/RangeList.jsx +1 -181
  11. package/dist/Atomic/FormElements/RangeList/partial/RangeListRow.jsx +1 -41
  12. package/dist/Atomic/FormElements/RangeSlider/RangeSlider.jsx +1 -449
  13. package/dist/Atomic/FormElements/RangeSlider2/RangeSlider2.jsx +1 -865
  14. package/dist/Atomic/FormElements/SwitchableRow/SwitchableRow.jsx +1 -37
  15. package/dist/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.jsx +1 -48
  16. package/dist/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.jsx +1 -62
  17. package/dist/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.jsx +1 -175
  18. package/dist/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.jsx +1 -65
  19. package/dist/Atomic/FormElements/TagListToDropdown/TagListToDropdown.jsx +1 -118
  20. package/dist/Atomic/FormElements/Text/Text.jsx +1 -126
  21. package/dist/Atomic/FormElements/Textarea/Textarea.jsx +1 -61
  22. package/dist/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.jsx +1 -181
  23. package/dist/Atomic/FormElements/TieredCheckboxes/partial/AccordionWithCheckbox.jsx +1 -60
  24. package/dist/Atomic/FormElements/VariantsListRadio/VariantsListRadio.jsx +1 -83
  25. package/dist/Atomic/FormElements/VariantsListRadio/partials/VariantsListRadioItem.jsx +1 -80
  26. package/dist/Atomic/FormElements/WidgetPseudoTable/WidgetPseudoTable.jsx +1 -103
  27. package/dist/Atomic/FormElements/WidgetWithSwitchableRows/WidgetWithSwitchableRows.jsx +1 -115
  28. package/dist/Atomic/Layout/Header/Header.jsx +1 -86
  29. package/dist/Atomic/Layout/MainMenu/MainMenu.jsx +1 -164
  30. package/dist/Atomic/UI/AccordionTable/AccordionTable.jsx +1 -250
  31. package/dist/Atomic/UI/AccordionText/AccordionText.jsx +1 -68
  32. package/dist/Atomic/UI/Arrow/Arrow.jsx +1 -134
  33. package/dist/Atomic/UI/Box/Box.jsx +1 -53
  34. package/dist/Atomic/UI/Chart/Chart.jsx +1 -178
  35. package/dist/Atomic/UI/Chart/partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon.jsx +1 -78
  36. package/dist/Atomic/UI/Chart/partial/optionsConstructor.jsx +1 -334
  37. package/dist/Atomic/UI/CircleProgressBar/CircleProgressBar.jsx +1 -111
  38. package/dist/Atomic/UI/DateTime/DateTime.jsx +1 -57
  39. package/dist/Atomic/UI/DebugContainer/DebugContainer.jsx +1 -44
  40. package/dist/Atomic/UI/DebugContainer/useDebugContainer.jsx +1 -15
  41. package/dist/Atomic/UI/ExampleChartIntegration/ExampleChartIntegration.jsx +1 -223
  42. package/dist/Atomic/UI/MonoAccordion/MonoAccordion._test.jsx +1 -75
  43. package/dist/Atomic/UI/MonoAccordion/MonoAccordion.jsx +1 -86
  44. package/dist/Atomic/UI/PieChart/PieChart.jsx +1 -41
  45. package/dist/Atomic/UI/Table/Partials/TdCell.jsx +1 -87
  46. package/dist/Atomic/UI/Table/Partials/TdHeader.jsx +1 -36
  47. package/dist/Atomic/UI/Table/Partials/TdRow.jsx +1 -103
  48. package/dist/Atomic/UI/Table/Partials/TdTitle.jsx +1 -55
  49. package/dist/Atomic/UI/Table/Table.jsx +1 -63
  50. package/dist/Atomic/UI/Table/TdTypes/TdActions.jsx +1 -80
  51. package/dist/Atomic/UI/Table/TdTypes/TdPriority.jsx +1 -26
  52. package/dist/Atomic/UI/Table/TdTypes/TdRange.jsx +1 -13
  53. package/dist/Atomic/UI/Table/TdTypes/TdWeight.jsx +1 -56
  54. package/dist/Atomic/UI/TagList/TagList.jsx +1 -256
  55. package/dist/Atomic/UI/WizardStepper/constructor.jsx +1 -86
  56. package/dist/Classes/RESTAPI/partials/CredentialsProcessing.jsx +1 -254
  57. package/dist/Functions/customEventListener.jsx +1 -96
  58. package/dist/Functions/operations.jsx +1 -138
  59. package/dist/Functions/useFormTools/functions/RenderFields.jsx +1 -108
  60. package/dist/Functions/useFormTools/index.jsx +1 -777
  61. package/dist/Functions/usePasswordChecker.jsx +1 -128
  62. package/dist/Functions/utils.jsx +1 -492
  63. package/dist/Molecular/CustomIcons/components/AffiliateNetworks.jsx +1 -22
  64. package/dist/Molecular/CustomIcons/components/AlertCircle.jsx +1 -24
  65. package/dist/Molecular/CustomIcons/components/AppStore.jsx +1 -30
  66. package/dist/Molecular/CustomIcons/components/Arrow.jsx +1 -33
  67. package/dist/Molecular/CustomIcons/components/ArrowDown.jsx +1 -18
  68. package/dist/Molecular/CustomIcons/components/ArrowLeft.jsx +1 -23
  69. package/dist/Molecular/CustomIcons/components/ArrowRight.jsx +1 -23
  70. package/dist/Molecular/CustomIcons/components/ArrowUp.jsx +1 -18
  71. package/dist/Molecular/CustomIcons/components/Bell.jsx +1 -16
  72. package/dist/Molecular/CustomIcons/components/Button.jsx +1 -13
  73. package/dist/Molecular/CustomIcons/components/Campaigns.jsx +1 -17
  74. package/dist/Molecular/CustomIcons/components/Check.jsx +1 -15
  75. package/dist/Molecular/CustomIcons/components/Check2.jsx +1 -13
  76. package/dist/Molecular/CustomIcons/components/ChevronDown.jsx +1 -13
  77. package/dist/Molecular/CustomIcons/components/ChevronDownDisabled.jsx +1 -12
  78. package/dist/Molecular/CustomIcons/components/ChevronLeft.jsx +1 -12
  79. package/dist/Molecular/CustomIcons/components/ChevronRight.jsx +1 -12
  80. package/dist/Molecular/CustomIcons/components/ChevronUp.jsx +1 -12
  81. package/dist/Molecular/CustomIcons/components/ChevronUpDown.jsx +1 -28
  82. package/dist/Molecular/CustomIcons/components/Close.jsx +1 -15
  83. package/dist/Molecular/CustomIcons/components/ColumnsOrder.jsx +1 -18
  84. package/dist/Molecular/CustomIcons/components/Delete.jsx +1 -17
  85. package/dist/Molecular/CustomIcons/components/Edit.jsx +1 -16
  86. package/dist/Molecular/CustomIcons/components/Email.jsx +1 -32
  87. package/dist/Molecular/CustomIcons/components/FinturfLogo.jsx +1 -19
  88. package/dist/Molecular/CustomIcons/components/FinturfLogo2.jsx +1 -36
  89. package/dist/Molecular/CustomIcons/components/Flows.jsx +1 -16
  90. package/dist/Molecular/CustomIcons/components/Gift.jsx +1 -26
  91. package/dist/Molecular/CustomIcons/components/GoogleAuth.jsx +1 -30
  92. package/dist/Molecular/CustomIcons/components/GooglePlay.jsx +1 -30
  93. package/dist/Molecular/CustomIcons/components/HelpCircle.jsx +1 -20
  94. package/dist/Molecular/CustomIcons/components/HelpCircle2.jsx +1 -21
  95. package/dist/Molecular/CustomIcons/components/HelpCircleFilled.jsx +1 -20
  96. package/dist/Molecular/CustomIcons/components/Home.jsx +1 -17
  97. package/dist/Molecular/CustomIcons/components/Home2.jsx +1 -23
  98. package/dist/Molecular/CustomIcons/components/Key.jsx +1 -24
  99. package/dist/Molecular/CustomIcons/components/Landers.jsx +1 -21
  100. package/dist/Molecular/CustomIcons/components/Lock.jsx +1 -16
  101. package/dist/Molecular/CustomIcons/components/Mail.jsx +1 -27
  102. package/dist/Molecular/CustomIcons/components/Mastercard.jsx +1 -74
  103. package/dist/Molecular/CustomIcons/components/Minus.jsx +1 -26
  104. package/dist/Molecular/CustomIcons/components/Offers.jsx +1 -17
  105. package/dist/Molecular/CustomIcons/components/Pause.jsx +1 -29
  106. package/dist/Molecular/CustomIcons/components/PayPal.jsx +1 -42
  107. package/dist/Molecular/CustomIcons/components/PayPalLightLarge.jsx +1 -29
  108. package/dist/Molecular/CustomIcons/components/Phone.jsx +1 -31
  109. package/dist/Molecular/CustomIcons/components/Play.jsx +1 -26
  110. package/dist/Molecular/CustomIcons/components/Plus.jsx +1 -26
  111. package/dist/Molecular/CustomIcons/components/Profile.jsx +1 -17
  112. package/dist/Molecular/CustomIcons/components/QRCode.jsx +1 -30
  113. package/dist/Molecular/CustomIcons/components/Rectangle.jsx +1 -13
  114. package/dist/Molecular/CustomIcons/components/Revert.jsx +1 -14
  115. package/dist/Molecular/CustomIcons/components/Star.jsx +1 -15
  116. package/dist/Molecular/CustomIcons/components/Star2.jsx +1 -17
  117. package/dist/Molecular/CustomIcons/components/TrafficSources.jsx +1 -15
  118. package/dist/Molecular/CustomIcons/components/Trash.jsx +1 -16
  119. package/dist/Molecular/CustomIcons/components/TrashRed.jsx +1 -16
  120. package/dist/Molecular/CustomIcons/components/Triggers.jsx +1 -16
  121. package/dist/Molecular/CustomIcons/components/User.jsx +1 -26
  122. package/dist/Molecular/CustomIcons/components/Visa.jsx +1 -32
  123. package/dist/Molecular/CustomIcons/components/X.jsx +1 -13
  124. package/dist/Molecular/FormElement/FormElement.jsx +1 -52
  125. package/dist/Molecular/FormWithDependOn/FormWithDependOn.jsx +1 -161
  126. package/dist/Molecular/InputAddress/InputAddress.jsx +1 -641
  127. package/dist/Molecular/InputPassword/InputPassword.jsx +1 -50
  128. package/package.json +1 -1
  129. package/dist/Atomic/FormElements/RangeInputs/RangeInputs.d.ts +0 -5
  130. package/dist/Atomic/FormElements/RangeInputs/RangeInputs.js.map +0 -1
  131. /package/dist/Atomic/FormElements/ActionAlert/{ActionAlert.js → ActionAlert.jsx} +0 -0
  132. /package/dist/Atomic/FormElements/AdvancedStatus/{AdvancedStatus.js → AdvancedStatus.jsx} +0 -0
  133. /package/dist/Atomic/FormElements/Calendar/{Calendar.js → Calendar.jsx} +0 -0
  134. /package/dist/Atomic/FormElements/Calendar/{Calendar.props.js → Calendar.props.jsx} +0 -0
  135. /package/dist/Atomic/FormElements/CheckboxInput/{CheckboxInput.js → CheckboxInput.jsx} +0 -0
  136. /package/dist/Atomic/FormElements/CheckboxesLine/{CheckboxesLine.js → CheckboxesLine.jsx} +0 -0
  137. /package/dist/Atomic/FormElements/Datepicker/{Datepicker.js → Datepicker.jsx} +0 -0
  138. /package/dist/Atomic/FormElements/Datepicker/{Datepicker.props.js → Datepicker.props.jsx} +0 -0
  139. /package/dist/Atomic/FormElements/Datepicker/components/{DatepickerCalendar.js → DatepickerCalendar.jsx} +0 -0
  140. /package/dist/Atomic/FormElements/Datepicker/components/{DatepickerCalendar.props.js → DatepickerCalendar.props.jsx} +0 -0
  141. /package/dist/Atomic/FormElements/Dropdown/{Dropdown.js → Dropdown.jsx} +0 -0
  142. /package/dist/Atomic/FormElements/DropdownLiveSearch/{DropdownLiveSearch.js → DropdownLiveSearch.jsx} +0 -0
  143. /package/dist/Atomic/FormElements/FileLoader/{FileLoader.js → FileLoader.jsx} +0 -0
  144. /package/dist/Atomic/FormElements/FileLoader/partial/{LoadZone.js → LoadZone.jsx} +0 -0
  145. /package/dist/Atomic/FormElements/FileLoader/partial/{LoadedContent.js → LoadedContent.jsx} +0 -0
  146. /package/dist/Atomic/FormElements/FileLoaderDescription/{FileLoaderDescription.js → FileLoaderDescription.jsx} +0 -0
  147. /package/dist/Atomic/FormElements/FileLoaderLocal/{FileLoaderLocal.js → FileLoaderLocal.jsx} +0 -0
  148. /package/dist/Atomic/FormElements/FileLoaderLocalGroup/{FileLoaderLocalGroup.js → FileLoaderLocalGroup.jsx} +0 -0
  149. /package/dist/Atomic/FormElements/FormattedRawSSN/{FormattedRawSSN.js → FormattedRawSSN.jsx} +0 -0
  150. /package/dist/Atomic/FormElements/Input/{Input.js → Input.jsx} +0 -0
  151. /package/dist/Atomic/FormElements/Input/hooks/{useErrorBlink.js → useErrorBlink.jsx} +0 -0
  152. /package/dist/Atomic/FormElements/Input/hooks/{useInputFocus.js → useInputFocus.jsx} +0 -0
  153. /package/dist/Atomic/FormElements/Input/hooks/{useInputHover.js → useInputHover.jsx} +0 -0
  154. /package/dist/Atomic/FormElements/Input/hooks/{useInputValueProcessing.js → useInputValueProcessing.jsx} +0 -0
  155. /package/dist/Atomic/FormElements/Input/hooks/{useKeyboardHandling.js → useKeyboardHandling.jsx} +0 -0
  156. /package/dist/Atomic/FormElements/Input/lib/{autocomplete.js → autocomplete.jsx} +0 -0
  157. /package/dist/Atomic/FormElements/Input/{types.js → types.jsx} +0 -0
  158. /package/dist/Atomic/FormElements/InputCalendar/{InputCalendar.js → InputCalendar.jsx} +0 -0
  159. /package/dist/Atomic/FormElements/InputColor/{InputColor.js → InputColor.jsx} +0 -0
  160. /package/dist/Atomic/FormElements/InputCurrency/{InputCurrency.js → InputCurrency.jsx} +0 -0
  161. /package/dist/Atomic/FormElements/InputDateRange/{InputDateRange.js → InputDateRange.jsx} +0 -0
  162. /package/dist/Atomic/FormElements/InputDateRange/components/{DateInput.js → DateInput.jsx} +0 -0
  163. /package/dist/Atomic/FormElements/InputDateRange/components/{Datepicker.js → Datepicker.jsx} +0 -0
  164. /package/dist/Atomic/FormElements/InputDateRange/components/{OpenedPart.js → OpenedPart.jsx} +0 -0
  165. /package/dist/Atomic/FormElements/InputDateRange/components/{SelectItem.js → SelectItem.jsx} +0 -0
  166. /package/dist/Atomic/FormElements/InputDateRange/{dependencies.js → dependencies.jsx} +0 -0
  167. /package/dist/Atomic/FormElements/InputLink/{InputLink.js → InputLink.jsx} +0 -0
  168. /package/dist/Atomic/FormElements/InputMask/{InputMask.js → InputMask.jsx} +0 -0
  169. /package/dist/Atomic/FormElements/InputMask3/{InputMask3.js → InputMask3.jsx} +0 -0
  170. /package/dist/Atomic/FormElements/InputMask3/{config.js → config.jsx} +0 -0
  171. /package/dist/Atomic/FormElements/InputMask3/{functions.js → functions.jsx} +0 -0
  172. /package/dist/Atomic/FormElements/InputWithAction/{InputWithAction.js → InputWithAction.jsx} +0 -0
  173. /package/dist/Atomic/FormElements/InputsRow/{InputsRow.js → InputsRow.jsx} +0 -0
  174. /package/dist/Atomic/FormElements/Label/{Label.js → Label.jsx} +0 -0
  175. /package/dist/Atomic/FormElements/RadioInput/{RadioInput.js → RadioInput.jsx} +0 -0
  176. /package/dist/Atomic/FormElements/RangeInputs/{RangeInputs.js → RangeInputs.jsx} +0 -0
  177. /package/dist/Atomic/FormElements/Switcher/{Switcher.js → Switcher.jsx} +0 -0
  178. /package/dist/Atomic/FormElements/SwitcherHide/{SwitcherHide.js → SwitcherHide.jsx} +0 -0
  179. /package/dist/Atomic/FormElements/SwitcherRadio/{SwitcherRadio.js → SwitcherRadio.jsx} +0 -0
  180. /package/dist/Atomic/FormElements/SwitcherRange/{SwitcherRange.js → SwitcherRange.jsx} +0 -0
  181. /package/dist/Atomic/FormElements/TagsDropdown/{TagsDropdown.js → TagsDropdown.jsx} +0 -0
  182. /package/dist/Atomic/FormElements/TextSwitcher/{TextSwitcher.js → TextSwitcher.jsx} +0 -0
  183. /package/dist/Atomic/FormElements/TimeRange/{TimeRange.js → TimeRange.jsx} +0 -0
  184. /package/dist/Atomic/FormElements/UserContacts/{UserContacts.js → UserContacts.jsx} +0 -0
  185. /package/dist/Atomic/Layout/Spinner/{Spinner.js → Spinner.jsx} +0 -0
  186. /package/dist/Atomic/UI/Accordion/{Accordion.js → Accordion.jsx} +0 -0
  187. /package/dist/Atomic/UI/Accordion/{AccordionItem.js → AccordionItem.jsx} +0 -0
  188. /package/dist/Atomic/UI/AdvancedTag/{AdvTag.js → AdvTag.jsx} +0 -0
  189. /package/dist/Atomic/UI/AdvancedTag/{AdvancedTags.js → AdvancedTags.jsx} +0 -0
  190. /package/dist/Atomic/UI/Alert/{Alert.js → Alert.jsx} +0 -0
  191. /package/dist/Atomic/UI/Button/{Button.js → Button.jsx} +0 -0
  192. /package/dist/Atomic/UI/ButtonsBar/{ButtonsBar.js → ButtonsBar.jsx} +0 -0
  193. /package/dist/Atomic/UI/DoubleString/{DoubleString.js → DoubleString.jsx} +0 -0
  194. /package/dist/Atomic/UI/DynamicIcon/{DynamicIcon.js → DynamicIcon.jsx} +0 -0
  195. /package/dist/Atomic/UI/Hint/{Hint.js → Hint.jsx} +0 -0
  196. /package/dist/Atomic/UI/Hint/partials/{_constants.js → _constants.jsx} +0 -0
  197. /package/dist/Atomic/UI/Hint/partials/{_utils.js → _utils.jsx} +0 -0
  198. /package/dist/Atomic/UI/Modal/{Modal.js → Modal.jsx} +0 -0
  199. /package/dist/Atomic/UI/Modal/{ModalHOC.js → ModalHOC.jsx} +0 -0
  200. /package/dist/Atomic/UI/Modal/partials/{ModalFooter.js → ModalFooter.jsx} +0 -0
  201. /package/dist/Atomic/UI/Modal/partials/{ModalTitle.js → ModalTitle.jsx} +0 -0
  202. /package/dist/Atomic/UI/Modal/partials/{_constants.js → _constants.jsx} +0 -0
  203. /package/dist/Atomic/UI/Modal/partials/{_utils.js → _utils.jsx} +0 -0
  204. /package/dist/Atomic/UI/Modal/partials/{useMobileModal.js → useMobileModal.jsx} +0 -0
  205. /package/dist/Atomic/UI/NavLine/{NavLine.js → NavLine.jsx} +0 -0
  206. /package/dist/Atomic/UI/PageTitle/{PageTitle.js → PageTitle.jsx} +0 -0
  207. /package/dist/Atomic/UI/Price/{Price.js → Price.jsx} +0 -0
  208. /package/dist/Atomic/UI/PriceRange/{PriceRange.js → PriceRange.jsx} +0 -0
  209. /package/dist/Atomic/UI/ProgressLine/{ProgressLine.js → ProgressLine.jsx} +0 -0
  210. /package/dist/Atomic/UI/Status/{Status.js → Status.jsx} +0 -0
  211. /package/dist/Atomic/UI/Tag/{Tag.js → Tag.jsx} +0 -0
  212. /package/dist/Atomic/UI/UserBox/{UserBox.js → UserBox.jsx} +0 -0
  213. /package/dist/Atomic/UI/WizardStepper/ui/StateIcon/{StateIcon.js → StateIcon.jsx} +0 -0
  214. /package/dist/Atomic/UI/WizardStepper/ui/StepRow/{StepRow.js → StepRow.jsx} +0 -0
  215. /package/dist/Atomic/UI/WizardStepper/ui/StepWrapper/{StepWrapper.js → StepWrapper.jsx} +0 -0
  216. /package/dist/Atomic/UI/WizardStepper/ui/{icons.js → icons.jsx} +0 -0
  217. /package/dist/Functions/guards/{assertions.js → assertions.jsx} +0 -0
  218. /package/dist/Functions/guards/{safeValue.js → safeValue.jsx} +0 -0
  219. /package/dist/Functions/guards/{typeGuards.js → typeGuards.jsx} +0 -0
  220. /package/dist/Functions/useIsMobile/{useIsMobile.js → useIsMobile.jsx} +0 -0
  221. /package/dist/Functions/useKeyPress/{useHandleKeyPress.js → useHandleKeyPress.jsx} +0 -0
  222. /package/dist/Functions/useKeyPress/{useKeyPress.js → useKeyPress.jsx} +0 -0
  223. /package/dist/Functions/utils/{disableDefaultBehavior.js → disableDefaultBehavior.jsx} +0 -0
  224. /package/dist/Functions/utils/{getLimitedMask.js → getLimitedMask.jsx} +0 -0
  225. /package/dist/types/declaration/TWithEventManagementAsObj/innerTypes/{Modal.js → Modal.jsx} +0 -0
@@ -1,777 +1 @@
1
- import { createRef, useEffect, useState } from 'react';
2
-
3
- import ArrayWithObjects from './form-drivers/ArrayWithObjects';
4
- import ObjectWithIterableObjects from './form-drivers/ObjectWithIterableObjects';
5
- import ObjectWithNamedKeyObjects from './form-drivers/ObjectWithNamedKeyObjects';
6
- import General from './functions/General';
7
- import RenderFields from './functions/RenderFields';
8
-
9
- const DefaultFocusControllerProps = {
10
- setAutoFocus: true,
11
- onlyEmptyFieldAutoFocus: false,
12
- };
13
-
14
- export default function useFormTools({
15
- form,
16
- setForm,
17
- FormType,
18
- FormFields,
19
- FormDataDriverName = 'ArrayWithObjects'
20
- || 'ObjectWithIterableObjects'
21
- || 'ObjectWithNamedKeyObjects',
22
- FormDataDriver = null,
23
- FocusControllerProps = DefaultFocusControllerProps,
24
- goToNextFieldOnEnterPressed = true,
25
- } = {}) {
26
- FocusControllerProps = {
27
- ...DefaultFocusControllerProps,
28
- ...FocusControllerProps,
29
- };
30
-
31
- const FormDataDrivers = {
32
- ArrayWithObjects: {
33
- handlers: ArrayWithObjects,
34
- default: true,
35
- },
36
- ObjectWithIterableObjects: {
37
- handlers: ObjectWithIterableObjects,
38
- },
39
- ObjectWithNamedKeyObjects: {
40
- handlers: ObjectWithNamedKeyObjects,
41
- },
42
- };
43
-
44
- const getFormDataDriver = (name) => {
45
- return (
46
- FormDataDriver
47
- || FormDataDrivers[name]?.handlers
48
- || Object.values(FormDataDrivers).find(df => df.default === true)?.handlers
49
- || (() => ({}))
50
- );
51
- };
52
- const getFormDataDriverInstance = (name, ...args) => {
53
- return getFormDataDriver(name)(...args);
54
- };
55
-
56
- const { getFieldClassName, updateFormField } = General();
57
-
58
- const {
59
- getFieldData,
60
- getFormField,
61
- setFormFields,
62
- setFormField,
63
- getFormFieldsAsArray,
64
- getFormFieldsKeys,
65
- removeAllFormFields,
66
- removeFormField,
67
- removeFormFields,
68
- } = getFormDataDriverInstance(FormDataDriverName, {
69
- form,
70
- setForm,
71
- FormFields,
72
- });
73
-
74
- ///////////////////////////////////////////////////////////////
75
- // --- OnChange Observer ---//--- START ---//
76
- const [onChangeObservers, setOnChangeObservers] = useState({});
77
- const addOnChangeObserver = (key, cb) => {
78
- let observerId = null;
79
-
80
- setOnChangeObservers((state) => {
81
- // Set Default Value
82
- if (!state[key]) state[key] = {};
83
-
84
- observerId = state[key].length;
85
-
86
- state[key][observerId] = cb;
87
-
88
- return state;
89
- });
90
-
91
- return observerId;
92
- };
93
- const removeOnChangeObserver = (key, id) => {
94
- setOnChangeObservers((state) => {
95
- // Set Default Value
96
- if (!state[key]) return state;
97
-
98
- state[key] = Object.keys(state)
99
- .filter(cbId => cbId !== id)
100
- .map(cbId => state[key][cbId]);
101
-
102
- return state;
103
- });
104
- };
105
- const onChangeObserver = (key, value) => {
106
- if (!onChangeObservers[key] || typeof onChangeObservers[key] !== 'object')
107
- return;
108
-
109
- const Observers = onChangeObservers[key];
110
-
111
- Object.values(Observers).map((cb) => {
112
- cb({ value, form });
113
- return null;
114
- });
115
- };
116
- const onFieldChange = (key, value) => {
117
- if (value === getFormField(key)?.value) return false;
118
-
119
- onChangeObserver(key, value);
120
- setFormField(
121
- field => ({
122
- ...field,
123
- error: '',
124
- value,
125
- }),
126
- key,
127
- );
128
- };
129
- // --- OnChange Observer ---//--- END ---//
130
-
131
- ///////////////////////////////////////////////////////////////
132
- ///////////////////////////////////////////////////////////////
133
-
134
- // --- Form Submit Blocker ---//--- START ---//
135
- const [formSubmitBlockers, setFormSubmitBlockers] = useState([]);
136
- const toggleFormSubmitBlock = (key, value) => {
137
- setFormSubmitBlockers(state =>
138
- state.includes(key) || !value
139
- ? [...state.filter(k => k !== key)]
140
- : [...state, key],
141
- );
142
- };
143
- const clearFormSubmitBlockers = () => setFormSubmitBlockers([]);
144
- // --- Form Submit Blocker ---//--- END ---//
145
-
146
- ///////////////////////////////////////////////////////////////
147
- ///////////////////////////////////////////////////////////////
148
-
149
- // --- Property Observer Blocker ---//--- START ---//
150
- // const [propertyObservers, setPropertyObservers] = useState({});
151
- // function addPropertyObserver () {
152
- // };
153
- // --- Property Observer Blocker ---//--- END ---//
154
-
155
- ///////////////////////////////////////////////////////////////
156
- ///////////////////////////////////////////////////////////////
157
-
158
- // --- Render Fields Controller ---//--- START ---//
159
- const [isFormFieldsAdded, setIsFormFieldsAdded] = useState(false);
160
- const [renderFormFields, setRenderFormFieldsState] = useState([]);
161
- const setRenderFormFields = (data) => {
162
- setIsFormFieldsAdded(true);
163
- // eslint-disable-next-line no-use-before-define
164
- removeRenderFields(renderFormFields);
165
- // eslint-disable-next-line no-use-before-define
166
- resetIsInitFocused();
167
- setRenderFormFieldsState(data);
168
- };
169
- const addRenderFields = (fields) => {
170
- setRenderFormFieldsState(state => [...state, ...fields]);
171
- };
172
- const removeRenderFields = (fields) => {
173
- setRenderFormFieldsState(state =>
174
- state.filter(field => !fields.includes(field)),
175
- );
176
- };
177
-
178
- const [isFormRendered, setIsFormRendered] = useState(false);
179
- const submitIsFormRendered = () => setIsFormRendered(true);
180
- const resetIsFormRendered = () => setIsFormRendered(false);
181
-
182
- const onEnterDown = async (e) => {
183
- if (!goToNextFieldOnEnterPressed) return false;
184
-
185
- const focusable = document.querySelectorAll(
186
- 'a, button, input, [tabindex]:not([tabindex="-1"])',
187
- );
188
- const currentIndex = await new Promise((resolve) => {
189
- focusable.forEach((node, i) => {
190
- if (node === e.target) resolve(i);
191
- });
192
- });
193
-
194
- if (!currentIndex) return false;
195
-
196
- const nextIndex = currentIndex + 1;
197
-
198
- if (nextIndex >= focusable.length) return false;
199
-
200
- const nextItem = focusable[nextIndex];
201
-
202
- nextItem.focus();
203
- };
204
-
205
- const onKeyDown = (...args) => {
206
- const event = args.reduce((e, item) => {
207
- if (item?.nativeEvent instanceof KeyboardEvent) return item;
208
- return e;
209
- }, null);
210
-
211
- if (!event) return false;
212
-
213
- const { keyCode } = event;
214
-
215
- switch (keyCode) {
216
- // OnEnterDown
217
- case 13:
218
- onEnterDown(event);
219
- break;
220
-
221
- default:
222
- break;
223
- }
224
- };
225
-
226
- // On Type Change
227
- useEffect(() => {
228
- resetIsFormRendered();
229
- }, [FormType]);
230
-
231
- // On Render Fields Change
232
- useEffect(() => {
233
- if (isFormFieldsAdded) resetIsFormRendered(false);
234
-
235
- // Add Form Fields
236
- if (renderFormFields.length !== 0) {
237
- setFormFields((fields) => {
238
- return renderFormFields.reduce((result, key) => {
239
- const fieldData = getFieldData(key);
240
- const field = getFormField(key) ? getFormField(key) : fieldData;
241
-
242
- if (
243
- !field?.className
244
- || field?.className?.indexOf(getFieldClassName(key, FormType)) === -1
245
- ) {
246
- field.className = `${field?.className} ${getFieldClassName(key, FormType)}`;
247
- }
248
-
249
- if (typeof fieldData?.label === 'object') {
250
- field.label = fieldData.label[FormType] || fieldData.label.default;
251
- }
252
-
253
- field.ref = createRef();
254
- field.wrapperRef = createRef();
255
-
256
- field.isValueChangedByUser = false;
257
-
258
- if (goToNextFieldOnEnterPressed) {
259
- const onKeyDownProp = field.onKeyDown || (() => {});
260
- field.onKeyDown = (...args) => {
261
- onKeyDown(...args);
262
- onKeyDownProp(...args);
263
- };
264
- }
265
-
266
- // Is Field Value Changed By USER
267
- // eslint-disable-next-line no-use-before-define
268
- addOnFieldRenderedObserver(
269
- key,
270
- () => {
271
- const element = getFormField(key)?.ref?.current?.querySelector(
272
- field?.focusSelector || 'input',
273
- );
274
- const handler = () =>
275
- setFormField({ isValueChangedByUser: true }, key);
276
-
277
- element?.addEventListener('paste', handler, { once: true });
278
- element?.addEventListener('keypress', handler, { once: true });
279
- },
280
- true,
281
- );
282
-
283
- return updateFormField(result, field, key);
284
- }, fields);
285
- });
286
- }
287
- }, [renderFormFields]);
288
-
289
- const [onFormRenderObservers, setOnFormRenderObservers] = useState([]);
290
- const addOnFormRenderObserver = (cb, { once = false } = {}) => {
291
- setOnFormRenderObservers(state => [
292
- ...state,
293
- { cb, once, isWorkedOut: false },
294
- ]);
295
- };
296
-
297
- const updateOnFormRenderObserver = (key, data) => {
298
- setOnFormRenderObservers((state) => {
299
- const copy = [...state];
300
- copy[key] = { ...state[key], ...data };
301
-
302
- return copy;
303
- });
304
- };
305
- const removeOnFormRenderObserver = (key) => {
306
- setOnFormRenderObservers(state =>
307
- state.slice().filter((v, i) => i !== key),
308
- );
309
- };
310
- const onFormRenderWorker = () => {
311
- onFormRenderObservers.map(
312
- ({ once, isWorkedOut, cb = () => {} } = {}, key) => {
313
- if (once && isWorkedOut) return null;
314
-
315
- cb(form);
316
- if (once) removeOnFormRenderObserver(key);
317
- else updateOnFormRenderObserver(key, { isWorkedOut: true });
318
- return null;
319
- },
320
- );
321
- };
322
-
323
- // On Form Rendered
324
- useEffect(() => {
325
- if (!isFormRendered && onFormRenderObservers.length) {
326
- const formFieldsKeys = getFormFieldsKeys(form);
327
- const isAllFieldsRendered = renderFormFields.reduce((result, key) => {
328
- if (!formFieldsKeys.includes(key)) result = false;
329
-
330
- return result;
331
- }, true);
332
-
333
- if (isAllFieldsRendered) {
334
- submitIsFormRendered(true);
335
- onFormRenderWorker();
336
- }
337
- }
338
- }, [form, renderFormFields, onFormRenderObservers]);
339
- // --- Render Fields Controller ---//--- END ---//
340
-
341
- ///////////////////////////////////////////////////////////////
342
- ///////////////////////////////////////////////////////////////
343
-
344
- // --- HIGHTLIGHT LABELS IF FIELD WITH ERROR ---//--- START ---//
345
- const hightliteErrorLabels = () => {
346
- const fields = getFormFieldsAsArray();
347
-
348
- const filtered = fields?.reduce((result, field) => {
349
- if (field?.errorLabelHightlite) {
350
- result.push({
351
- ...field,
352
- className: getFieldClassName(field?.key, FormType),
353
- });
354
- }
355
-
356
- return result;
357
- }, []);
358
-
359
- filtered?.map((field) => {
360
- const formField = document.querySelector(`.${field?.className}`);
361
-
362
- if (!formField) return null;
363
-
364
- formField.classList.remove('errorLabelHightlite');
365
-
366
- if (field?.error) {
367
- formField.classList.add('errorLabelHightlite');
368
- }
369
-
370
- return null;
371
- });
372
- };
373
- useEffect(() => {
374
- hightliteErrorLabels();
375
- }, [form]);
376
- // --- HIGHTLIGHT LABELS IF FIELD WITH ERROR ---//--- END ---//
377
-
378
- ///////////////////////////////////////////////////////////////
379
- ///////////////////////////////////////////////////////////////
380
-
381
- // --- Fields Focus Controller ---//--- START ---//
382
- const [isInitFocused, setIsInitFocused] = useState(false);
383
- const [autoFocusedField, setAutoFocusedField] = useState(null);
384
-
385
- const setFirstFieldInitFocused = () => setIsInitFocused(true);
386
- const resetIsInitFocused = () => setIsInitFocused(false);
387
-
388
- const toggleFieldFocus = (
389
- { key, cb = () => {}, form: argForm, field },
390
- action = 'focus',
391
- ) => {
392
- if (!key && !field) return null;
393
-
394
- if (!argForm) argForm = form;
395
-
396
- const formField = field || getFormField(key, argForm);
397
-
398
- if (!formField || !formField.ref) {
399
- return false;
400
- }
401
-
402
- if (
403
- action === 'focus'
404
- && FocusControllerProps.onlyEmptyFieldAutoFocus
405
- && Boolean(formField?.value)
406
- ) {
407
- return null;
408
- }
409
-
410
- setTimeout(() => {
411
- formField.ref.current
412
- ?.querySelector(formField?.focusSelector || 'input')
413
- ?.[action]();
414
- cb();
415
- }, 50);
416
- };
417
-
418
- const setFieldFocus = ({ key, cb = () => {}, form: argForm, field }) =>
419
- toggleFieldFocus({ key, cb, form: argForm, field }, 'focus');
420
- const setFieldBlur = ({ key, cb = () => {}, form: argForm, field }) =>
421
- toggleFieldFocus({ key, cb, form: argForm, field }, 'blur');
422
-
423
- const setFirstFieldFocus = () => {
424
- let field = null;
425
-
426
- for (let i = 0; i < renderFormFields.length && !field; ++i) {
427
- const key = renderFormFields[i];
428
- const tmpField = getFormField(key);
429
- if (tmpField && !tmpField?.disabled) field = tmpField;
430
- }
431
-
432
- if (!field) return false;
433
-
434
- if (FocusControllerProps.onlyEmptyFieldAutoFocus && Boolean(field?.value)) {
435
- setFirstFieldInitFocused();
436
- return false;
437
- }
438
-
439
- setAutoFocusedField(field.key);
440
-
441
- const callback = () => {
442
- setFormField({ value: field.value }, field.key);
443
- setFirstFieldInitFocused();
444
- };
445
-
446
- setTimeout(() => setFieldFocus({ key: field.key, cb: callback, form }), 50);
447
- };
448
-
449
- const [onFieldFocusCallbacks, setOnFieldFocusCallbacks] = useState({});
450
- const addOnFieldFocusCallback = (key, cb) => {
451
- setOnFieldFocusCallbacks((state) => {
452
- const stateCopy = { ...state };
453
-
454
- if (!state[key]) stateCopy[key] = [];
455
-
456
- stateCopy[key].push(cb);
457
-
458
- return stateCopy;
459
- });
460
- };
461
- const callOnFieldFocusCallbacks = (key) => {
462
- if (!Array.isArray(onFieldFocusCallbacks[key])) return null;
463
-
464
- onFieldFocusCallbacks[key]?.map(cb => cb());
465
- };
466
-
467
- const [focusOnRenderFields, setFocusOnRenderFields] = useState([]);
468
- const addFocusFieldOnRender = (key, cb) => {
469
- setFocusOnRenderFields(state => [...state, key]);
470
-
471
- if (cb) addOnFieldFocusCallback(key, cb);
472
- };
473
- const removeFocusFieldOnRender = (key) => {
474
- setFocusOnRenderFields(state => state.filter(field => field !== key));
475
- };
476
-
477
- useEffect(() => {
478
- if (
479
- FocusControllerProps.setAutoFocus
480
- && !isInitFocused
481
- && !autoFocusedField
482
- && isFormRendered
483
- ) {
484
- setFirstFieldFocus();
485
- }
486
-
487
- if (focusOnRenderFields.length) {
488
- getFormFieldsKeys(form)?.map((key) => {
489
- if (
490
- focusOnRenderFields.includes(key)
491
- && getFormField(key)?.value?.length === 0
492
- ) {
493
- const cb = () => {
494
- removeFocusFieldOnRender(key);
495
- callOnFieldFocusCallbacks(key);
496
- };
497
-
498
- setFieldFocus({ key, form, cb });
499
- }
500
- return null;
501
- });
502
- }
503
- }, [form, focusOnRenderFields, isInitFocused, isFormRendered]);
504
-
505
- useEffect(() => {
506
- setAutoFocusedField(null);
507
- }, [isInitFocused]);
508
-
509
- useEffect(() => {
510
- resetIsInitFocused();
511
- }, [FormType]);
512
-
513
- // Remove Focus From Autocomplete field !!! TODO
514
- // useEffect(() => {
515
- // if (!autoFocusedField) return null;
516
- // const field = getFormField(autoFocusedField);
517
-
518
- // if (field?.value !== '' && !field?.isValueChangedByUser) {
519
- // setFieldBlur({key: autoFocusedField, form});
520
- // }
521
- // }, [autoFocusedField, form]);
522
- // --- Fields Focus Controller ---//--- END ---//
523
-
524
- ///////////////////////////////////////////////////////////////
525
- ///////////////////////////////////////////////////////////////
526
-
527
- // --- OnFieldRendered Observer ---//--- START ---//
528
- const [onFieldRenderedObservers, setOnFieldRenderedObservers] = useState({});
529
- const [isFieldObserversReset, setIsFieldObserversReset] = useState(false);
530
-
531
- const resetOnFieldRenderObserversWorkedOut = () => {
532
- if (!isFieldObserversReset && renderFormFields.length) {
533
- renderFormFields.map((key) => {
534
- setFormField({ isOnRenderObserversWorkedOut: false }, key);
535
- return key;
536
- });
537
- setIsFieldObserversReset(true);
538
- }
539
- };
540
- const addOnFieldRenderedObserver = (key, cb, isOnceCallable = true) => {
541
- let observerId = null;
542
-
543
- setOnFieldRenderedObservers((state) => {
544
- // Set Default Value
545
- if (!state[key]) state[key] = {};
546
-
547
- observerId = Object.keys(state[key]).length || 0;
548
-
549
- state[key][observerId] = {
550
- f: cb,
551
- isOnceCallable,
552
- };
553
-
554
- return state;
555
- });
556
-
557
- return observerId;
558
- };
559
- const updateOnFieldRenderedObserver = (key, id, data) => {
560
- setOnFieldRenderedObservers((state) => {
561
- // Set Default Value
562
- if (!state[key]) return state;
563
-
564
- state[key][id] = {
565
- ...state[key][id],
566
- ...data,
567
- };
568
-
569
- return state;
570
- });
571
- };
572
- const removeOnFieldRenderedObserver = (key, id) => {
573
- setOnFieldRenderedObservers((state) => {
574
- // Set Default Value
575
- if (!state[key]) return state;
576
-
577
- state[key] = Object.keys(state)
578
- .filter(cbId => cbId !== id)
579
- .map(cbId => state[key][cbId]);
580
-
581
- return state;
582
- });
583
- };
584
- const onFieldRenderedObserver = (key, data) => {
585
- if (
586
- !onFieldRenderedObservers[key]
587
- || typeof onFieldRenderedObservers[key] !== 'object'
588
- ) {
589
- return;
590
- }
591
-
592
- const Observers = onFieldRenderedObservers[key];
593
- const FilteredObservers = Object.values(Observers).filter(
594
- observer => !observer?.isObserverWorkedOut,
595
- );
596
-
597
- if (FilteredObservers.length === 0) return null;
598
-
599
- setFormField({ isOnRenderObserversWorkedOut: true }, key);
600
-
601
- FilteredObservers.map(({ f, isOnceCallable }, id) => {
602
- f(data);
603
- if (isOnceCallable)
604
- updateOnFieldRenderedObserver(key, id, { isObserverWorkedOut: true });
605
- return null;
606
- });
607
- };
608
- const onRenderObserverWorker = () => {
609
- return getFormFieldsKeys(form)?.map((key) => {
610
- // OnFieldRendered
611
- const fieldData = getFormField(key);
612
- if (!fieldData?.isOnRenderObserversWorkedOut) {
613
- onFieldRenderedObserver(key, fieldData);
614
- return { key, isWorkedOut: true };
615
- }
616
-
617
- return { key, isWorkedOut: false };
618
- });
619
- };
620
-
621
- useEffect(() => {
622
- resetOnFieldRenderObserversWorkedOut();
623
- onRenderObserverWorker();
624
- }, [form]);
625
-
626
- useEffect(() => {
627
- setIsFieldObserversReset(false);
628
- }, [FormType]);
629
- // --- OnFieldRendered Observer ---//--- END ---//
630
-
631
- ///////////////////////////////////////////////////////////////
632
- ///////////////////////////////////////////////////////////////
633
-
634
- // Detect What Changed || TRY TO DO
635
- // const compare = async (prev, current) => {
636
- // if (!prev) return current;
637
-
638
- // return new Promise((resolve) => {
639
- // Object.keys(current).reduce((result, key, i, arr) => {
640
- // //If PROPERTY is NOT EXISTS BEFORE
641
- // if ([null, undefined].includes(prev[key])) {
642
- // result[key] = current[key];
643
- // }
644
- // //If PROPERTY is AN OBJECT
645
- // else if (typeof current[key] === 'object') {
646
- // //If PROPERTY is EXISTS BEFORE
647
- // const innerCompare = compare(prev[key], current[key]);
648
- // // //If SOMETHING CHANGED
649
- // if (innerCompare?.length) result[key] = innerCompare;
650
- // }
651
- // //If PROPERTY is AN SIMPLE VALUE and PROPERTY CHANGED
652
- // else if (prev[key] !== current[key]) {
653
- // result[key] = current[key];
654
- // }
655
-
656
- // if (i === arr.length-1) {
657
- // resolve(result);
658
- // }
659
-
660
- // return result;
661
- // }, {});
662
- // });
663
- // };
664
-
665
- ///////////////////////////////////////////////////////////////
666
- ///////////////////////////////////////////////////////////////
667
-
668
- // --- WindowScrollController ---//--- START ---//
669
- const scrollToField = ({ key = null, field = null, form: argForm }) => {
670
- if (!key && !field) return false;
671
- if (!argForm) argForm = form;
672
-
673
- if (!field) field = getFormField(key, argForm);
674
-
675
- const wrapperRef = field?.wrapperRef || field?.ref;
676
-
677
- const { top: topOffset } = wrapperRef?.current?.getBoundingClientRect();
678
- const scrollTop
679
- = Math.abs(Math.abs(topOffset) - Math.abs(window.scrollY)) - 16;
680
- window.scrollTo({ top: scrollTop });
681
- };
682
-
683
- // --- WindowScrollController ---//--- END ---//
684
-
685
- ///////////////////////////////////////////////////////////////
686
- ///////////////////////////////////////////////////////////////
687
-
688
- const addErrorsToForm = (errors, argForm = form) => {
689
- if (!argForm) argForm = form;
690
-
691
- setFormFields((fields) => {
692
- return errors.reduce(
693
- (fields, { message: error, propertyPath: errKey }) => {
694
- return updateFormField(fields, { error }, errKey);
695
- },
696
- fields,
697
- );
698
- });
699
- };
700
-
701
- return {
702
- FormDataDrivers,
703
-
704
- // OnChangeObserver
705
- addOnChangeObserver,
706
- removeOnChangeObserver,
707
- onChangeObservers,
708
-
709
- // OnChangeHandler
710
- onFieldChange,
711
-
712
- // Form Submit Blocker
713
- toggleFormSubmitBlock,
714
- clearFormSubmitBlockers,
715
- isFormSubmitBlocked: Boolean(formSubmitBlockers.length),
716
-
717
- // Property Observers
718
- // addPropertyObserver,
719
-
720
- // Render Fields
721
- renderFormFields,
722
- setRenderFormFields,
723
- addRenderFields,
724
- removeRenderFields,
725
-
726
- getFieldClassName,
727
-
728
- // Field Focus Controller
729
- isInitFocused,
730
- setFirstFieldInitFocused,
731
- resetIsInitFocused,
732
- setFieldFocus,
733
- setFieldBlur,
734
- setFirstFieldFocus,
735
- autoFocusedField,
736
-
737
- addFocusFieldOnRender,
738
- removeFocusFieldOnRender,
739
-
740
- // Field Render Controller
741
- addOnFieldRenderedObserver,
742
- removeOnFieldRenderedObserver,
743
- onFieldRenderedObservers,
744
-
745
- updateFormField,
746
- addOnFormRenderObserver,
747
- submitIsFormRendered,
748
- resetIsFormRendered,
749
- renderFields: ({
750
- form: argForm = form,
751
- fields: argFields = renderFormFields,
752
- cols: argCols = 1,
753
- RenderFieldComponent,
754
- }) =>
755
- RenderFields({
756
- form: argForm,
757
- fields: argFields,
758
- cols: argCols,
759
- RenderFieldComponent,
760
- onFieldChange,
761
- FormDataDriver: getFormDataDriver(FormDataDriverName),
762
- }),
763
-
764
- scrollToField,
765
-
766
- getFieldData,
767
- getFormField,
768
- setFormFields,
769
- setFormField: (data, key) => setFormField(data, key),
770
- getFormFieldsAsArray,
771
- getFormFieldsKeys,
772
- removeAllFormFields,
773
- removeFormField,
774
- removeFormFields,
775
- addErrorsToForm,
776
- };
777
- }
1
+ function e(e,r){(null==r||r>e.length)&&(r=e.length);for(var n=0,t=Array(r);n<r;n++)t[n]=e[n];return t}function r(e,r,n,t,o,u,i){try{var l=e[u](i),c=l.value}catch(e){n(e);return}l.done?r(c):Promise.resolve(c).then(t,o)}function n(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{},t=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),t.forEach(function(r){var t;t=n[r],r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t})}return e}function t(e,r){return r=null!=r?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):(function(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n.push.apply(n,t)}return n})(Object(r)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))}),e}function o(e,r){return function(e){if(Array.isArray(e))return e}(e)||function(e,r){var n,t,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var u=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(n=o.next()).done)&&(u.push(n.value),!r||u.length!==r);i=!0);}catch(e){l=!0,t=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw t}}return u}}(e,r)||l(e,r)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(r){return function(r){if(Array.isArray(r))return e(r)}(r)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(r)||l(r)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function l(r,n){if(r){if("string"==typeof r)return e(r,n);var t=Object.prototype.toString.call(r).slice(8,-1);if("Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t)return Array.from(t);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return e(r,n)}}import{createRef as c,useEffect as a,useState as f}from"react";import s from"./form-drivers/ArrayWithObjects";import d from"./form-drivers/ObjectWithIterableObjects";import v from"./form-drivers/ObjectWithNamedKeyObjects";import m from"./functions/General";import b from"./functions/RenderFields";var y={setAutoFocus:!0,onlyEmptyFieldAutoFocus:!1};export default function p(){var e,l,p=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},F=p.form,h=p.setForm,O=p.FormType,g=p.FormFields,j=p.FormDataDriverName,k=void 0===j?"ArrayWithObjects":j,w=p.FormDataDriver,A=void 0===w?null:w,S=p.FocusControllerProps,R=void 0===S?y:S,C=p.goToNextFieldOnEnterPressed,I=void 0===C||C,P=this;R=n({},y,R);var W={ArrayWithObjects:{handlers:s,default:!0},ObjectWithIterableObjects:{handlers:d},ObjectWithNamedKeyObjects:{handlers:v}},D=function(e){var r,n;return A||(null==(r=W[e])?void 0:r.handlers)||(null==(n=Object.values(W).find(function(e){return!0===e.default}))?void 0:n.handlers)||function(){return{}}},E=m(),N=E.getFieldClassName,x=E.updateFormField,T=function(e){for(var r=arguments.length,n=Array(r>1?r-1:0),t=1;t<r;t++)n[t-1]=arguments[t];return D(e).apply(P,u(n))}(k,{form:F,setForm:h,FormFields:g}),B=T.getFieldData,K=T.getFormField,L=T.setFormFields,q=T.setFormField,M=T.getFormFieldsAsArray,H=T.getFormFieldsKeys,U=T.removeAllFormFields,G=T.removeFormField,V=T.removeFormFields,Y=o(f({}),2),$=Y[0],z=Y[1],J=function(e,r){$[e]&&"object"===i($[e])&&Object.values($[e]).map(function(e){return e({value:r,form:F}),null})},Q=function(e,r){var o;if(r===(null==(o=K(e))?void 0:o.value))return!1;J(e,r),q(function(e){return t(n({},e),{error:"",value:r})},e)},X=o(f([]),2),Z=X[0],_=X[1],ee=o(f(!1),2),er=ee[0],en=ee[1],et=o(f([]),2),eo=et[0],eu=et[1],ei=function(e){eu(function(r){return r.filter(function(r){return!e.includes(r)})})},el=o(f(!1),2),ec=el[0],ea=el[1],ef=function(){return ea(!0)},es=function(){return ea(!1)},ed=(e=function(e){var r,n,t;return function(e,r){var n,t,o,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(c){var a=[l,c];if(n)throw TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(u=0)),u;)try{if(n=1,t&&(o=2&a[0]?t.return:a[0]?t.throw||((o=t.return)&&o.call(t),0):t.next)&&!(o=o.call(t,a[1])).done)return o;switch(t=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return u.label++,{value:a[1],done:!1};case 5:u.label++,t=a[1],a=[0];continue;case 7:a=u.ops.pop(),u.trys.pop();continue;default:if(!(o=(o=u.trys).length>0&&o[o.length-1])&&(6===a[0]||2===a[0])){u=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){u.label=a[1];break}if(6===a[0]&&u.label<o[1]){u.label=o[1],o=a;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(a);break}o[2]&&u.ops.pop(),u.trys.pop();continue}a=r.call(e,u)}catch(e){a=[6,e],t=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}}}(this,function(o){switch(o.label){case 0:if(!I)return[2,!1];return r=document.querySelectorAll('a, button, input, [tabindex]:not([tabindex="-1"])'),[4,new Promise(function(n){r.forEach(function(r,t){r===e.target&&n(t)})})];case 1:if(!(n=o.sent())||(t=n+1)>=r.length)return[2,!1];return r[t].focus(),[2]}})},l=function(){var n=this,t=arguments;return new Promise(function(o,u){var i=e.apply(n,t);function l(e){r(i,o,u,l,c,"next",e)}function c(e){r(i,o,u,l,c,"throw",e)}l(void 0)})},function(e){return l.apply(this,arguments)}),ev=function(){for(var e=arguments.length,r=Array(e),n=0;n<e;n++)r[n]=arguments[n];var t=r.reduce(function(e,r){var n,t;return(n=null==r?void 0:r.nativeEvent,null!=(t=KeyboardEvent)&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](n):n instanceof t)?r:e},null);if(!t)return!1;13===t.keyCode&&ed(t)};a(function(){es()},[O]),a(function(){er&&es(!1),0!==eo.length&&L(function(e){return eo.reduce(function(e,r){var n,t=B(r),o=K(r)?K(r):t;if((null==o?void 0:o.className)&&(null==o||null==(n=o.className)?void 0:n.indexOf(N(r,O)))!==-1||(o.className="".concat(null==o?void 0:o.className," ").concat(N(r,O))),"object"===i(null==t?void 0:t.label)&&(o.label=t.label[O]||t.label.default),o.ref=c(),o.wrapperRef=c(),o.isValueChangedByUser=!1,I){var l=o.onKeyDown||function(){};o.onKeyDown=function(){for(var e=arguments.length,r=Array(e),n=0;n<e;n++)r[n]=arguments[n];ev.apply(void 0,u(r)),l.apply(void 0,u(r))}}return ez(r,function(){var e,n,t,u=null==(t=K(r))||null==(n=t.ref)||null==(e=n.current)?void 0:e.querySelector((null==o?void 0:o.focusSelector)||"input"),i=function(){return q({isValueChangedByUser:!0},r)};null==u||u.addEventListener("paste",i,{once:!0}),null==u||u.addEventListener("keypress",i,{once:!0})},!0),x(e,o,r)},e)})},[eo]);var em=o(f([]),2),eb=em[0],ey=em[1],ep=function(e,r){ey(function(t){var o=u(t);return o[e]=n({},t[e],r),o})},eF=function(e){ey(function(r){return r.slice().filter(function(r,n){return n!==e})})},eh=function(){eb.map(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.once,n=e.isWorkedOut,t=e.cb,o=arguments.length>1?arguments[1]:void 0;return r&&n||((void 0===t?function(){}:t)(F),r?eF(o):ep(o,{isWorkedOut:!0})),null})};a(function(){if(!ec&&eb.length){var e=H(F);eo.reduce(function(r,n){return e.includes(n)||(r=!1),r},!0)&&(ef(!0),eh())}},[F,eo,eb]);var eO=function(){var e=M(),r=null==e?void 0:e.reduce(function(e,r){return(null==r?void 0:r.errorLabelHightlite)&&e.push(t(n({},r),{className:N(null==r?void 0:r.key,O)})),e},[]);null==r||r.map(function(e){var r=document.querySelector(".".concat(null==e?void 0:e.className));return r&&(r.classList.remove("errorLabelHightlite"),(null==e?void 0:e.error)&&r.classList.add("errorLabelHightlite")),null})};a(function(){eO()},[F]);var eg=o(f(!1),2),ej=eg[0],ek=eg[1],ew=o(f(null),2),eA=ew[0],eS=ew[1],eR=function(){return ek(!0)},eC=function(){return ek(!1)},eI=function(e){var r=e.key,n=e.cb,t=void 0===n?function(){}:n,o=e.form,u=e.field,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"focus";if(!r&&!u)return null;o||(o=F);var l=u||K(r,o);return!!l&&!!l.ref&&("focus"===i&&R.onlyEmptyFieldAutoFocus&&(null==l?void 0:l.value)?null:void setTimeout(function(){var e,r;null==(r=l.ref.current)||null==(e=r.querySelector((null==l?void 0:l.focusSelector)||"input"))||e[i](),t()},50))},eP=function(e){var r=e.key,n=e.cb;return eI({key:r,cb:void 0===n?function(){}:n,form:e.form,field:e.field},"focus")},eW=function(){for(var e=null,r=0;r<eo.length&&!e;++r){var n=K(eo[r]);!n||(null==n?void 0:n.disabled)||(e=n)}if(!e)return!1;if(R.onlyEmptyFieldAutoFocus&&(null==e?void 0:e.value))return eR(),!1;eS(e.key);var t=function(){q({value:e.value},e.key),eR()};setTimeout(function(){return eP({key:e.key,cb:t,form:F})},50)},eD=o(f({}),2),eE=eD[0],eN=eD[1],ex=function(e,r){eN(function(t){var o=n({},t);return t[e]||(o[e]=[]),o[e].push(r),o})},eT=function(e){var r;if(!Array.isArray(eE[e]))return null;null==(r=eE[e])||r.map(function(e){return e()})},eB=o(f([]),2),eK=eB[0],eL=eB[1],eq=function(e){eL(function(r){return r.filter(function(r){return r!==e})})};a(function(){if(R.setAutoFocus&&!ej&&!eA&&ec&&eW(),eK.length){var e;null==(e=H(F))||e.map(function(e){var r,n;return eK.includes(e)&&(null==(n=K(e))||null==(r=n.value)?void 0:r.length)===0&&eP({key:e,form:F,cb:function(){eq(e),eT(e)}}),null})}},[F,eK,ej,ec]),a(function(){eS(null)},[ej]),a(function(){eC()},[O]);var eM=o(f({}),2),eH=eM[0],eU=eM[1],eG=o(f(!1),2),eV=eG[0],eY=eG[1],e$=function(){!eV&&eo.length&&(eo.map(function(e){return q({isOnRenderObserversWorkedOut:!1},e),e}),eY(!0))},ez=function(e,r){var n=!(arguments.length>2)||void 0===arguments[2]||arguments[2],t=null;return eU(function(o){return o[e]||(o[e]={}),t=Object.keys(o[e]).length||0,o[e][t]={f:r,isOnceCallable:n},o}),t},eJ=function(e,r,t){eU(function(o){return o[e]&&(o[e][r]=n({},o[e][r],t)),o})},eQ=function(e,r){if(eH[e]&&"object"===i(eH[e])){var n=Object.values(eH[e]).filter(function(e){return!(null==e?void 0:e.isObserverWorkedOut)});if(0===n.length)return null;q({isOnRenderObserversWorkedOut:!0},e),n.map(function(n,t){var o=n.f,u=n.isOnceCallable;return o(r),u&&eJ(e,t,{isObserverWorkedOut:!0}),null})}},eX=function(){var e;return null==(e=H(F))?void 0:e.map(function(e){var r=K(e);return(null==r?void 0:r.isOnRenderObserversWorkedOut)?{key:e,isWorkedOut:!1}:(eQ(e,r),{key:e,isWorkedOut:!0})})};return a(function(){e$(),eX()},[F]),a(function(){eY(!1)},[O]),{FormDataDrivers:W,addOnChangeObserver:function(e,r){var n=null;return z(function(t){return t[e]||(t[e]={}),n=t[e].length,t[e][n]=r,t}),n},removeOnChangeObserver:function(e,r){z(function(n){return n[e]&&(n[e]=Object.keys(n).filter(function(e){return e!==r}).map(function(r){return n[e][r]})),n})},onChangeObservers:$,onFieldChange:Q,toggleFormSubmitBlock:function(e,r){_(function(n){return n.includes(e)||!r?u(n.filter(function(r){return r!==e})):u(n).concat([e])})},clearFormSubmitBlockers:function(){return _([])},isFormSubmitBlocked:!!Z.length,renderFormFields:eo,setRenderFormFields:function(e){en(!0),ei(eo),eC(),eu(e)},addRenderFields:function(e){eu(function(r){return u(r).concat(u(e))})},removeRenderFields:ei,getFieldClassName:N,isInitFocused:ej,setFirstFieldInitFocused:eR,resetIsInitFocused:eC,setFieldFocus:eP,setFieldBlur:function(e){var r=e.key,n=e.cb;return eI({key:r,cb:void 0===n?function(){}:n,form:e.form,field:e.field},"blur")},setFirstFieldFocus:eW,autoFocusedField:eA,addFocusFieldOnRender:function(e,r){eL(function(r){return u(r).concat([e])}),r&&ex(e,r)},removeFocusFieldOnRender:eq,addOnFieldRenderedObserver:ez,removeOnFieldRenderedObserver:function(e,r){eU(function(n){return n[e]&&(n[e]=Object.keys(n).filter(function(e){return e!==r}).map(function(r){return n[e][r]})),n})},onFieldRenderedObservers:eH,updateFormField:x,addOnFormRenderObserver:function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=r.once,t=void 0!==n&&n;ey(function(r){return u(r).concat([{cb:e,once:t,isWorkedOut:!1}])})},submitIsFormRendered:ef,resetIsFormRendered:es,renderFields:function(e){var r=e.form,n=void 0===r?F:r,t=e.fields,o=void 0===t?eo:t,u=e.cols;return b({form:n,fields:o,cols:void 0===u?1:u,RenderFieldComponent:e.RenderFieldComponent,onFieldChange:Q,FormDataDriver:D(k)})},scrollToField:function(e){var r,n=e.key,t=void 0===n?null:n,o=e.field,u=void 0===o?null:o,i=e.form;if(!t&&!u)return!1;i||(i=F),u||(u=K(t,i));var l=(null==u?void 0:u.wrapperRef)||(null==u?void 0:u.ref),c=Math.abs(Math.abs((null==l||null==(r=l.current)?void 0:r.getBoundingClientRect()).top)-Math.abs(window.scrollY))-16;window.scrollTo({top:c})},getFieldData:B,getFormField:K,setFormFields:L,setFormField:function(e,r){return q(e,r)},getFormFieldsAsArray:M,getFormFieldsKeys:H,removeAllFormFields:U,removeFormField:G,removeFormFields:V,addErrorsToForm:function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:F;r||(r=F),L(function(r){return e.reduce(function(e,r){return x(e,{error:r.message},r.propertyPath)},r)})}}}