intelicoreact 1.6.20 → 1.6.21

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