intelicoreact 1.6.25 → 1.6.27

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 (275) 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.d.ts +5 -0
  12. package/dist/Atomic/FormElements/Dropdown/Dropdown.js +1 -735
  13. package/dist/Atomic/FormElements/Dropdown/Dropdown.js.map +1 -0
  14. package/dist/Atomic/FormElements/Dropdown/components/DropdownLoader.js +1 -20
  15. package/dist/Atomic/FormElements/DropdownLiveSearch/DropdownLiveSearch.js +1 -529
  16. package/dist/Atomic/FormElements/FileLoader/FileLoader.js +1 -94
  17. package/dist/Atomic/FormElements/FileLoader/partial/LoadZone.js +1 -105
  18. package/dist/Atomic/FormElements/FileLoader/partial/LoadedContent.js +1 -67
  19. package/dist/Atomic/FormElements/FileLoaderDescription/FileLoaderDescription.js +1 -247
  20. package/dist/Atomic/FormElements/FileLoaderLocal/FileLoaderLocal.js +1 -160
  21. package/dist/Atomic/FormElements/FileLoaderLocalGroup/FileLoaderLocalGroup.js +1 -193
  22. package/dist/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN.js +1 -135
  23. package/dist/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN_old.js +1 -116
  24. package/dist/Atomic/FormElements/Input/Input.js +1 -467
  25. package/dist/Atomic/FormElements/InputCalendar/InputCalendar.js +1 -161
  26. package/dist/Atomic/FormElements/InputColor/InputColor.js +1 -64
  27. package/dist/Atomic/FormElements/InputCurrency/InputCurrency.js +1 -200
  28. package/dist/Atomic/FormElements/InputDateRange/InputDateRange.js +1 -354
  29. package/dist/Atomic/FormElements/InputDateRange/components/DateInput.js +1 -71
  30. package/dist/Atomic/FormElements/InputDateRange/components/Datepicker.js +1 -693
  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.js +1 -102
  111. package/dist/Atomic/UI/DoubleString/DoubleString.scss +8 -1
  112. package/dist/Atomic/UI/DynamicIcon/DynamicIcon.js +1 -70
  113. package/dist/Atomic/UI/ExampleChartIntegration/ExampleChartIntegration.js +1 -221
  114. package/dist/Atomic/UI/ExampleChartIntegration/partial/utils.js +1 -106
  115. package/dist/Atomic/UI/Hint/Hint.js +1 -256
  116. package/dist/Atomic/UI/Hint/partials/_utils.js +1 -64
  117. package/dist/Atomic/UI/Modal/Modal.js +1 -179
  118. package/dist/Atomic/UI/Modal/ModalHOC.js +1 -97
  119. package/dist/Atomic/UI/Modal/partials/ModalFooter.js +1 -71
  120. package/dist/Atomic/UI/Modal/partials/ModalTitle.js +1 -110
  121. package/dist/Atomic/UI/Modal/partials/useMobileModal.js +1 -192
  122. package/dist/Atomic/UI/MonoAccordion/MonoAccordion._test.js +1 -75
  123. package/dist/Atomic/UI/MonoAccordion/MonoAccordion.js +1 -80
  124. package/dist/Atomic/UI/NavLine/NavLine.js +1 -317
  125. package/dist/Atomic/UI/PageTitle/PageTitle.js +1 -77
  126. package/dist/Atomic/UI/PieChart/PieChart.js +1 -42
  127. package/dist/Atomic/UI/Price/Price.js +1 -31
  128. package/dist/Atomic/UI/PriceRange/PriceRange.js +1 -44
  129. package/dist/Atomic/UI/ProgressLine/ProgressLine.js +1 -98
  130. package/dist/Atomic/UI/Status/Status.js +1 -67
  131. package/dist/Atomic/UI/Table/Partials/TdCell.js +1 -87
  132. package/dist/Atomic/UI/Table/Partials/TdHeader.js +1 -38
  133. package/dist/Atomic/UI/Table/Partials/TdRow.js +1 -99
  134. package/dist/Atomic/UI/Table/Partials/TdTitle.js +1 -52
  135. package/dist/Atomic/UI/Table/Table.js +1 -63
  136. package/dist/Atomic/UI/Table/TdTypes/TdActions.js +1 -80
  137. package/dist/Atomic/UI/Table/TdTypes/TdPriority.js +1 -28
  138. package/dist/Atomic/UI/Table/TdTypes/TdRange.js +1 -13
  139. package/dist/Atomic/UI/Table/TdTypes/TdWeight.js +1 -53
  140. package/dist/Atomic/UI/Tag/Tag.js +1 -167
  141. package/dist/Atomic/UI/TagList/TagList.js +1 -251
  142. package/dist/Atomic/UI/UserBox/UserBox.js +1 -86
  143. package/dist/Atomic/UI/WizardStepper/constructor.js +1 -84
  144. package/dist/Atomic/UI/WizardStepper/index.js +1 -3
  145. package/dist/Atomic/UI/WizardStepper/ui/StateIcon/StateIcon.js +1 -37
  146. package/dist/Atomic/UI/WizardStepper/ui/StateIcon/index.js +1 -3
  147. package/dist/Atomic/UI/WizardStepper/ui/StepRow/StepRow.js +1 -61
  148. package/dist/Atomic/UI/WizardStepper/ui/StepRow/index.js +1 -3
  149. package/dist/Atomic/UI/WizardStepper/ui/StepWrapper/StepWrapper.js +1 -39
  150. package/dist/Atomic/UI/WizardStepper/ui/StepWrapper/index.js +1 -3
  151. package/dist/Atomic/UI/WizardStepper/ui/icons.js +1 -49
  152. package/dist/Atomic/UI/WizardStepper/ui/index.js +1 -3
  153. package/dist/Classes/AbortableFetch.js +1 -454
  154. package/dist/Classes/AnimatedHandler.js +1 -47
  155. package/dist/Classes/RESTAPI/index.js +1 -228
  156. package/dist/Classes/RESTAPI/partials/AbortableFetch.js +1 -457
  157. package/dist/Classes/RESTAPI/partials/ApiBase.js +1 -48
  158. package/dist/Classes/RESTAPI/partials/ApiRequestCreators.js +1 -112
  159. package/dist/Classes/RESTAPI/partials/ApiUtils.js +1 -189
  160. package/dist/Classes/RESTAPI/partials/CredentialsProcessing.js +1 -252
  161. package/dist/Classes/RESTAPI/partials/Utils.js +1 -92
  162. package/dist/Classes/RESTAPI/partials/_outerDependencies.js +1 -3
  163. package/dist/Classes/RESTAPI/partials/_utils.js +1 -197
  164. package/dist/Constants/index.constants.js +1 -78
  165. package/dist/Functions/Portal.js +1 -22
  166. package/dist/Functions/customEventListener.js +1 -96
  167. package/dist/Functions/dateTime.js +1 -149
  168. package/dist/Functions/fieldValueFormatters.js +1 -405
  169. package/dist/Functions/guards/assertions.js +1 -294
  170. package/dist/Functions/guards/safeValue.js +1 -75
  171. package/dist/Functions/guards/typeGuards.js +1 -373
  172. package/dist/Functions/hooks/useFormFieldsChangesManager.js +1 -95
  173. package/dist/Functions/locale/createTranslator.js +1 -32
  174. package/dist/Functions/operations.js +1 -130
  175. package/dist/Functions/presets/inputMaskPresets.js +1 -170
  176. package/dist/Functions/presets/inputPresets.js +1 -60
  177. package/dist/Functions/presets/mobileKeyboardTypesPresets.js +1 -45
  178. package/dist/Functions/schemas.js +1 -31
  179. package/dist/Functions/useBodyScrollLock.js +1 -17
  180. package/dist/Functions/useClickOutside.js +1 -15
  181. package/dist/Functions/useDebounce.js +1 -17
  182. package/dist/Functions/useFieldFocus.js +1 -84
  183. package/dist/Functions/useFormTools/form-drivers/ArrayWithObjects.js +1 -39
  184. package/dist/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js +1 -159
  185. package/dist/Functions/useFormTools/form-drivers/ObjectWithNamedKeyObjects.js +1 -78
  186. package/dist/Functions/useFormTools/functions/General.js +1 -134
  187. package/dist/Functions/useFormTools/functions/RenderFields.js +1 -111
  188. package/dist/Functions/useFormTools/functions/usePrevious.js +1 -12
  189. package/dist/Functions/useFormTools/index.js +1 -778
  190. package/dist/Functions/useInputHighlightError.js +1 -67
  191. package/dist/Functions/useIsMobile/useIsMobile.js +1 -33
  192. package/dist/Functions/useKeyPress/useHandleKeyPress.js +1 -52
  193. package/dist/Functions/useKeyPress/useKeyPress.js +1 -52
  194. package/dist/Functions/useLocalStorage.js +1 -34
  195. package/dist/Functions/useLocationParams.js +1 -27
  196. package/dist/Functions/useMediaQuery.js +1 -17
  197. package/dist/Functions/useMetaInfo.js +1 -43
  198. package/dist/Functions/useMouseUpOutside.js +1 -16
  199. package/dist/Functions/useOnlineStatus.js +1 -29
  200. package/dist/Functions/usePasswordChecker.js +1 -110
  201. package/dist/Functions/usePrevious.js +1 -12
  202. package/dist/Functions/useResize.js +1 -31
  203. package/dist/Functions/useScrollTo.js +1 -17
  204. package/dist/Functions/useToggle.js +1 -17
  205. package/dist/Functions/utils.js +1 -522
  206. package/dist/Langs.js +1 -168
  207. package/dist/Molecular/CustomIcons/components/AffiliateNetworks.js +1 -21
  208. package/dist/Molecular/CustomIcons/components/AlertCircle.js +1 -23
  209. package/dist/Molecular/CustomIcons/components/AppStore.js +1 -29
  210. package/dist/Molecular/CustomIcons/components/Arrow.js +1 -32
  211. package/dist/Molecular/CustomIcons/components/ArrowDown.js +1 -17
  212. package/dist/Molecular/CustomIcons/components/ArrowLeft.js +1 -22
  213. package/dist/Molecular/CustomIcons/components/ArrowRight.js +1 -22
  214. package/dist/Molecular/CustomIcons/components/ArrowUp.js +1 -17
  215. package/dist/Molecular/CustomIcons/components/Bell.js +1 -15
  216. package/dist/Molecular/CustomIcons/components/Button.js +1 -12
  217. package/dist/Molecular/CustomIcons/components/Campaigns.js +1 -16
  218. package/dist/Molecular/CustomIcons/components/Check.js +1 -14
  219. package/dist/Molecular/CustomIcons/components/Check2.js +1 -12
  220. package/dist/Molecular/CustomIcons/components/ChevronDown.js +1 -12
  221. package/dist/Molecular/CustomIcons/components/ChevronDownDisabled.js +1 -11
  222. package/dist/Molecular/CustomIcons/components/ChevronLeft.js +1 -11
  223. package/dist/Molecular/CustomIcons/components/ChevronRight.js +1 -11
  224. package/dist/Molecular/CustomIcons/components/ChevronUp.js +1 -11
  225. package/dist/Molecular/CustomIcons/components/ChevronUpDown.js +1 -27
  226. package/dist/Molecular/CustomIcons/components/Close.js +1 -14
  227. package/dist/Molecular/CustomIcons/components/ColumnsOrder.js +1 -17
  228. package/dist/Molecular/CustomIcons/components/Delete.js +1 -16
  229. package/dist/Molecular/CustomIcons/components/Edit.js +1 -15
  230. package/dist/Molecular/CustomIcons/components/Email.js +1 -31
  231. package/dist/Molecular/CustomIcons/components/FinturfLogo.js +1 -18
  232. package/dist/Molecular/CustomIcons/components/FinturfLogo2.js +1 -35
  233. package/dist/Molecular/CustomIcons/components/Flows.js +1 -15
  234. package/dist/Molecular/CustomIcons/components/Gift.js +1 -25
  235. package/dist/Molecular/CustomIcons/components/GoogleAuth.js +1 -29
  236. package/dist/Molecular/CustomIcons/components/GooglePlay.js +1 -29
  237. package/dist/Molecular/CustomIcons/components/HelpCircle.js +1 -19
  238. package/dist/Molecular/CustomIcons/components/HelpCircle2.js +1 -20
  239. package/dist/Molecular/CustomIcons/components/HelpCircleFilled.js +1 -19
  240. package/dist/Molecular/CustomIcons/components/Home.js +1 -16
  241. package/dist/Molecular/CustomIcons/components/Home2.js +1 -22
  242. package/dist/Molecular/CustomIcons/components/Key.js +1 -23
  243. package/dist/Molecular/CustomIcons/components/Landers.js +1 -20
  244. package/dist/Molecular/CustomIcons/components/Lock.js +1 -15
  245. package/dist/Molecular/CustomIcons/components/Mail.js +1 -26
  246. package/dist/Molecular/CustomIcons/components/Mastercard.js +1 -73
  247. package/dist/Molecular/CustomIcons/components/Minus.js +1 -25
  248. package/dist/Molecular/CustomIcons/components/Offers.js +1 -16
  249. package/dist/Molecular/CustomIcons/components/Pause.js +1 -28
  250. package/dist/Molecular/CustomIcons/components/PayPal.js +1 -41
  251. package/dist/Molecular/CustomIcons/components/PayPalLightLarge.js +1 -28
  252. package/dist/Molecular/CustomIcons/components/Phone.js +1 -30
  253. package/dist/Molecular/CustomIcons/components/Play.js +1 -25
  254. package/dist/Molecular/CustomIcons/components/Plus.js +1 -25
  255. package/dist/Molecular/CustomIcons/components/Profile.js +1 -16
  256. package/dist/Molecular/CustomIcons/components/QRCode.js +1 -29
  257. package/dist/Molecular/CustomIcons/components/Rectangle.js +1 -12
  258. package/dist/Molecular/CustomIcons/components/Revert.js +1 -13
  259. package/dist/Molecular/CustomIcons/components/Star.js +1 -14
  260. package/dist/Molecular/CustomIcons/components/Star2.js +1 -16
  261. package/dist/Molecular/CustomIcons/components/TrafficSources.js +1 -14
  262. package/dist/Molecular/CustomIcons/components/Trash.js +1 -15
  263. package/dist/Molecular/CustomIcons/components/TrashRed.js +1 -15
  264. package/dist/Molecular/CustomIcons/components/Triggers.js +1 -15
  265. package/dist/Molecular/CustomIcons/components/User.js +1 -25
  266. package/dist/Molecular/CustomIcons/components/Visa.js +1 -31
  267. package/dist/Molecular/CustomIcons/components/X.js +1 -12
  268. package/dist/Molecular/CustomIcons/index.js +1 -61
  269. package/dist/Molecular/FormElement/FormElement.js +1 -54
  270. package/dist/Molecular/FormWithDependOn/FormWithDependOn.js +1 -184
  271. package/dist/Molecular/FormWithDependOn/partials/_utils.js +1 -53
  272. package/dist/Molecular/InputAddress/InputAddress.js +1 -626
  273. package/dist/Molecular/InputPassword/InputPassword.js +1 -48
  274. package/dist/index.js +1 -104
  275. 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)})}}}