intelicoreact 1.6.22 → 1.6.24

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