intelicoreact 1.6.25 → 1.6.26

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 (277) hide show
  1. package/dist/Atomic/FormElements/ActionAlert/ActionAlert.js +1 -98
  2. package/dist/Atomic/FormElements/AdvancedStatus/AdvancedStatus.js +1 -48
  3. package/dist/Atomic/FormElements/Calendar/Calendar.js +1 -249
  4. package/dist/Atomic/FormElements/Calendar/Calendar.props.js +1 -4
  5. package/dist/Atomic/FormElements/CheckboxInput/CheckboxInput.js +1 -65
  6. package/dist/Atomic/FormElements/CheckboxesLine/CheckboxesLine.js +1 -52
  7. package/dist/Atomic/FormElements/Datepicker/Datepicker.js +1 -424
  8. package/dist/Atomic/FormElements/Datepicker/Datepicker.props.js +1 -4
  9. package/dist/Atomic/FormElements/Datepicker/components/DatepickerCalendar.js +1 -173
  10. package/dist/Atomic/FormElements/Datepicker/components/DatepickerCalendar.props.js +1 -4
  11. package/dist/Atomic/FormElements/Dropdown/Dropdown.js +1 -735
  12. package/dist/Atomic/FormElements/Dropdown/components/DropdownLoader.js +1 -20
  13. package/dist/Atomic/FormElements/DropdownLiveSearch/DropdownLiveSearch.js +1 -529
  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 -200
  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.d.ts +2 -0
  29. package/dist/Atomic/FormElements/InputDateRange/components/Datepicker.js +1 -693
  30. package/dist/Atomic/FormElements/InputDateRange/components/Datepicker.js.map +1 -0
  31. package/dist/Atomic/FormElements/InputDateRange/components/OpenedPart.js +1 -254
  32. package/dist/Atomic/FormElements/InputDateRange/components/SelectItem.js +1 -32
  33. package/dist/Atomic/FormElements/InputDateRange/dependencies.js +1 -200
  34. package/dist/Atomic/FormElements/InputLink/InputLink.js +1 -99
  35. package/dist/Atomic/FormElements/InputMask/InputCarretPosition.js +1 -37
  36. package/dist/Atomic/FormElements/InputMask/InputMask.js +1 -1214
  37. package/dist/Atomic/FormElements/InputMask/config.js +1 -15
  38. package/dist/Atomic/FormElements/InputMask/functions.js +1 -58
  39. package/dist/Atomic/FormElements/InputMask2/InputMask2.js +1 -674
  40. package/dist/Atomic/FormElements/InputMask2/config.js +1 -15
  41. package/dist/Atomic/FormElements/InputMask2/functions.js +1 -58
  42. package/dist/Atomic/FormElements/InputMask3/InputMask3.js +1 -766
  43. package/dist/Atomic/FormElements/InputMask3/config.js +1 -15
  44. package/dist/Atomic/FormElements/InputMask3/functions.js +1 -58
  45. package/dist/Atomic/FormElements/InputWithAction/InputWithAction.js +1 -114
  46. package/dist/Atomic/FormElements/InputsRow/InputsRow.js +1 -140
  47. package/dist/Atomic/FormElements/Label/Label.js +1 -87
  48. package/dist/Atomic/FormElements/MobileCalendar/MobileCalendar.js +1 -506
  49. package/dist/Atomic/FormElements/MultiSelect/MultiSelect.js +1 -45
  50. package/dist/Atomic/FormElements/NumericInput/NumericInput.js +1 -331
  51. package/dist/Atomic/FormElements/RadioGroup/RadioGroup.js +1 -66
  52. package/dist/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.js +1 -80
  53. package/dist/Atomic/FormElements/RadioInput/RadioInput.js +1 -57
  54. package/dist/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.js +1 -54
  55. package/dist/Atomic/FormElements/RangeCalendar/RangeCalendar.js +1 -183
  56. package/dist/Atomic/FormElements/RangeInputs/RangeInputs.js +1 -222
  57. package/dist/Atomic/FormElements/RangeList/RangeList.js +1 -175
  58. package/dist/Atomic/FormElements/RangeList/partial/RangeListRow.js +1 -43
  59. package/dist/Atomic/FormElements/RangeSlider/RangeSlider.js +1 -443
  60. package/dist/Atomic/FormElements/RangeSlider2/RangeSlider2.js +1 -858
  61. package/dist/Atomic/FormElements/SwitchableRow/SwitchableRow.js +1 -39
  62. package/dist/Atomic/FormElements/Switcher/Switcher.js +1 -59
  63. package/dist/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.js +1 -50
  64. package/dist/Atomic/FormElements/SwitcherHide/SwitcherHide.js +1 -44
  65. package/dist/Atomic/FormElements/SwitcherRadio/SwitcherRadio.js +1 -100
  66. package/dist/Atomic/FormElements/SwitcherRange/SwitcherRange.js +1 -52
  67. package/dist/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.js +1 -64
  68. package/dist/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.js +1 -170
  69. package/dist/Atomic/FormElements/SwitcherTagsDropdown/partial/States.js +1 -202
  70. package/dist/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.js +1 -67
  71. package/dist/Atomic/FormElements/TagListToDropdown/TagListToDropdown.js +1 -115
  72. package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.js +1 -1110
  73. package/dist/Atomic/FormElements/Text/Text.js +1 -125
  74. package/dist/Atomic/FormElements/TextSwitcher/TextSwitcher.js +1 -49
  75. package/dist/Atomic/FormElements/Textarea/Textarea.js +1 -80
  76. package/dist/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.js +1 -176
  77. package/dist/Atomic/FormElements/TieredCheckboxes/partial/AccordionWithCheckbox.js +1 -62
  78. package/dist/Atomic/FormElements/TimeRange/TimeRange.js +1 -119
  79. package/dist/Atomic/FormElements/UserContacts/UserContacts.js +1 -188
  80. package/dist/Atomic/FormElements/VariantsListRadio/VariantsListRadio.js +1 -83
  81. package/dist/Atomic/FormElements/VariantsListRadio/partials/VariantsListRadioItem.js +1 -82
  82. package/dist/Atomic/FormElements/WidgetPseudoTable/WidgetPseudoTable.js +1 -101
  83. package/dist/Atomic/FormElements/WidgetPseudoTable/partial/constructor.js +1 -29
  84. package/dist/Atomic/FormElements/WidgetWithSwitchableRows/WidgetWithSwitchableRows.js +1 -113
  85. package/dist/Atomic/FormElements/WidgetWithSwitchableRows/partial/constructor.js +1 -30
  86. package/dist/Atomic/Layout/Header/Header.js +1 -85
  87. package/dist/Atomic/Layout/Spinner/Spinner.js +1 -44
  88. package/dist/Atomic/UI/Accordion/Accordion.js +1 -108
  89. package/dist/Atomic/UI/Accordion/AccordionItem.js +1 -176
  90. package/dist/Atomic/UI/AccordionTable/AccordionTable.js +1 -238
  91. package/dist/Atomic/UI/AccordionText/AccordionText.js +1 -69
  92. package/dist/Atomic/UI/AdvancedTag/AdvTag.js +1 -207
  93. package/dist/Atomic/UI/AdvancedTag/AdvancedTags.js +1 -56
  94. package/dist/Atomic/UI/Alert/Alert.js +1 -72
  95. package/dist/Atomic/UI/Arrow/Arrow.js +1 -132
  96. package/dist/Atomic/UI/Box/Box.js +1 -52
  97. package/dist/Atomic/UI/Button/Button.js +1 -47
  98. package/dist/Atomic/UI/ButtonsBar/ButtonsBar.js +1 -72
  99. package/dist/Atomic/UI/Chart/Chart.js +1 -172
  100. package/dist/Atomic/UI/Chart/partial/Chart.constants.js +1 -95
  101. package/dist/Atomic/UI/Chart/partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon.js +1 -80
  102. package/dist/Atomic/UI/Chart/partial/datasetSetters.js +1 -188
  103. package/dist/Atomic/UI/Chart/partial/optionsConstructor.js +1 -335
  104. package/dist/Atomic/UI/Chart/partial/optionsSetters.js +1 -43
  105. package/dist/Atomic/UI/Chart/partial/utils.js +1 -60
  106. package/dist/Atomic/UI/CircleProgressBar/CircleProgressBar.js +1 -109
  107. package/dist/Atomic/UI/DateTime/DateTime.js +1 -57
  108. package/dist/Atomic/UI/DebugContainer/DebugContainer.js +1 -44
  109. package/dist/Atomic/UI/DebugContainer/useDebugContainer.js +1 -15
  110. package/dist/Atomic/UI/DoubleString/DoubleString.d.ts +19 -0
  111. package/dist/Atomic/UI/DoubleString/DoubleString.js +1 -102
  112. package/dist/Atomic/UI/DoubleString/DoubleString.js.map +1 -0
  113. package/dist/Atomic/UI/DoubleString/DoubleString.scss +8 -1
  114. package/dist/Atomic/UI/DynamicIcon/DynamicIcon.js +1 -70
  115. package/dist/Atomic/UI/ExampleChartIntegration/ExampleChartIntegration.js +1 -221
  116. package/dist/Atomic/UI/ExampleChartIntegration/partial/utils.js +1 -106
  117. package/dist/Atomic/UI/Hint/Hint.js +1 -256
  118. package/dist/Atomic/UI/Hint/partials/_utils.js +1 -64
  119. package/dist/Atomic/UI/Modal/Modal.js +1 -179
  120. package/dist/Atomic/UI/Modal/ModalHOC.js +1 -97
  121. package/dist/Atomic/UI/Modal/partials/ModalFooter.js +1 -71
  122. package/dist/Atomic/UI/Modal/partials/ModalTitle.js +1 -110
  123. package/dist/Atomic/UI/Modal/partials/useMobileModal.js +1 -192
  124. package/dist/Atomic/UI/MonoAccordion/MonoAccordion._test.js +1 -75
  125. package/dist/Atomic/UI/MonoAccordion/MonoAccordion.js +1 -80
  126. package/dist/Atomic/UI/NavLine/NavLine.js +1 -317
  127. package/dist/Atomic/UI/PageTitle/PageTitle.js +1 -77
  128. package/dist/Atomic/UI/PieChart/PieChart.js +1 -42
  129. package/dist/Atomic/UI/Price/Price.js +1 -31
  130. package/dist/Atomic/UI/PriceRange/PriceRange.js +1 -44
  131. package/dist/Atomic/UI/ProgressLine/ProgressLine.js +1 -98
  132. package/dist/Atomic/UI/Status/Status.js +1 -67
  133. package/dist/Atomic/UI/Table/Partials/TdCell.js +1 -87
  134. package/dist/Atomic/UI/Table/Partials/TdHeader.js +1 -38
  135. package/dist/Atomic/UI/Table/Partials/TdRow.js +1 -99
  136. package/dist/Atomic/UI/Table/Partials/TdTitle.js +1 -52
  137. package/dist/Atomic/UI/Table/Table.js +1 -63
  138. package/dist/Atomic/UI/Table/TdTypes/TdActions.js +1 -80
  139. package/dist/Atomic/UI/Table/TdTypes/TdPriority.js +1 -28
  140. package/dist/Atomic/UI/Table/TdTypes/TdRange.js +1 -13
  141. package/dist/Atomic/UI/Table/TdTypes/TdWeight.js +1 -53
  142. package/dist/Atomic/UI/Tag/Tag.js +1 -167
  143. package/dist/Atomic/UI/TagList/TagList.js +1 -251
  144. package/dist/Atomic/UI/UserBox/UserBox.js +1 -86
  145. package/dist/Atomic/UI/WizardStepper/constructor.js +1 -84
  146. package/dist/Atomic/UI/WizardStepper/index.js +1 -3
  147. package/dist/Atomic/UI/WizardStepper/ui/StateIcon/StateIcon.js +1 -37
  148. package/dist/Atomic/UI/WizardStepper/ui/StateIcon/index.js +1 -3
  149. package/dist/Atomic/UI/WizardStepper/ui/StepRow/StepRow.js +1 -61
  150. package/dist/Atomic/UI/WizardStepper/ui/StepRow/index.js +1 -3
  151. package/dist/Atomic/UI/WizardStepper/ui/StepWrapper/StepWrapper.js +1 -39
  152. package/dist/Atomic/UI/WizardStepper/ui/StepWrapper/index.js +1 -3
  153. package/dist/Atomic/UI/WizardStepper/ui/icons.js +1 -49
  154. package/dist/Atomic/UI/WizardStepper/ui/index.js +1 -3
  155. package/dist/Classes/AbortableFetch.js +1 -454
  156. package/dist/Classes/AnimatedHandler.js +1 -47
  157. package/dist/Classes/RESTAPI/index.js +1 -228
  158. package/dist/Classes/RESTAPI/partials/AbortableFetch.js +1 -457
  159. package/dist/Classes/RESTAPI/partials/ApiBase.js +1 -48
  160. package/dist/Classes/RESTAPI/partials/ApiRequestCreators.js +1 -112
  161. package/dist/Classes/RESTAPI/partials/ApiUtils.js +1 -189
  162. package/dist/Classes/RESTAPI/partials/CredentialsProcessing.js +1 -252
  163. package/dist/Classes/RESTAPI/partials/Utils.js +1 -92
  164. package/dist/Classes/RESTAPI/partials/_outerDependencies.js +1 -3
  165. package/dist/Classes/RESTAPI/partials/_utils.js +1 -197
  166. package/dist/Constants/index.constants.js +1 -78
  167. package/dist/Functions/Portal.js +1 -22
  168. package/dist/Functions/customEventListener.js +1 -96
  169. package/dist/Functions/dateTime.js +1 -149
  170. package/dist/Functions/fieldValueFormatters.js +1 -405
  171. package/dist/Functions/guards/assertions.js +1 -294
  172. package/dist/Functions/guards/safeValue.js +1 -75
  173. package/dist/Functions/guards/typeGuards.js +1 -373
  174. package/dist/Functions/hooks/useFormFieldsChangesManager.js +1 -95
  175. package/dist/Functions/locale/createTranslator.js +1 -32
  176. package/dist/Functions/operations.js +1 -130
  177. package/dist/Functions/presets/inputMaskPresets.js +1 -170
  178. package/dist/Functions/presets/inputPresets.js +1 -60
  179. package/dist/Functions/presets/mobileKeyboardTypesPresets.js +1 -45
  180. package/dist/Functions/schemas.js +1 -31
  181. package/dist/Functions/useBodyScrollLock.js +1 -17
  182. package/dist/Functions/useClickOutside.js +1 -15
  183. package/dist/Functions/useDebounce.js +1 -17
  184. package/dist/Functions/useFieldFocus.js +1 -84
  185. package/dist/Functions/useFormTools/form-drivers/ArrayWithObjects.js +1 -39
  186. package/dist/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js +1 -159
  187. package/dist/Functions/useFormTools/form-drivers/ObjectWithNamedKeyObjects.js +1 -78
  188. package/dist/Functions/useFormTools/functions/General.js +1 -134
  189. package/dist/Functions/useFormTools/functions/RenderFields.js +1 -111
  190. package/dist/Functions/useFormTools/functions/usePrevious.js +1 -12
  191. package/dist/Functions/useFormTools/index.js +1 -778
  192. package/dist/Functions/useInputHighlightError.js +1 -67
  193. package/dist/Functions/useIsMobile/useIsMobile.js +1 -33
  194. package/dist/Functions/useKeyPress/useHandleKeyPress.js +1 -52
  195. package/dist/Functions/useKeyPress/useKeyPress.js +1 -52
  196. package/dist/Functions/useLocalStorage.js +1 -34
  197. package/dist/Functions/useLocationParams.js +1 -27
  198. package/dist/Functions/useMediaQuery.js +1 -17
  199. package/dist/Functions/useMetaInfo.js +1 -43
  200. package/dist/Functions/useMouseUpOutside.js +1 -16
  201. package/dist/Functions/useOnlineStatus.js +1 -29
  202. package/dist/Functions/usePasswordChecker.js +1 -110
  203. package/dist/Functions/usePrevious.js +1 -12
  204. package/dist/Functions/useResize.js +1 -31
  205. package/dist/Functions/useScrollTo.js +1 -17
  206. package/dist/Functions/useToggle.js +1 -17
  207. package/dist/Functions/utils.js +1 -522
  208. package/dist/Langs.js +1 -168
  209. package/dist/Molecular/CustomIcons/components/AffiliateNetworks.js +1 -21
  210. package/dist/Molecular/CustomIcons/components/AlertCircle.js +1 -23
  211. package/dist/Molecular/CustomIcons/components/AppStore.js +1 -29
  212. package/dist/Molecular/CustomIcons/components/Arrow.js +1 -32
  213. package/dist/Molecular/CustomIcons/components/ArrowDown.js +1 -17
  214. package/dist/Molecular/CustomIcons/components/ArrowLeft.js +1 -22
  215. package/dist/Molecular/CustomIcons/components/ArrowRight.js +1 -22
  216. package/dist/Molecular/CustomIcons/components/ArrowUp.js +1 -17
  217. package/dist/Molecular/CustomIcons/components/Bell.js +1 -15
  218. package/dist/Molecular/CustomIcons/components/Button.js +1 -12
  219. package/dist/Molecular/CustomIcons/components/Campaigns.js +1 -16
  220. package/dist/Molecular/CustomIcons/components/Check.js +1 -14
  221. package/dist/Molecular/CustomIcons/components/Check2.js +1 -12
  222. package/dist/Molecular/CustomIcons/components/ChevronDown.js +1 -12
  223. package/dist/Molecular/CustomIcons/components/ChevronDownDisabled.js +1 -11
  224. package/dist/Molecular/CustomIcons/components/ChevronLeft.js +1 -11
  225. package/dist/Molecular/CustomIcons/components/ChevronRight.js +1 -11
  226. package/dist/Molecular/CustomIcons/components/ChevronUp.js +1 -11
  227. package/dist/Molecular/CustomIcons/components/ChevronUpDown.js +1 -27
  228. package/dist/Molecular/CustomIcons/components/Close.js +1 -14
  229. package/dist/Molecular/CustomIcons/components/ColumnsOrder.js +1 -17
  230. package/dist/Molecular/CustomIcons/components/Delete.js +1 -16
  231. package/dist/Molecular/CustomIcons/components/Edit.js +1 -15
  232. package/dist/Molecular/CustomIcons/components/Email.js +1 -31
  233. package/dist/Molecular/CustomIcons/components/FinturfLogo.js +1 -18
  234. package/dist/Molecular/CustomIcons/components/FinturfLogo2.js +1 -35
  235. package/dist/Molecular/CustomIcons/components/Flows.js +1 -15
  236. package/dist/Molecular/CustomIcons/components/Gift.js +1 -25
  237. package/dist/Molecular/CustomIcons/components/GoogleAuth.js +1 -29
  238. package/dist/Molecular/CustomIcons/components/GooglePlay.js +1 -29
  239. package/dist/Molecular/CustomIcons/components/HelpCircle.js +1 -19
  240. package/dist/Molecular/CustomIcons/components/HelpCircle2.js +1 -20
  241. package/dist/Molecular/CustomIcons/components/HelpCircleFilled.js +1 -19
  242. package/dist/Molecular/CustomIcons/components/Home.js +1 -16
  243. package/dist/Molecular/CustomIcons/components/Home2.js +1 -22
  244. package/dist/Molecular/CustomIcons/components/Key.js +1 -23
  245. package/dist/Molecular/CustomIcons/components/Landers.js +1 -20
  246. package/dist/Molecular/CustomIcons/components/Lock.js +1 -15
  247. package/dist/Molecular/CustomIcons/components/Mail.js +1 -26
  248. package/dist/Molecular/CustomIcons/components/Mastercard.js +1 -73
  249. package/dist/Molecular/CustomIcons/components/Minus.js +1 -25
  250. package/dist/Molecular/CustomIcons/components/Offers.js +1 -16
  251. package/dist/Molecular/CustomIcons/components/Pause.js +1 -28
  252. package/dist/Molecular/CustomIcons/components/PayPal.js +1 -41
  253. package/dist/Molecular/CustomIcons/components/PayPalLightLarge.js +1 -28
  254. package/dist/Molecular/CustomIcons/components/Phone.js +1 -30
  255. package/dist/Molecular/CustomIcons/components/Play.js +1 -25
  256. package/dist/Molecular/CustomIcons/components/Plus.js +1 -25
  257. package/dist/Molecular/CustomIcons/components/Profile.js +1 -16
  258. package/dist/Molecular/CustomIcons/components/QRCode.js +1 -29
  259. package/dist/Molecular/CustomIcons/components/Rectangle.js +1 -12
  260. package/dist/Molecular/CustomIcons/components/Revert.js +1 -13
  261. package/dist/Molecular/CustomIcons/components/Star.js +1 -14
  262. package/dist/Molecular/CustomIcons/components/Star2.js +1 -16
  263. package/dist/Molecular/CustomIcons/components/TrafficSources.js +1 -14
  264. package/dist/Molecular/CustomIcons/components/Trash.js +1 -15
  265. package/dist/Molecular/CustomIcons/components/TrashRed.js +1 -15
  266. package/dist/Molecular/CustomIcons/components/Triggers.js +1 -15
  267. package/dist/Molecular/CustomIcons/components/User.js +1 -25
  268. package/dist/Molecular/CustomIcons/components/Visa.js +1 -31
  269. package/dist/Molecular/CustomIcons/components/X.js +1 -12
  270. package/dist/Molecular/CustomIcons/index.js +1 -61
  271. package/dist/Molecular/FormElement/FormElement.js +1 -54
  272. package/dist/Molecular/FormWithDependOn/FormWithDependOn.js +1 -184
  273. package/dist/Molecular/FormWithDependOn/partials/_utils.js +1 -53
  274. package/dist/Molecular/InputAddress/InputAddress.js +1 -626
  275. package/dist/Molecular/InputPassword/InputPassword.js +1 -48
  276. package/dist/index.js +1 -104
  277. 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)})}}}