@dnb/eufemia 10.31.0 → 10.32.0

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 (549) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/cjs/components/anchor/Anchor.d.ts +8 -1
  3. package/cjs/components/anchor/Anchor.js.map +1 -1
  4. package/cjs/components/card/Card.js +3 -2
  5. package/cjs/components/card/Card.js.map +1 -1
  6. package/cjs/components/card/style/dnb-card.css +1 -2
  7. package/cjs/components/card/style/dnb-card.min.css +1 -1
  8. package/cjs/components/card/style/themes/dnb-card-theme-sbanken.css +5 -0
  9. package/cjs/components/card/style/themes/dnb-card-theme-sbanken.min.css +1 -0
  10. package/cjs/components/card/style/themes/dnb-card-theme-sbanken.scss +7 -0
  11. package/cjs/components/checkbox/style/dnb-checkbox.css +2 -2
  12. package/cjs/components/checkbox/style/dnb-checkbox.min.css +1 -1
  13. package/cjs/components/checkbox/style/dnb-checkbox.scss +2 -3
  14. package/cjs/components/flex/Container.d.ts +4 -1
  15. package/cjs/components/flex/Container.js +10 -7
  16. package/cjs/components/flex/Container.js.map +1 -1
  17. package/cjs/components/flex/Stack.js +3 -3
  18. package/cjs/components/flex/Stack.js.map +1 -1
  19. package/cjs/components/flex/utils.js +7 -7
  20. package/cjs/components/flex/utils.js.map +1 -1
  21. package/cjs/components/skeleton/style/dnb-skeleton.css +4 -8
  22. package/cjs/components/skeleton/style/dnb-skeleton.min.css +1 -1
  23. package/cjs/components/space/SpacingUtils.d.ts +1 -1
  24. package/cjs/components/space/SpacingUtils.js +1 -1
  25. package/cjs/components/space/SpacingUtils.js.map +1 -1
  26. package/cjs/components/step-indicator/style/themes/dnb-step-indicator-theme-sbanken.css +70 -0
  27. package/cjs/components/step-indicator/style/themes/dnb-step-indicator-theme-sbanken.min.css +1 -0
  28. package/cjs/components/step-indicator/style/themes/dnb-step-indicator-theme-sbanken.scss +97 -0
  29. package/cjs/components/switch/style/themes/dnb-switch-theme-ui.css +1 -2
  30. package/cjs/components/switch/style/themes/dnb-switch-theme-ui.min.css +1 -1
  31. package/cjs/components/table/style/dnb-table.css +5 -10
  32. package/cjs/components/table/style/dnb-table.min.css +1 -1
  33. package/cjs/components/visually-hidden/style/dnb-visually-hidden.css +1 -2
  34. package/cjs/components/visually-hidden/style/dnb-visually-hidden.min.css +1 -1
  35. package/cjs/extensions/forms/DataContext/Context.d.ts +19 -9
  36. package/cjs/extensions/forms/DataContext/Context.js +2 -2
  37. package/cjs/extensions/forms/DataContext/Context.js.map +1 -1
  38. package/cjs/extensions/forms/DataContext/Provider/Provider.d.ts +3 -3
  39. package/cjs/extensions/forms/DataContext/Provider/Provider.js +68 -32
  40. package/cjs/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  41. package/cjs/extensions/forms/DataContext/Provider/ProviderDocs.js +3 -3
  42. package/cjs/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
  43. package/cjs/extensions/forms/Field/Boolean/Boolean.js +2 -1
  44. package/cjs/extensions/forms/Field/Boolean/Boolean.js.map +1 -1
  45. package/cjs/extensions/forms/Field/Indeterminate/useDependencePaths.js +7 -7
  46. package/cjs/extensions/forms/Field/Indeterminate/useDependencePaths.js.map +1 -1
  47. package/cjs/extensions/forms/Field/Number/Number.js +3 -1
  48. package/cjs/extensions/forms/Field/Number/Number.js.map +1 -1
  49. package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumber.js +1 -1
  50. package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
  51. package/cjs/extensions/forms/FieldBlock/FieldBlock.js +5 -0
  52. package/cjs/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
  53. package/cjs/extensions/forms/FieldBlock/style/dnb-field-block.css +1 -3
  54. package/cjs/extensions/forms/FieldBlock/style/dnb-field-block.min.css +1 -1
  55. package/cjs/extensions/forms/FieldBlock/style/dnb-field-block.scss +1 -2
  56. package/cjs/extensions/forms/Form/Element/Element.js +1 -1
  57. package/cjs/extensions/forms/Form/Element/Element.js.map +1 -1
  58. package/cjs/extensions/forms/Form/SubmitButton/SubmitButton.js +3 -3
  59. package/cjs/extensions/forms/Form/SubmitButton/SubmitButton.js.map +1 -1
  60. package/cjs/extensions/forms/Form/Tools/GenerateSchema.d.ts +8 -0
  61. package/cjs/extensions/forms/Form/Tools/GenerateSchema.js +100 -0
  62. package/cjs/extensions/forms/Form/Tools/GenerateSchema.js.map +1 -0
  63. package/cjs/extensions/forms/Form/Tools/index.d.ts +1 -0
  64. package/cjs/extensions/forms/Form/Tools/index.js +14 -0
  65. package/cjs/extensions/forms/Form/Tools/index.js.map +1 -0
  66. package/cjs/extensions/forms/Form/Visibility/Visibility.d.ts +19 -5
  67. package/cjs/extensions/forms/Form/Visibility/Visibility.js +41 -10
  68. package/cjs/extensions/forms/Form/Visibility/Visibility.js.map +1 -1
  69. package/cjs/extensions/forms/Form/Visibility/VisibilityDocs.js +11 -6
  70. package/cjs/extensions/forms/Form/Visibility/VisibilityDocs.js.map +1 -1
  71. package/cjs/extensions/forms/Form/data-context/useData.d.ts +1 -1
  72. package/cjs/extensions/forms/Form/data-context/useData.js +2 -2
  73. package/cjs/extensions/forms/Form/data-context/useData.js.map +1 -1
  74. package/cjs/extensions/forms/Form/data-context/useError.d.ts +1 -0
  75. package/cjs/extensions/forms/Form/data-context/useError.js +5 -3
  76. package/cjs/extensions/forms/Form/data-context/useError.js.map +1 -1
  77. package/cjs/extensions/forms/Form/index.d.ts +1 -0
  78. package/cjs/extensions/forms/Form/index.js +5 -0
  79. package/cjs/extensions/forms/Form/index.js.map +1 -1
  80. package/cjs/extensions/forms/Iterate/AnimatedContainer/ElementBlock.d.ts +8 -1
  81. package/cjs/extensions/forms/Iterate/AnimatedContainer/ElementBlock.js +4 -3
  82. package/cjs/extensions/forms/Iterate/AnimatedContainer/ElementBlock.js.map +1 -1
  83. package/cjs/extensions/forms/Iterate/EditContainer/EditContainer.d.ts +2 -1
  84. package/cjs/extensions/forms/Iterate/EditContainer/EditContainer.js.map +1 -1
  85. package/cjs/extensions/forms/Iterate/EditContainer/EditContainerDocs.js +5 -0
  86. package/cjs/extensions/forms/Iterate/EditContainer/EditContainerDocs.js.map +1 -1
  87. package/cjs/extensions/forms/Iterate/EditContainer/EditToolbarTools.js +1 -1
  88. package/cjs/extensions/forms/Iterate/EditContainer/EditToolbarTools.js.map +1 -1
  89. package/cjs/extensions/forms/Iterate/Toolbar/Toolbar.js +1 -1
  90. package/cjs/extensions/forms/Iterate/Toolbar/Toolbar.js.map +1 -1
  91. package/cjs/extensions/forms/Iterate/ViewContainer/ViewContainer.d.ts +2 -1
  92. package/cjs/extensions/forms/Iterate/ViewContainer/ViewContainer.js.map +1 -1
  93. package/cjs/extensions/forms/Iterate/ViewContainer/ViewContainerDocs.js +5 -0
  94. package/cjs/extensions/forms/Iterate/ViewContainer/ViewContainerDocs.js.map +1 -1
  95. package/cjs/extensions/forms/Iterate/ViewContainer/ViewToolbarTools.js +1 -1
  96. package/cjs/extensions/forms/Iterate/ViewContainer/ViewToolbarTools.js.map +1 -1
  97. package/cjs/extensions/forms/Iterate/style/dnb-form-iterate.css +3 -1
  98. package/cjs/extensions/forms/Iterate/style/dnb-form-iterate.min.css +1 -1
  99. package/cjs/extensions/forms/Iterate/style/dnb-form-iterate.scss +4 -1
  100. package/cjs/extensions/forms/ValueBlock/ValueBlock.js +4 -2
  101. package/cjs/extensions/forms/ValueBlock/ValueBlock.js.map +1 -1
  102. package/cjs/extensions/forms/Wizard/Container/WizardContainer.d.ts +31 -2
  103. package/cjs/extensions/forms/Wizard/Container/WizardContainer.js +102 -32
  104. package/cjs/extensions/forms/Wizard/Container/WizardContainer.js.map +1 -1
  105. package/cjs/extensions/forms/Wizard/Context/WizardContext.d.ts +4 -0
  106. package/cjs/extensions/forms/Wizard/Context/WizardContext.js.map +1 -1
  107. package/cjs/extensions/forms/Wizard/Step/Step.d.ts +6 -1
  108. package/cjs/extensions/forms/Wizard/Step/Step.js +9 -5
  109. package/cjs/extensions/forms/Wizard/Step/Step.js.map +1 -1
  110. package/cjs/extensions/forms/Wizard/style/dnb-wizard-layout.css +0 -1
  111. package/cjs/extensions/forms/Wizard/style/dnb-wizard-layout.min.css +1 -1
  112. package/cjs/extensions/forms/Wizard/style/dnb-wizard-layout.scss +0 -1
  113. package/cjs/extensions/forms/Wizard/style/themes/dnb-wizard-layout-theme-sbanken.css +1 -0
  114. package/cjs/extensions/forms/Wizard/style/themes/dnb-wizard-layout-theme-sbanken.min.css +0 -0
  115. package/cjs/extensions/forms/Wizard/style/themes/dnb-wizard-layout-theme-sbanken.scss +1 -0
  116. package/cjs/extensions/forms/Wizard/style/themes/dnb-wizard-layout-theme-ui.css +3 -0
  117. package/cjs/extensions/forms/Wizard/style/themes/dnb-wizard-layout-theme-ui.min.css +1 -0
  118. package/cjs/extensions/forms/Wizard/style/themes/dnb-wizard-layout-theme-ui.scss +7 -0
  119. package/cjs/extensions/forms/hooks/useFieldProps.js +70 -31
  120. package/cjs/extensions/forms/hooks/useFieldProps.js.map +1 -1
  121. package/cjs/extensions/forms/style/dnb-forms.css +4 -5
  122. package/cjs/extensions/forms/style/dnb-forms.min.css +1 -1
  123. package/cjs/extensions/forms/types.d.ts +4 -0
  124. package/cjs/extensions/forms/types.js.map +1 -1
  125. package/cjs/fragments/drawer-list/DrawerListHelpers.js +5 -2
  126. package/cjs/fragments/drawer-list/DrawerListHelpers.js.map +1 -1
  127. package/cjs/shared/Eufemia.d.ts +1 -1
  128. package/cjs/shared/Eufemia.js +2 -2
  129. package/cjs/shared/Eufemia.js.map +1 -1
  130. package/cjs/shared/MediaQuery.js +19 -1
  131. package/cjs/shared/MediaQuery.js.map +1 -1
  132. package/cjs/shared/MediaQueryUtils.d.ts +12 -34
  133. package/cjs/shared/MediaQueryUtils.js +22 -12
  134. package/cjs/shared/MediaQueryUtils.js.map +1 -1
  135. package/cjs/shared/component-helper.d.ts +1 -1
  136. package/cjs/shared/component-helper.js +5 -1
  137. package/cjs/shared/component-helper.js.map +1 -1
  138. package/cjs/shared/useMedia.d.ts +7 -2
  139. package/cjs/shared/useMedia.js +16 -11
  140. package/cjs/shared/useMedia.js.map +1 -1
  141. package/cjs/shared/useMediaQuery.js +30 -9
  142. package/cjs/shared/useMediaQuery.js.map +1 -1
  143. package/cjs/style/core/scopes.scss +1 -1
  144. package/cjs/style/dnb-ui-basis.css +2 -3
  145. package/cjs/style/dnb-ui-basis.min.css +1 -1
  146. package/cjs/style/dnb-ui-body.css +1 -1
  147. package/cjs/style/dnb-ui-body.min.css +1 -1
  148. package/cjs/style/dnb-ui-components.css +17 -29
  149. package/cjs/style/dnb-ui-components.min.css +3 -3
  150. package/cjs/style/dnb-ui-core.css +2 -3
  151. package/cjs/style/dnb-ui-core.min.css +1 -1
  152. package/cjs/style/dnb-ui-extensions.css +4 -5
  153. package/cjs/style/dnb-ui-extensions.min.css +1 -1
  154. package/cjs/style/dnb-ui-forms.css +4 -5
  155. package/cjs/style/dnb-ui-forms.min.css +1 -1
  156. package/cjs/style/themes/theme-eiendom/eiendom-theme-components.css +26 -36
  157. package/cjs/style/themes/theme-eiendom/eiendom-theme-components.min.css +5 -5
  158. package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.css +8 -5
  159. package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +2 -2
  160. package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.scss +1 -0
  161. package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.css +8 -5
  162. package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.min.css +2 -2
  163. package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.scss +1 -0
  164. package/cjs/style/themes/theme-sbanken/sbanken-theme-components.css +99 -112
  165. package/cjs/style/themes/theme-sbanken/sbanken-theme-components.min.css +6 -6
  166. package/cjs/style/themes/theme-sbanken/sbanken-theme-components.scss +2 -2
  167. package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.css +5 -5
  168. package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  169. package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.scss +1 -0
  170. package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.css +5 -5
  171. package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
  172. package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.scss +1 -0
  173. package/cjs/style/themes/theme-ui/ui-theme-components.css +26 -36
  174. package/cjs/style/themes/theme-ui/ui-theme-components.min.css +5 -5
  175. package/cjs/style/themes/theme-ui/ui-theme-extensions.css +8 -5
  176. package/cjs/style/themes/theme-ui/ui-theme-extensions.min.css +2 -2
  177. package/cjs/style/themes/theme-ui/ui-theme-extensions.scss +1 -0
  178. package/cjs/style/themes/theme-ui/ui-theme-forms.css +8 -5
  179. package/cjs/style/themes/theme-ui/ui-theme-forms.min.css +2 -2
  180. package/cjs/style/themes/theme-ui/ui-theme-forms.scss +1 -0
  181. package/components/anchor/Anchor.d.ts +8 -1
  182. package/components/anchor/Anchor.js.map +1 -1
  183. package/components/card/Card.js +3 -2
  184. package/components/card/Card.js.map +1 -1
  185. package/components/card/style/dnb-card.css +1 -2
  186. package/components/card/style/dnb-card.min.css +1 -1
  187. package/components/card/style/themes/dnb-card-theme-sbanken.css +5 -0
  188. package/components/card/style/themes/dnb-card-theme-sbanken.min.css +1 -0
  189. package/components/card/style/themes/dnb-card-theme-sbanken.scss +7 -0
  190. package/components/checkbox/style/dnb-checkbox.css +2 -2
  191. package/components/checkbox/style/dnb-checkbox.min.css +1 -1
  192. package/components/checkbox/style/dnb-checkbox.scss +2 -3
  193. package/components/flex/Container.d.ts +4 -1
  194. package/components/flex/Container.js +10 -7
  195. package/components/flex/Container.js.map +1 -1
  196. package/components/flex/Stack.js +3 -3
  197. package/components/flex/Stack.js.map +1 -1
  198. package/components/flex/utils.js +8 -8
  199. package/components/flex/utils.js.map +1 -1
  200. package/components/skeleton/style/dnb-skeleton.css +4 -8
  201. package/components/skeleton/style/dnb-skeleton.min.css +1 -1
  202. package/components/space/SpacingUtils.d.ts +1 -1
  203. package/components/space/SpacingUtils.js +1 -1
  204. package/components/space/SpacingUtils.js.map +1 -1
  205. package/components/step-indicator/style/themes/dnb-step-indicator-theme-sbanken.css +70 -0
  206. package/components/step-indicator/style/themes/dnb-step-indicator-theme-sbanken.min.css +1 -0
  207. package/components/step-indicator/style/themes/dnb-step-indicator-theme-sbanken.scss +97 -0
  208. package/components/switch/style/themes/dnb-switch-theme-ui.css +1 -2
  209. package/components/switch/style/themes/dnb-switch-theme-ui.min.css +1 -1
  210. package/components/table/style/dnb-table.css +5 -10
  211. package/components/table/style/dnb-table.min.css +1 -1
  212. package/components/visually-hidden/style/dnb-visually-hidden.css +1 -2
  213. package/components/visually-hidden/style/dnb-visually-hidden.min.css +1 -1
  214. package/es/components/anchor/Anchor.d.ts +8 -1
  215. package/es/components/anchor/Anchor.js.map +1 -1
  216. package/es/components/card/Card.js +3 -2
  217. package/es/components/card/Card.js.map +1 -1
  218. package/es/components/card/style/dnb-card.css +1 -2
  219. package/es/components/card/style/dnb-card.min.css +1 -1
  220. package/es/components/card/style/themes/dnb-card-theme-sbanken.css +5 -0
  221. package/es/components/card/style/themes/dnb-card-theme-sbanken.min.css +1 -0
  222. package/es/components/card/style/themes/dnb-card-theme-sbanken.scss +7 -0
  223. package/es/components/checkbox/style/dnb-checkbox.css +2 -2
  224. package/es/components/checkbox/style/dnb-checkbox.min.css +1 -1
  225. package/es/components/checkbox/style/dnb-checkbox.scss +2 -3
  226. package/es/components/flex/Container.d.ts +4 -1
  227. package/es/components/flex/Container.js +10 -7
  228. package/es/components/flex/Container.js.map +1 -1
  229. package/es/components/flex/Stack.js +3 -3
  230. package/es/components/flex/Stack.js.map +1 -1
  231. package/es/components/flex/utils.js +8 -8
  232. package/es/components/flex/utils.js.map +1 -1
  233. package/es/components/skeleton/style/dnb-skeleton.css +4 -8
  234. package/es/components/skeleton/style/dnb-skeleton.min.css +1 -1
  235. package/es/components/space/SpacingUtils.d.ts +1 -1
  236. package/es/components/space/SpacingUtils.js +1 -1
  237. package/es/components/space/SpacingUtils.js.map +1 -1
  238. package/es/components/step-indicator/style/themes/dnb-step-indicator-theme-sbanken.css +70 -0
  239. package/es/components/step-indicator/style/themes/dnb-step-indicator-theme-sbanken.min.css +1 -0
  240. package/es/components/step-indicator/style/themes/dnb-step-indicator-theme-sbanken.scss +97 -0
  241. package/es/components/switch/style/themes/dnb-switch-theme-ui.css +1 -2
  242. package/es/components/switch/style/themes/dnb-switch-theme-ui.min.css +1 -1
  243. package/es/components/table/style/dnb-table.css +5 -10
  244. package/es/components/table/style/dnb-table.min.css +1 -1
  245. package/es/components/visually-hidden/style/dnb-visually-hidden.css +1 -2
  246. package/es/components/visually-hidden/style/dnb-visually-hidden.min.css +1 -1
  247. package/es/extensions/forms/DataContext/Context.d.ts +19 -9
  248. package/es/extensions/forms/DataContext/Context.js +2 -2
  249. package/es/extensions/forms/DataContext/Context.js.map +1 -1
  250. package/es/extensions/forms/DataContext/Provider/Provider.d.ts +3 -3
  251. package/es/extensions/forms/DataContext/Provider/Provider.js +65 -30
  252. package/es/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  253. package/es/extensions/forms/DataContext/Provider/ProviderDocs.js +3 -3
  254. package/es/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
  255. package/es/extensions/forms/Field/Boolean/Boolean.js +2 -1
  256. package/es/extensions/forms/Field/Boolean/Boolean.js.map +1 -1
  257. package/es/extensions/forms/Field/Indeterminate/useDependencePaths.js +7 -7
  258. package/es/extensions/forms/Field/Indeterminate/useDependencePaths.js.map +1 -1
  259. package/es/extensions/forms/Field/Number/Number.js +3 -1
  260. package/es/extensions/forms/Field/Number/Number.js.map +1 -1
  261. package/es/extensions/forms/Field/PhoneNumber/PhoneNumber.js +1 -1
  262. package/es/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
  263. package/es/extensions/forms/FieldBlock/FieldBlock.js +5 -0
  264. package/es/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
  265. package/es/extensions/forms/FieldBlock/style/dnb-field-block.css +1 -3
  266. package/es/extensions/forms/FieldBlock/style/dnb-field-block.min.css +1 -1
  267. package/es/extensions/forms/FieldBlock/style/dnb-field-block.scss +1 -2
  268. package/es/extensions/forms/Form/Element/Element.js +1 -1
  269. package/es/extensions/forms/Form/Element/Element.js.map +1 -1
  270. package/es/extensions/forms/Form/SubmitButton/SubmitButton.js +3 -3
  271. package/es/extensions/forms/Form/SubmitButton/SubmitButton.js.map +1 -1
  272. package/es/extensions/forms/Form/Tools/GenerateSchema.d.ts +8 -0
  273. package/es/extensions/forms/Form/Tools/GenerateSchema.js +89 -0
  274. package/es/extensions/forms/Form/Tools/GenerateSchema.js.map +1 -0
  275. package/es/extensions/forms/Form/Tools/index.d.ts +1 -0
  276. package/es/extensions/forms/Form/Tools/index.js +1 -0
  277. package/es/extensions/forms/Form/Tools/index.js.map +1 -0
  278. package/es/extensions/forms/Form/Visibility/Visibility.d.ts +19 -5
  279. package/es/extensions/forms/Form/Visibility/Visibility.js +41 -10
  280. package/es/extensions/forms/Form/Visibility/Visibility.js.map +1 -1
  281. package/es/extensions/forms/Form/Visibility/VisibilityDocs.js +11 -6
  282. package/es/extensions/forms/Form/Visibility/VisibilityDocs.js.map +1 -1
  283. package/es/extensions/forms/Form/data-context/useData.d.ts +1 -1
  284. package/es/extensions/forms/Form/data-context/useData.js +1 -2
  285. package/es/extensions/forms/Form/data-context/useData.js.map +1 -1
  286. package/es/extensions/forms/Form/data-context/useError.d.ts +1 -0
  287. package/es/extensions/forms/Form/data-context/useError.js +5 -3
  288. package/es/extensions/forms/Form/data-context/useError.js.map +1 -1
  289. package/es/extensions/forms/Form/index.d.ts +1 -0
  290. package/es/extensions/forms/Form/index.js +1 -0
  291. package/es/extensions/forms/Form/index.js.map +1 -1
  292. package/es/extensions/forms/Iterate/AnimatedContainer/ElementBlock.d.ts +8 -1
  293. package/es/extensions/forms/Iterate/AnimatedContainer/ElementBlock.js +4 -3
  294. package/es/extensions/forms/Iterate/AnimatedContainer/ElementBlock.js.map +1 -1
  295. package/es/extensions/forms/Iterate/EditContainer/EditContainer.d.ts +2 -1
  296. package/es/extensions/forms/Iterate/EditContainer/EditContainer.js.map +1 -1
  297. package/es/extensions/forms/Iterate/EditContainer/EditContainerDocs.js +5 -0
  298. package/es/extensions/forms/Iterate/EditContainer/EditContainerDocs.js.map +1 -1
  299. package/es/extensions/forms/Iterate/EditContainer/EditToolbarTools.js +1 -1
  300. package/es/extensions/forms/Iterate/EditContainer/EditToolbarTools.js.map +1 -1
  301. package/es/extensions/forms/Iterate/Toolbar/Toolbar.js +1 -1
  302. package/es/extensions/forms/Iterate/Toolbar/Toolbar.js.map +1 -1
  303. package/es/extensions/forms/Iterate/ViewContainer/ViewContainer.d.ts +2 -1
  304. package/es/extensions/forms/Iterate/ViewContainer/ViewContainer.js.map +1 -1
  305. package/es/extensions/forms/Iterate/ViewContainer/ViewContainerDocs.js +5 -0
  306. package/es/extensions/forms/Iterate/ViewContainer/ViewContainerDocs.js.map +1 -1
  307. package/es/extensions/forms/Iterate/ViewContainer/ViewToolbarTools.js +1 -1
  308. package/es/extensions/forms/Iterate/ViewContainer/ViewToolbarTools.js.map +1 -1
  309. package/es/extensions/forms/Iterate/style/dnb-form-iterate.css +3 -1
  310. package/es/extensions/forms/Iterate/style/dnb-form-iterate.min.css +1 -1
  311. package/es/extensions/forms/Iterate/style/dnb-form-iterate.scss +4 -1
  312. package/es/extensions/forms/ValueBlock/ValueBlock.js +4 -2
  313. package/es/extensions/forms/ValueBlock/ValueBlock.js.map +1 -1
  314. package/es/extensions/forms/Wizard/Container/WizardContainer.d.ts +31 -2
  315. package/es/extensions/forms/Wizard/Container/WizardContainer.js +98 -32
  316. package/es/extensions/forms/Wizard/Container/WizardContainer.js.map +1 -1
  317. package/es/extensions/forms/Wizard/Context/WizardContext.d.ts +4 -0
  318. package/es/extensions/forms/Wizard/Context/WizardContext.js.map +1 -1
  319. package/es/extensions/forms/Wizard/Step/Step.d.ts +6 -1
  320. package/es/extensions/forms/Wizard/Step/Step.js +9 -5
  321. package/es/extensions/forms/Wizard/Step/Step.js.map +1 -1
  322. package/es/extensions/forms/Wizard/style/dnb-wizard-layout.css +0 -1
  323. package/es/extensions/forms/Wizard/style/dnb-wizard-layout.min.css +1 -1
  324. package/es/extensions/forms/Wizard/style/dnb-wizard-layout.scss +0 -1
  325. package/es/extensions/forms/Wizard/style/themes/dnb-wizard-layout-theme-sbanken.css +1 -0
  326. package/es/extensions/forms/Wizard/style/themes/dnb-wizard-layout-theme-sbanken.min.css +0 -0
  327. package/es/extensions/forms/Wizard/style/themes/dnb-wizard-layout-theme-sbanken.scss +1 -0
  328. package/es/extensions/forms/Wizard/style/themes/dnb-wizard-layout-theme-ui.css +3 -0
  329. package/es/extensions/forms/Wizard/style/themes/dnb-wizard-layout-theme-ui.min.css +1 -0
  330. package/es/extensions/forms/Wizard/style/themes/dnb-wizard-layout-theme-ui.scss +7 -0
  331. package/es/extensions/forms/hooks/useFieldProps.js +67 -28
  332. package/es/extensions/forms/hooks/useFieldProps.js.map +1 -1
  333. package/es/extensions/forms/style/dnb-forms.css +4 -5
  334. package/es/extensions/forms/style/dnb-forms.min.css +1 -1
  335. package/es/extensions/forms/types.d.ts +4 -0
  336. package/es/extensions/forms/types.js.map +1 -1
  337. package/es/fragments/drawer-list/DrawerListHelpers.js +5 -2
  338. package/es/fragments/drawer-list/DrawerListHelpers.js.map +1 -1
  339. package/es/shared/Eufemia.d.ts +1 -1
  340. package/es/shared/Eufemia.js +2 -2
  341. package/es/shared/Eufemia.js.map +1 -1
  342. package/es/shared/MediaQuery.js +19 -1
  343. package/es/shared/MediaQuery.js.map +1 -1
  344. package/es/shared/MediaQueryUtils.d.ts +12 -34
  345. package/es/shared/MediaQueryUtils.js +22 -17
  346. package/es/shared/MediaQueryUtils.js.map +1 -1
  347. package/es/shared/component-helper.d.ts +1 -1
  348. package/es/shared/component-helper.js +5 -2
  349. package/es/shared/component-helper.js.map +1 -1
  350. package/es/shared/useMedia.d.ts +7 -2
  351. package/es/shared/useMedia.js +14 -11
  352. package/es/shared/useMedia.js.map +1 -1
  353. package/es/shared/useMediaQuery.js +28 -9
  354. package/es/shared/useMediaQuery.js.map +1 -1
  355. package/es/style/core/scopes.scss +1 -1
  356. package/es/style/dnb-ui-basis.css +2 -3
  357. package/es/style/dnb-ui-basis.min.css +1 -1
  358. package/es/style/dnb-ui-body.css +1 -1
  359. package/es/style/dnb-ui-body.min.css +1 -1
  360. package/es/style/dnb-ui-components.css +17 -29
  361. package/es/style/dnb-ui-components.min.css +3 -3
  362. package/es/style/dnb-ui-core.css +2 -3
  363. package/es/style/dnb-ui-core.min.css +1 -1
  364. package/es/style/dnb-ui-extensions.css +4 -5
  365. package/es/style/dnb-ui-extensions.min.css +1 -1
  366. package/es/style/dnb-ui-forms.css +4 -5
  367. package/es/style/dnb-ui-forms.min.css +1 -1
  368. package/es/style/themes/theme-eiendom/eiendom-theme-components.css +26 -36
  369. package/es/style/themes/theme-eiendom/eiendom-theme-components.min.css +5 -5
  370. package/es/style/themes/theme-eiendom/eiendom-theme-extensions.css +8 -5
  371. package/es/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +2 -2
  372. package/es/style/themes/theme-eiendom/eiendom-theme-extensions.scss +1 -0
  373. package/es/style/themes/theme-eiendom/eiendom-theme-forms.css +8 -5
  374. package/es/style/themes/theme-eiendom/eiendom-theme-forms.min.css +2 -2
  375. package/es/style/themes/theme-eiendom/eiendom-theme-forms.scss +1 -0
  376. package/es/style/themes/theme-sbanken/sbanken-theme-components.css +99 -112
  377. package/es/style/themes/theme-sbanken/sbanken-theme-components.min.css +6 -6
  378. package/es/style/themes/theme-sbanken/sbanken-theme-components.scss +2 -2
  379. package/es/style/themes/theme-sbanken/sbanken-theme-extensions.css +5 -5
  380. package/es/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  381. package/es/style/themes/theme-sbanken/sbanken-theme-extensions.scss +1 -0
  382. package/es/style/themes/theme-sbanken/sbanken-theme-forms.css +5 -5
  383. package/es/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
  384. package/es/style/themes/theme-sbanken/sbanken-theme-forms.scss +1 -0
  385. package/es/style/themes/theme-ui/ui-theme-components.css +26 -36
  386. package/es/style/themes/theme-ui/ui-theme-components.min.css +5 -5
  387. package/es/style/themes/theme-ui/ui-theme-extensions.css +8 -5
  388. package/es/style/themes/theme-ui/ui-theme-extensions.min.css +2 -2
  389. package/es/style/themes/theme-ui/ui-theme-extensions.scss +1 -0
  390. package/es/style/themes/theme-ui/ui-theme-forms.css +8 -5
  391. package/es/style/themes/theme-ui/ui-theme-forms.min.css +2 -2
  392. package/es/style/themes/theme-ui/ui-theme-forms.scss +1 -0
  393. package/esm/dnb-ui-basis.min.mjs +1 -1
  394. package/esm/dnb-ui-components.min.mjs +1 -1
  395. package/esm/dnb-ui-elements.min.mjs +1 -1
  396. package/esm/dnb-ui-extensions.min.mjs +2 -2
  397. package/esm/dnb-ui-lib.min.mjs +1 -1
  398. package/extensions/forms/DataContext/Context.d.ts +19 -9
  399. package/extensions/forms/DataContext/Context.js +2 -2
  400. package/extensions/forms/DataContext/Context.js.map +1 -1
  401. package/extensions/forms/DataContext/Provider/Provider.d.ts +3 -3
  402. package/extensions/forms/DataContext/Provider/Provider.js +68 -32
  403. package/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
  404. package/extensions/forms/DataContext/Provider/ProviderDocs.js +3 -3
  405. package/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
  406. package/extensions/forms/Field/Boolean/Boolean.js +2 -1
  407. package/extensions/forms/Field/Boolean/Boolean.js.map +1 -1
  408. package/extensions/forms/Field/Indeterminate/useDependencePaths.js +7 -7
  409. package/extensions/forms/Field/Indeterminate/useDependencePaths.js.map +1 -1
  410. package/extensions/forms/Field/Number/Number.js +3 -1
  411. package/extensions/forms/Field/Number/Number.js.map +1 -1
  412. package/extensions/forms/Field/PhoneNumber/PhoneNumber.js +1 -1
  413. package/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
  414. package/extensions/forms/FieldBlock/FieldBlock.js +5 -0
  415. package/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
  416. package/extensions/forms/FieldBlock/style/dnb-field-block.css +1 -3
  417. package/extensions/forms/FieldBlock/style/dnb-field-block.min.css +1 -1
  418. package/extensions/forms/FieldBlock/style/dnb-field-block.scss +1 -2
  419. package/extensions/forms/Form/Element/Element.js +1 -1
  420. package/extensions/forms/Form/Element/Element.js.map +1 -1
  421. package/extensions/forms/Form/SubmitButton/SubmitButton.js +3 -3
  422. package/extensions/forms/Form/SubmitButton/SubmitButton.js.map +1 -1
  423. package/extensions/forms/Form/Tools/GenerateSchema.d.ts +8 -0
  424. package/extensions/forms/Form/Tools/GenerateSchema.js +90 -0
  425. package/extensions/forms/Form/Tools/GenerateSchema.js.map +1 -0
  426. package/extensions/forms/Form/Tools/index.d.ts +1 -0
  427. package/extensions/forms/Form/Tools/index.js +1 -0
  428. package/extensions/forms/Form/Tools/index.js.map +1 -0
  429. package/extensions/forms/Form/Visibility/Visibility.d.ts +19 -5
  430. package/extensions/forms/Form/Visibility/Visibility.js +41 -10
  431. package/extensions/forms/Form/Visibility/Visibility.js.map +1 -1
  432. package/extensions/forms/Form/Visibility/VisibilityDocs.js +11 -6
  433. package/extensions/forms/Form/Visibility/VisibilityDocs.js.map +1 -1
  434. package/extensions/forms/Form/data-context/useData.d.ts +1 -1
  435. package/extensions/forms/Form/data-context/useData.js +2 -2
  436. package/extensions/forms/Form/data-context/useData.js.map +1 -1
  437. package/extensions/forms/Form/data-context/useError.d.ts +1 -0
  438. package/extensions/forms/Form/data-context/useError.js +5 -3
  439. package/extensions/forms/Form/data-context/useError.js.map +1 -1
  440. package/extensions/forms/Form/index.d.ts +1 -0
  441. package/extensions/forms/Form/index.js +2 -0
  442. package/extensions/forms/Form/index.js.map +1 -1
  443. package/extensions/forms/Iterate/AnimatedContainer/ElementBlock.d.ts +8 -1
  444. package/extensions/forms/Iterate/AnimatedContainer/ElementBlock.js +4 -3
  445. package/extensions/forms/Iterate/AnimatedContainer/ElementBlock.js.map +1 -1
  446. package/extensions/forms/Iterate/EditContainer/EditContainer.d.ts +2 -1
  447. package/extensions/forms/Iterate/EditContainer/EditContainer.js.map +1 -1
  448. package/extensions/forms/Iterate/EditContainer/EditContainerDocs.js +5 -0
  449. package/extensions/forms/Iterate/EditContainer/EditContainerDocs.js.map +1 -1
  450. package/extensions/forms/Iterate/EditContainer/EditToolbarTools.js +1 -1
  451. package/extensions/forms/Iterate/EditContainer/EditToolbarTools.js.map +1 -1
  452. package/extensions/forms/Iterate/Toolbar/Toolbar.js +1 -1
  453. package/extensions/forms/Iterate/Toolbar/Toolbar.js.map +1 -1
  454. package/extensions/forms/Iterate/ViewContainer/ViewContainer.d.ts +2 -1
  455. package/extensions/forms/Iterate/ViewContainer/ViewContainer.js.map +1 -1
  456. package/extensions/forms/Iterate/ViewContainer/ViewContainerDocs.js +5 -0
  457. package/extensions/forms/Iterate/ViewContainer/ViewContainerDocs.js.map +1 -1
  458. package/extensions/forms/Iterate/ViewContainer/ViewToolbarTools.js +1 -1
  459. package/extensions/forms/Iterate/ViewContainer/ViewToolbarTools.js.map +1 -1
  460. package/extensions/forms/Iterate/style/dnb-form-iterate.css +3 -1
  461. package/extensions/forms/Iterate/style/dnb-form-iterate.min.css +1 -1
  462. package/extensions/forms/Iterate/style/dnb-form-iterate.scss +4 -1
  463. package/extensions/forms/ValueBlock/ValueBlock.js +4 -2
  464. package/extensions/forms/ValueBlock/ValueBlock.js.map +1 -1
  465. package/extensions/forms/Wizard/Container/WizardContainer.d.ts +31 -2
  466. package/extensions/forms/Wizard/Container/WizardContainer.js +102 -32
  467. package/extensions/forms/Wizard/Container/WizardContainer.js.map +1 -1
  468. package/extensions/forms/Wizard/Context/WizardContext.d.ts +4 -0
  469. package/extensions/forms/Wizard/Context/WizardContext.js.map +1 -1
  470. package/extensions/forms/Wizard/Step/Step.d.ts +6 -1
  471. package/extensions/forms/Wizard/Step/Step.js +9 -5
  472. package/extensions/forms/Wizard/Step/Step.js.map +1 -1
  473. package/extensions/forms/Wizard/style/dnb-wizard-layout.css +0 -1
  474. package/extensions/forms/Wizard/style/dnb-wizard-layout.min.css +1 -1
  475. package/extensions/forms/Wizard/style/dnb-wizard-layout.scss +0 -1
  476. package/extensions/forms/Wizard/style/themes/dnb-wizard-layout-theme-sbanken.css +1 -0
  477. package/extensions/forms/Wizard/style/themes/dnb-wizard-layout-theme-sbanken.min.css +0 -0
  478. package/extensions/forms/Wizard/style/themes/dnb-wizard-layout-theme-sbanken.scss +1 -0
  479. package/extensions/forms/Wizard/style/themes/dnb-wizard-layout-theme-ui.css +3 -0
  480. package/extensions/forms/Wizard/style/themes/dnb-wizard-layout-theme-ui.min.css +1 -0
  481. package/extensions/forms/Wizard/style/themes/dnb-wizard-layout-theme-ui.scss +7 -0
  482. package/extensions/forms/hooks/useFieldProps.js +70 -31
  483. package/extensions/forms/hooks/useFieldProps.js.map +1 -1
  484. package/extensions/forms/style/dnb-forms.css +4 -5
  485. package/extensions/forms/style/dnb-forms.min.css +1 -1
  486. package/extensions/forms/types.d.ts +4 -0
  487. package/extensions/forms/types.js.map +1 -1
  488. package/fragments/drawer-list/DrawerListHelpers.js +5 -2
  489. package/fragments/drawer-list/DrawerListHelpers.js.map +1 -1
  490. package/package.json +1 -1
  491. package/shared/Eufemia.d.ts +1 -1
  492. package/shared/Eufemia.js +2 -2
  493. package/shared/Eufemia.js.map +1 -1
  494. package/shared/MediaQuery.js +19 -1
  495. package/shared/MediaQuery.js.map +1 -1
  496. package/shared/MediaQueryUtils.d.ts +12 -34
  497. package/shared/MediaQueryUtils.js +22 -12
  498. package/shared/MediaQueryUtils.js.map +1 -1
  499. package/shared/component-helper.d.ts +1 -1
  500. package/shared/component-helper.js +5 -1
  501. package/shared/component-helper.js.map +1 -1
  502. package/shared/useMedia.d.ts +7 -2
  503. package/shared/useMedia.js +14 -11
  504. package/shared/useMedia.js.map +1 -1
  505. package/shared/useMediaQuery.js +28 -9
  506. package/shared/useMediaQuery.js.map +1 -1
  507. package/style/core/scopes.scss +1 -1
  508. package/style/dnb-ui-basis.css +2 -3
  509. package/style/dnb-ui-basis.min.css +1 -1
  510. package/style/dnb-ui-body.css +1 -1
  511. package/style/dnb-ui-body.min.css +1 -1
  512. package/style/dnb-ui-components.css +17 -29
  513. package/style/dnb-ui-components.min.css +3 -3
  514. package/style/dnb-ui-core.css +2 -3
  515. package/style/dnb-ui-core.min.css +1 -1
  516. package/style/dnb-ui-extensions.css +4 -5
  517. package/style/dnb-ui-extensions.min.css +1 -1
  518. package/style/dnb-ui-forms.css +4 -5
  519. package/style/dnb-ui-forms.min.css +1 -1
  520. package/style/themes/theme-eiendom/eiendom-theme-components.css +26 -36
  521. package/style/themes/theme-eiendom/eiendom-theme-components.min.css +5 -5
  522. package/style/themes/theme-eiendom/eiendom-theme-extensions.css +8 -5
  523. package/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +2 -2
  524. package/style/themes/theme-eiendom/eiendom-theme-extensions.scss +1 -0
  525. package/style/themes/theme-eiendom/eiendom-theme-forms.css +8 -5
  526. package/style/themes/theme-eiendom/eiendom-theme-forms.min.css +2 -2
  527. package/style/themes/theme-eiendom/eiendom-theme-forms.scss +1 -0
  528. package/style/themes/theme-sbanken/sbanken-theme-components.css +99 -112
  529. package/style/themes/theme-sbanken/sbanken-theme-components.min.css +6 -6
  530. package/style/themes/theme-sbanken/sbanken-theme-components.scss +2 -2
  531. package/style/themes/theme-sbanken/sbanken-theme-extensions.css +5 -5
  532. package/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
  533. package/style/themes/theme-sbanken/sbanken-theme-extensions.scss +1 -0
  534. package/style/themes/theme-sbanken/sbanken-theme-forms.css +5 -5
  535. package/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
  536. package/style/themes/theme-sbanken/sbanken-theme-forms.scss +1 -0
  537. package/style/themes/theme-ui/ui-theme-components.css +26 -36
  538. package/style/themes/theme-ui/ui-theme-components.min.css +5 -5
  539. package/style/themes/theme-ui/ui-theme-extensions.css +8 -5
  540. package/style/themes/theme-ui/ui-theme-extensions.min.css +2 -2
  541. package/style/themes/theme-ui/ui-theme-extensions.scss +1 -0
  542. package/style/themes/theme-ui/ui-theme-forms.css +8 -5
  543. package/style/themes/theme-ui/ui-theme-forms.min.css +2 -2
  544. package/style/themes/theme-ui/ui-theme-forms.scss +1 -0
  545. package/umd/dnb-ui-basis.min.js +1 -1
  546. package/umd/dnb-ui-components.min.js +1 -1
  547. package/umd/dnb-ui-elements.min.js +1 -1
  548. package/umd/dnb-ui-extensions.min.js +2 -2
  549. package/umd/dnb-ui-lib.min.js +1 -1
@@ -11,12 +11,22 @@ export type EventListenerCall = {
11
11
  callback: () => any;
12
12
  };
13
13
  export type FilterDataHandler<Data> = (data: Data, filter: FilterData) => Partial<Data>;
14
- export type FilterData = (path: Path, value: any, props: FieldProps, internal: {
15
- error: Error | undefined;
16
- }) => boolean | undefined;
17
- export type TransformData = (path: Path, value: any, props: FieldProps, internal: {
18
- error: Error | undefined;
19
- }) => any;
14
+ export type FilterDataHandlerCallback<R> = (parameters: FilterDataHandlerParameters) => R;
15
+ export type FilterDataHandlerParameters = FilterDataPathConditionParameters & {
16
+ path: Path;
17
+ };
18
+ export type FilterDataPathCondition<Data = unknown> = (parameters: FilterDataPathConditionParameters<Data>) => boolean | undefined;
19
+ export type FilterDataPathConditionParameters<Data = unknown> = {
20
+ value: unknown;
21
+ props: FieldProps;
22
+ data: Data;
23
+ internal: {
24
+ error: Error | undefined;
25
+ };
26
+ };
27
+ export type FilterDataPathObject<Data> = Record<Path, FilterDataPathCondition<Data> | boolean | undefined>;
28
+ export type FilterData<Data = unknown> = FilterDataPathObject<Data> | FilterDataHandlerCallback<boolean | undefined>;
29
+ export type TransformData = FilterDataHandlerCallback<unknown>;
20
30
  export interface ContextState {
21
31
  id?: Identifier;
22
32
  hasContext: boolean;
@@ -39,7 +49,7 @@ export interface ContextState {
39
49
  setShowAllErrors: (showAllErrors: boolean) => void;
40
50
  hasErrors: () => boolean;
41
51
  hasFieldState: (state: SubmitState) => boolean;
42
- checkFieldStateFor: (path: Path, state: SubmitState) => boolean;
52
+ hasFieldError: (path: Path) => boolean;
43
53
  setFieldState: (path: Path, fieldState: SubmitState) => void;
44
54
  setFieldError: (path: Path, error: Error | FormError) => void;
45
55
  fieldPropsRef?: React.MutableRefObject<Record<string, FieldProps>>;
@@ -62,9 +72,9 @@ export interface ContextState {
62
72
  disabled?: boolean;
63
73
  required?: boolean;
64
74
  submitState: Partial<EventStateObject>;
65
- _isInsideFormElement?: boolean;
75
+ isInsideFormElement?: boolean;
76
+ prerenderFieldProps?: boolean;
66
77
  props: ProviderProps<unknown>;
67
- fieldProps?: Record<Path, unknown>;
68
78
  }
69
79
  export declare const defaultContextState: ContextState;
70
80
  declare const Context: React.Context<ContextState>;
@@ -23,13 +23,13 @@ export const defaultContextState = {
23
23
  handleUnMountField: () => null,
24
24
  hasErrors: () => false,
25
25
  hasFieldState: () => false,
26
- checkFieldStateFor: () => false,
26
+ hasFieldError: () => false,
27
27
  setFieldState: () => null,
28
28
  setFieldError: () => null,
29
29
  setProps: () => null,
30
30
  ajvInstance: makeAjvInstance(),
31
31
  contextErrorMessages: undefined,
32
- _isInsideFormElement: false,
32
+ isInsideFormElement: false,
33
33
  props: null
34
34
  };
35
35
  const Context = React.createContext(defaultContextState);
@@ -1 +1 @@
1
- {"version":3,"file":"Context.js","names":["React","makeAjvInstance","defaultContextState","hasContext","data","undefined","schema","submitState","handlePathChange","handlePathChangeUnvalidated","updateDataValue","setData","validateData","handleSubmit","scrollToTop","showAllErrors","formState","setFormState","setSubmitState","setFieldEventListener","handleSubmitCall","setShowAllErrors","handleMountField","handleUnMountField","hasErrors","hasFieldState","checkFieldStateFor","setFieldState","setFieldError","setProps","ajvInstance","contextErrorMessages","_isInsideFormElement","props","Context","createContext"],"sources":["../../../../../src/extensions/forms/DataContext/Context.ts"],"sourcesContent":["import React from 'react'\nimport { Ajv, makeAjvInstance } from '../utils/ajv'\nimport {\n AllJSONSchemaVersions,\n CustomErrorMessagesWithPaths,\n SubmitState,\n Path,\n EventStateObject,\n EventReturnWithStateObject,\n Identifier,\n FieldProps,\n FormError,\n} from '../types'\nimport { Props as ProviderProps } from './Provider'\n\ntype HandleSubmitProps = {\n formElement?: HTMLFormElement\n}\n\nexport type EventListenerCall = {\n path: Path\n type: 'onSubmit'\n callback: () => any\n}\n\nexport type FilterDataHandler<Data> = (\n data: Data,\n filter: FilterData\n) => Partial<Data>\nexport type FilterData = (\n path: Path,\n value: any,\n props: FieldProps,\n internal: {\n error: Error | undefined\n }\n) => boolean | undefined\nexport type TransformData = (\n path: Path,\n value: any,\n props: FieldProps,\n internal: {\n error: Error | undefined\n }\n) => any\n\nexport interface ContextState {\n id?: Identifier\n hasContext: boolean\n /** The dataset for the form / form wizard */\n data: any\n /** Should the form validate data before submitting? */\n errors?: Record<string, Error>\n /** Will set autoComplete=\"on\" on each nested Field.String and Field.Number */\n autoComplete?: boolean\n handlePathChange: (\n path: Path,\n value?: any\n ) =>\n | EventReturnWithStateObject\n | unknown\n | Promise<EventReturnWithStateObject | unknown>\n handlePathChangeUnvalidated: (path: Path, value: any) => void\n updateDataValue: (path: Path, value: any) => void\n setData: (data: any) => void\n mutateDataHandler?: (data: any, mutate: TransformData) => any\n filterDataHandler?: (data: any, filter: FilterData) => any\n validateData: () => void\n handleSubmit: (props?: HandleSubmitProps) => any\n scrollToTop: () => void\n // Error status\n showAllErrors: boolean\n setShowAllErrors: (showAllErrors: boolean) => void\n hasErrors: () => boolean\n hasFieldState: (state: SubmitState) => boolean\n checkFieldStateFor: (path: Path, state: SubmitState) => boolean\n setFieldState: (path: Path, fieldState: SubmitState) => void\n setFieldError: (path: Path, error: Error | FormError) => void\n fieldPropsRef?: React.MutableRefObject<Record<string, FieldProps>>\n handleMountField: (path: Path) => void\n handleUnMountField: (path: Path) => void\n formState: SubmitState\n setFormState?: (state: SubmitState) => void\n setSubmitState?: (state: EventStateObject) => void\n handleSubmitCall: ({\n onSubmit,\n enableAsyncBehaviour,\n skipFieldValidation,\n skipErrorCheck,\n }: {\n onSubmit: () =>\n | EventReturnWithStateObject\n | void\n | Promise<EventReturnWithStateObject | void>\n enableAsyncBehaviour: boolean\n skipFieldValidation?: boolean\n skipErrorCheck?: boolean\n }) => void\n setFieldEventListener: (\n path: EventListenerCall['path'],\n type: EventListenerCall['type'],\n callback: EventListenerCall['callback']\n ) => void\n setProps: (path: Path, props: any) => void\n ajvInstance: Ajv\n contextErrorMessages: CustomErrorMessagesWithPaths\n schema: AllJSONSchemaVersions\n disabled?: boolean\n required?: boolean\n submitState: Partial<EventStateObject>\n _isInsideFormElement?: boolean\n props: ProviderProps<unknown>\n fieldProps?: Record<Path, unknown>\n}\n\nexport const defaultContextState: ContextState = {\n hasContext: false,\n data: undefined,\n schema: undefined,\n submitState: undefined,\n handlePathChange: () => null,\n handlePathChangeUnvalidated: () => null,\n updateDataValue: () => null,\n setData: () => null,\n validateData: () => null,\n handleSubmit: () => null,\n scrollToTop: () => null,\n showAllErrors: false,\n formState: undefined,\n setFormState: () => null,\n setSubmitState: () => null,\n setFieldEventListener: () => null,\n handleSubmitCall: () => null,\n setShowAllErrors: () => null,\n handleMountField: () => null,\n handleUnMountField: () => null,\n hasErrors: () => false,\n hasFieldState: () => false,\n checkFieldStateFor: () => false,\n setFieldState: () => null,\n setFieldError: () => null,\n setProps: () => null,\n ajvInstance: makeAjvInstance(),\n contextErrorMessages: undefined,\n _isInsideFormElement: false,\n props: null,\n}\n\nconst Context = React.createContext<ContextState>(defaultContextState)\n\nexport default Context\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAAcC,eAAe,QAAQ,cAAc;AAkHnD,OAAO,MAAMC,mBAAiC,GAAG;EAC/CC,UAAU,EAAE,KAAK;EACjBC,IAAI,EAAEC,SAAS;EACfC,MAAM,EAAED,SAAS;EACjBE,WAAW,EAAEF,SAAS;EACtBG,gBAAgB,EAAEA,CAAA,KAAM,IAAI;EAC5BC,2BAA2B,EAAEA,CAAA,KAAM,IAAI;EACvCC,eAAe,EAAEA,CAAA,KAAM,IAAI;EAC3BC,OAAO,EAAEA,CAAA,KAAM,IAAI;EACnBC,YAAY,EAAEA,CAAA,KAAM,IAAI;EACxBC,YAAY,EAAEA,CAAA,KAAM,IAAI;EACxBC,WAAW,EAAEA,CAAA,KAAM,IAAI;EACvBC,aAAa,EAAE,KAAK;EACpBC,SAAS,EAAEX,SAAS;EACpBY,YAAY,EAAEA,CAAA,KAAM,IAAI;EACxBC,cAAc,EAAEA,CAAA,KAAM,IAAI;EAC1BC,qBAAqB,EAAEA,CAAA,KAAM,IAAI;EACjCC,gBAAgB,EAAEA,CAAA,KAAM,IAAI;EAC5BC,gBAAgB,EAAEA,CAAA,KAAM,IAAI;EAC5BC,gBAAgB,EAAEA,CAAA,KAAM,IAAI;EAC5BC,kBAAkB,EAAEA,CAAA,KAAM,IAAI;EAC9BC,SAAS,EAAEA,CAAA,KAAM,KAAK;EACtBC,aAAa,EAAEA,CAAA,KAAM,KAAK;EAC1BC,kBAAkB,EAAEA,CAAA,KAAM,KAAK;EAC/BC,aAAa,EAAEA,CAAA,KAAM,IAAI;EACzBC,aAAa,EAAEA,CAAA,KAAM,IAAI;EACzBC,QAAQ,EAAEA,CAAA,KAAM,IAAI;EACpBC,WAAW,EAAE7B,eAAe,CAAC,CAAC;EAC9B8B,oBAAoB,EAAE1B,SAAS;EAC/B2B,oBAAoB,EAAE,KAAK;EAC3BC,KAAK,EAAE;AACT,CAAC;AAED,MAAMC,OAAO,GAAGlC,KAAK,CAACmC,aAAa,CAAejC,mBAAmB,CAAC;AAEtE,eAAegC,OAAO"}
1
+ {"version":3,"file":"Context.js","names":["React","makeAjvInstance","defaultContextState","hasContext","data","undefined","schema","submitState","handlePathChange","handlePathChangeUnvalidated","updateDataValue","setData","validateData","handleSubmit","scrollToTop","showAllErrors","formState","setFormState","setSubmitState","setFieldEventListener","handleSubmitCall","setShowAllErrors","handleMountField","handleUnMountField","hasErrors","hasFieldState","hasFieldError","setFieldState","setFieldError","setProps","ajvInstance","contextErrorMessages","isInsideFormElement","props","Context","createContext"],"sources":["../../../../../src/extensions/forms/DataContext/Context.ts"],"sourcesContent":["import React from 'react'\nimport { Ajv, makeAjvInstance } from '../utils/ajv'\nimport {\n AllJSONSchemaVersions,\n CustomErrorMessagesWithPaths,\n SubmitState,\n Path,\n EventStateObject,\n EventReturnWithStateObject,\n Identifier,\n FieldProps,\n FormError,\n} from '../types'\nimport { Props as ProviderProps } from './Provider'\n\ntype HandleSubmitProps = {\n formElement?: HTMLFormElement\n}\n\nexport type EventListenerCall = {\n path: Path\n type: 'onSubmit'\n callback: () => any\n}\n\nexport type FilterDataHandler<Data> = (\n data: Data,\n filter: FilterData\n) => Partial<Data>\nexport type FilterDataHandlerCallback<R> = (\n parameters: FilterDataHandlerParameters\n) => R\nexport type FilterDataHandlerParameters =\n FilterDataPathConditionParameters & {\n path: Path\n }\nexport type FilterDataPathCondition<Data = unknown> = (\n parameters: FilterDataPathConditionParameters<Data>\n) => boolean | undefined\nexport type FilterDataPathConditionParameters<Data = unknown> = {\n value: unknown\n props: FieldProps\n data: Data\n internal: {\n error: Error | undefined\n }\n}\nexport type FilterDataPathObject<Data> = Record<\n Path,\n FilterDataPathCondition<Data> | boolean | undefined\n>\nexport type FilterData<Data = unknown> =\n | FilterDataPathObject<Data>\n | FilterDataHandlerCallback<boolean | undefined>\nexport type TransformData = FilterDataHandlerCallback<unknown>\n\nexport interface ContextState {\n id?: Identifier\n hasContext: boolean\n /** The dataset for the form / form wizard */\n data: any\n /** Should the form validate data before submitting? */\n errors?: Record<string, Error>\n /** Will set autoComplete=\"on\" on each nested Field.String and Field.Number */\n autoComplete?: boolean\n handlePathChange: (\n path: Path,\n value?: any\n ) =>\n | EventReturnWithStateObject\n | unknown\n | Promise<EventReturnWithStateObject | unknown>\n handlePathChangeUnvalidated: (path: Path, value: any) => void\n updateDataValue: (path: Path, value: any) => void\n setData: (data: any) => void\n mutateDataHandler?: (data: any, mutate: TransformData) => any\n filterDataHandler?: (data: any, filter: FilterData) => any\n validateData: () => void\n handleSubmit: (props?: HandleSubmitProps) => any\n scrollToTop: () => void\n // Error status\n showAllErrors: boolean\n setShowAllErrors: (showAllErrors: boolean) => void\n hasErrors: () => boolean\n hasFieldState: (state: SubmitState) => boolean\n hasFieldError: (path: Path) => boolean\n setFieldState: (path: Path, fieldState: SubmitState) => void\n setFieldError: (path: Path, error: Error | FormError) => void\n fieldPropsRef?: React.MutableRefObject<Record<string, FieldProps>>\n handleMountField: (path: Path) => void\n handleUnMountField: (path: Path) => void\n formState: SubmitState\n setFormState?: (state: SubmitState) => void\n setSubmitState?: (state: EventStateObject) => void\n handleSubmitCall: ({\n onSubmit,\n enableAsyncBehaviour,\n skipFieldValidation,\n skipErrorCheck,\n }: {\n onSubmit: () =>\n | EventReturnWithStateObject\n | void\n | Promise<EventReturnWithStateObject | void>\n enableAsyncBehaviour: boolean\n skipFieldValidation?: boolean\n skipErrorCheck?: boolean\n }) => void\n setFieldEventListener: (\n path: EventListenerCall['path'],\n type: EventListenerCall['type'],\n callback: EventListenerCall['callback']\n ) => void\n setProps: (path: Path, props: any) => void\n ajvInstance: Ajv\n contextErrorMessages: CustomErrorMessagesWithPaths\n schema: AllJSONSchemaVersions\n disabled?: boolean\n required?: boolean\n submitState: Partial<EventStateObject>\n isInsideFormElement?: boolean\n prerenderFieldProps?: boolean\n props: ProviderProps<unknown>\n}\n\nexport const defaultContextState: ContextState = {\n hasContext: false,\n data: undefined,\n schema: undefined,\n submitState: undefined,\n handlePathChange: () => null,\n handlePathChangeUnvalidated: () => null,\n updateDataValue: () => null,\n setData: () => null,\n validateData: () => null,\n handleSubmit: () => null,\n scrollToTop: () => null,\n showAllErrors: false,\n formState: undefined,\n setFormState: () => null,\n setSubmitState: () => null,\n setFieldEventListener: () => null,\n handleSubmitCall: () => null,\n setShowAllErrors: () => null,\n handleMountField: () => null,\n handleUnMountField: () => null,\n hasErrors: () => false,\n hasFieldState: () => false,\n hasFieldError: () => false,\n setFieldState: () => null,\n setFieldError: () => null,\n setProps: () => null,\n ajvInstance: makeAjvInstance(),\n contextErrorMessages: undefined,\n isInsideFormElement: false,\n props: null,\n}\n\nconst Context = React.createContext<ContextState>(defaultContextState)\n\nexport default Context\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAAcC,eAAe,QAAQ,cAAc;AA4HnD,OAAO,MAAMC,mBAAiC,GAAG;EAC/CC,UAAU,EAAE,KAAK;EACjBC,IAAI,EAAEC,SAAS;EACfC,MAAM,EAAED,SAAS;EACjBE,WAAW,EAAEF,SAAS;EACtBG,gBAAgB,EAAEA,CAAA,KAAM,IAAI;EAC5BC,2BAA2B,EAAEA,CAAA,KAAM,IAAI;EACvCC,eAAe,EAAEA,CAAA,KAAM,IAAI;EAC3BC,OAAO,EAAEA,CAAA,KAAM,IAAI;EACnBC,YAAY,EAAEA,CAAA,KAAM,IAAI;EACxBC,YAAY,EAAEA,CAAA,KAAM,IAAI;EACxBC,WAAW,EAAEA,CAAA,KAAM,IAAI;EACvBC,aAAa,EAAE,KAAK;EACpBC,SAAS,EAAEX,SAAS;EACpBY,YAAY,EAAEA,CAAA,KAAM,IAAI;EACxBC,cAAc,EAAEA,CAAA,KAAM,IAAI;EAC1BC,qBAAqB,EAAEA,CAAA,KAAM,IAAI;EACjCC,gBAAgB,EAAEA,CAAA,KAAM,IAAI;EAC5BC,gBAAgB,EAAEA,CAAA,KAAM,IAAI;EAC5BC,gBAAgB,EAAEA,CAAA,KAAM,IAAI;EAC5BC,kBAAkB,EAAEA,CAAA,KAAM,IAAI;EAC9BC,SAAS,EAAEA,CAAA,KAAM,KAAK;EACtBC,aAAa,EAAEA,CAAA,KAAM,KAAK;EAC1BC,aAAa,EAAEA,CAAA,KAAM,KAAK;EAC1BC,aAAa,EAAEA,CAAA,KAAM,IAAI;EACzBC,aAAa,EAAEA,CAAA,KAAM,IAAI;EACzBC,QAAQ,EAAEA,CAAA,KAAM,IAAI;EACpBC,WAAW,EAAE7B,eAAe,CAAC,CAAC;EAC9B8B,oBAAoB,EAAE1B,SAAS;EAC/B2B,mBAAmB,EAAE,KAAK;EAC1BC,KAAK,EAAE;AACT,CAAC;AAED,MAAMC,OAAO,GAAGlC,KAAK,CAACmC,aAAa,CAAejC,mBAAmB,CAAC;AAEtE,eAAegC,OAAO"}
@@ -34,7 +34,7 @@ export interface Props<Data extends JsonObject> {
34
34
  */
35
35
  errorMessages?: CustomErrorMessagesWithPaths;
36
36
  /**
37
- * Filter the `onSubmit` output data, based on your criteria: `(path, value, props, internal) => !props?.disabled`. It will iterate on each data entry (/path). Return false to exclude the entry.
37
+ * Filter the `onSubmit` output data, based on your criteria: `({ path, value, data, props, internal }) => !props?.disabled`. It will iterate on each data entry (/path). Return false to exclude the entry.
38
38
  */
39
39
  filterSubmitData?: FilterData;
40
40
  /**
@@ -42,11 +42,11 @@ export interface Props<Data extends JsonObject> {
42
42
  */
43
43
  filterData?: FilterData;
44
44
  /**
45
- * Transform the data context (internally as well) based on your criteria: `(path, value, props, internal) => 'new value'`. It will iterate on each data entry (/path).
45
+ * Transform the data context (internally as well) based on your criteria: `({ path, value, data, props, internal }) => 'new value'`. It will iterate on each data entry (/path).
46
46
  */
47
47
  transformIn?: TransformData;
48
48
  /**
49
- * Mutate the data before it enters onSubmit or onChange based on your criteria: `(path, value, props, internal) => 'new value'`. It will iterate on each data entry (/path).
49
+ * Mutate the data before it enters onSubmit or onChange based on your criteria: `({ path, value, data, props, internal }) => 'new value'`. It will iterate on each data entry (/path).
50
50
  */
51
51
  transformOut?: TransformData;
52
52
  /**
@@ -112,6 +112,11 @@ export default function Provider(props) {
112
112
  return checkFieldStateFor(path, state);
113
113
  });
114
114
  }, [checkFieldStateFor]);
115
+ const hasFieldError = useCallback(path => {
116
+ return mountedFieldPathsRef.current.some(p => {
117
+ return p === path && checkFieldStateFor(p, 'error');
118
+ });
119
+ }, [checkFieldStateFor]);
115
120
  const hasErrors = useCallback(() => {
116
121
  return hasFieldState('error');
117
122
  }, [hasFieldState]);
@@ -124,28 +129,60 @@ export default function Provider(props) {
124
129
  forceUpdate();
125
130
  }
126
131
  }, []);
127
- const mutateDataHandler = useCallback(function (data, fn) {
132
+ const mutateDataHandler = useCallback(function (data, filter) {
128
133
  let remove = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
129
- if (fn) {
134
+ const mutate = (path, result) => {
135
+ if (remove) {
136
+ if (result === false) {
137
+ data = structuredClone(data);
138
+ pointer.remove(data, path);
139
+ }
140
+ } else {
141
+ if (typeof result !== 'undefined') {
142
+ data = structuredClone(data);
143
+ pointer.set(data, path, result);
144
+ }
145
+ }
146
+ };
147
+ if (typeof filter === 'function') {
130
148
  Object.entries(fieldPropsRef.current).forEach(_ref => {
131
149
  let [path, props] = _ref;
132
150
  const exists = pointer.has(data, path);
133
151
  if (exists) {
134
152
  var _fieldErrorRef$curren;
135
- const result = fn(path, pointer.get(data, path), props, {
153
+ const value = pointer.get(data, path);
154
+ const internal = {
136
155
  error: (_fieldErrorRef$curren = fieldErrorRef.current) === null || _fieldErrorRef$curren === void 0 ? void 0 : _fieldErrorRef$curren[path]
156
+ };
157
+ const result = filter({
158
+ path,
159
+ value,
160
+ data: internalDataRef.current,
161
+ props,
162
+ internal
137
163
  });
138
- if (remove) {
139
- if (result === false) {
140
- data = structuredClone(data);
141
- pointer.remove(data, path);
142
- }
143
- } else {
144
- if (typeof result !== 'undefined') {
145
- data = structuredClone(data);
146
- pointer.set(data, path, result);
147
- }
148
- }
164
+ mutate(path, result);
165
+ }
166
+ });
167
+ return data;
168
+ } else if (filter) {
169
+ Object.entries(filter).forEach(_ref2 => {
170
+ let [path, condition] = _ref2;
171
+ const exists = pointer.has(data, path);
172
+ if (exists) {
173
+ var _fieldPropsRef$curren, _fieldErrorRef$curren2;
174
+ const value = pointer.get(data, path);
175
+ const props = (_fieldPropsRef$curren = fieldPropsRef.current) === null || _fieldPropsRef$curren === void 0 ? void 0 : _fieldPropsRef$curren[path];
176
+ const internal = {
177
+ error: (_fieldErrorRef$curren2 = fieldErrorRef.current) === null || _fieldErrorRef$curren2 === void 0 ? void 0 : _fieldErrorRef$curren2[path]
178
+ };
179
+ const result = typeof condition === 'function' ? condition({
180
+ value,
181
+ data: internalDataRef.current,
182
+ props,
183
+ internal
184
+ }) : condition;
185
+ mutate(path, result);
149
186
  }
150
187
  });
151
188
  return data;
@@ -161,18 +198,15 @@ export default function Provider(props) {
161
198
  }, [filterData, filterSubmitData, mutateDataHandler]);
162
199
  const fieldPropsRef = useRef({});
163
200
  const setProps = useCallback((path, props) => {
164
- fieldPropsRef.current[path] = _objectSpread(_objectSpread({}, fieldPropsRef.current[path]), props);
165
- for (const key in fieldPropsRef.current[path]) {
166
- if (!Object.prototype.hasOwnProperty.call(props, key)) {
167
- delete fieldPropsRef.current[path][key];
168
- }
169
- }
201
+ fieldPropsRef.current[path] = props;
170
202
  }, []);
171
203
  const hasFieldWithAsyncValidator = useCallback(() => {
172
204
  for (const path in fieldPropsRef.current) {
173
- const props = fieldPropsRef.current[path];
174
- if (isAsync(props.validator) || isAsync(props.onBlurValidator)) {
175
- return true;
205
+ if (mountedFieldPathsRef.current.includes(path)) {
206
+ const props = fieldPropsRef.current[path];
207
+ if (isAsync(props.validator) || isAsync(props.onBlurValidator)) {
208
+ return true;
209
+ }
176
210
  }
177
211
  }
178
212
  return false;
@@ -222,6 +256,7 @@ export default function Provider(props) {
222
256
  extendAttachment === null || extendAttachment === void 0 ? void 0 : extendAttachment({
223
257
  filterDataHandler,
224
258
  hasErrors,
259
+ hasFieldError,
225
260
  setShowAllErrors,
226
261
  setSubmitState
227
262
  });
@@ -229,7 +264,7 @@ export default function Provider(props) {
229
264
  rerenderUseDataHook === null || rerenderUseDataHook === void 0 ? void 0 : rerenderUseDataHook();
230
265
  }
231
266
  }
232
- }, [extendAttachment, filterData, filterDataHandler, filterSubmitData, hasErrors, id, rerenderUseDataHook, setShowAllErrors, setSubmitState]);
267
+ }, [extendAttachment, filterData, filterDataHandler, filterSubmitData, hasErrors, hasFieldError, id, rerenderUseDataHook, setShowAllErrors, setSubmitState]);
233
268
  const storeInSession = useMemo(() => {
234
269
  return debounce(() => {
235
270
  var _window$sessionStorag2;
@@ -302,11 +337,7 @@ export default function Provider(props) {
302
337
  mountedFieldPathsRef.current = addListPath(mountedFieldPathsRef.current, path);
303
338
  }, []);
304
339
  const handleUnMountField = useCallback(path => {
305
- var _fieldPropsRef$curren;
306
340
  mountedFieldPathsRef.current = removeListPath(mountedFieldPathsRef.current, path);
307
- if ((_fieldPropsRef$curren = fieldPropsRef.current) !== null && _fieldPropsRef$curren !== void 0 && _fieldPropsRef$curren[path]) {
308
- delete fieldPropsRef.current[path];
309
- }
310
341
  }, []);
311
342
  const scrollToTop = useCallback(() => {
312
343
  if (typeof window !== 'undefined') {
@@ -436,11 +467,11 @@ export default function Provider(props) {
436
467
  }, [filterDataHandler, handleSubmitCall, id, mutateDataHandler, onSubmit, onSubmitComplete, scrollToTop, scrollTopOnSubmit, sessionStorageId, setSharedData, transformOut]);
437
468
  const fieldEventListenersRef = useRef([]);
438
469
  const setFieldEventListener = useCallback((path, type, callback) => {
439
- fieldEventListenersRef.current = fieldEventListenersRef.current.filter(_ref2 => {
470
+ fieldEventListenersRef.current = fieldEventListenersRef.current.filter(_ref3 => {
440
471
  let {
441
472
  path: p,
442
473
  type: t
443
- } = _ref2;
474
+ } = _ref3;
444
475
  return !(p === path && t === type);
445
476
  });
446
477
  fieldEventListenersRef.current.push({
@@ -506,8 +537,8 @@ export default function Provider(props) {
506
537
  setFieldError,
507
538
  setProps,
508
539
  hasErrors,
540
+ hasFieldError,
509
541
  hasFieldState,
510
- checkFieldStateFor,
511
542
  validateData,
512
543
  updateDataValue,
513
544
  setData,
@@ -524,7 +555,6 @@ export default function Provider(props) {
524
555
  showAllErrors: showAllErrorsRef.current,
525
556
  fieldPropsRef,
526
557
  ajvInstance: ajvRef.current,
527
- fieldProps: fieldPropsRef.current,
528
558
  id,
529
559
  data: internalDataRef.current,
530
560
  props
@@ -572,6 +602,7 @@ function useFormStatusBuffer(props) {
572
602
  }
573
603
  }, []);
574
604
  const hadCompleteRef = useRef(false);
605
+ const activeElementRef = useRef(null);
575
606
  useEffect(() => {
576
607
  const isTest = process.env.NODE_ENV === 'test';
577
608
  const minimum = minimumAsyncBehaviorTime !== null && minimumAsyncBehaviorTime !== void 0 ? minimumAsyncBehaviorTime : isTest ? 1 : 1000;
@@ -593,6 +624,7 @@ function useFormStatusBuffer(props) {
593
624
  hadCompleteRef.current = true;
594
625
  }
595
626
  if (formState === 'pending' && stateRef.current !== 'pending') {
627
+ activeElementRef.current = document.activeElement;
596
628
  clear();
597
629
  nowRef.current = Date.now();
598
630
  hadCompleteRef.current = false;
@@ -605,6 +637,10 @@ function useFormStatusBuffer(props) {
605
637
  if (hadCompleteRef.current) {
606
638
  setState('complete');
607
639
  }
640
+ window.requestAnimationFrame(() => {
641
+ var _activeElementRef$cur, _activeElementRef$cur2;
642
+ (_activeElementRef$cur = activeElementRef.current) === null || _activeElementRef$cur === void 0 ? void 0 : (_activeElementRef$cur2 = _activeElementRef$cur.focus) === null || _activeElementRef$cur2 === void 0 ? void 0 : _activeElementRef$cur2.call(_activeElementRef$cur);
643
+ });
608
644
  }, delay);
609
645
  timeoutRef.current.reset = setTimeout(() => {
610
646
  nowRef.current = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"Provider.js","names":["React","useRef","useMemo","useCallback","useReducer","useEffect","pointer","makeAjvInstance","ajvErrorsToFormErrors","debounce","FieldProvider","useMountEffect","useUpdateEffect","isAsync","useSharedState","useTranslation","Context","structuredClone","useLayoutEffect","window","isArrayJsonPointer","Provider","props","_sharedAttachments$da","forceUpdate","id","globalStatusId","defaultData","data","schema","onChange","onPathChange","onSubmit","onSubmitRequest","onSubmitComplete","scrollTopOnSubmit","minimumAsyncBehaviorTime","asyncSubmitTimeout","sessionStorageId","ajvInstance","transformIn","transformOut","filterSubmitData","filterData","locale","translations","required","errorMessages","contextErrorMessages","children","rest","_objectWithoutProperties","_excluded","undefined","console","error","translation","Form","ajvRef","mountedFieldPathsRef","errorsRef","showAllErrorsRef","setShowAllErrors","showAllErrors","current","submitStateRef","setSubmitState","state","Object","assign","formStateRef","setFormState","formState","fieldErrorRef","fieldStateRef","initialData","_window$sessionStorag","sessionDataJSON","sessionStorage","getItem","JSON","parse","internalDataRef","ajvValidatorRef","executeAjvValidator","_ajvValidatorRef$curr","call","errors","validateData","checkFieldStateFor","path","_errorsRef$current","Boolean","Error","hasFieldState","some","hasErrors","setFieldError","setFieldState","fieldState","mutateDataHandler","fn","remove","arguments","length","entries","fieldPropsRef","forEach","_ref","exists","has","_fieldErrorRef$curren","result","get","set","filterDataHandler","filter","setProps","_objectSpread","key","prototype","hasOwnProperty","hasFieldWithAsyncValidator","validator","onBlurValidator","sharedData","sharedAttachments","setSharedData","extendSharedData","extend","extendAttachment","rerenderUseDataHook","cacheRef","shared","hasUsedInitialData","update","storeInSession","_window$sessionStorag2","setItem","stringify","process","env","NODE_ENV","updateDataValue","value","_internalDataRef$curr","givenData","match","newData","e","setData","handlePathChangeUnvalidated","handlePathChange","transformedData","handleMountField","addListPath","handleUnMountField","_fieldPropsRef$curren","removeListPath","scrollToTop","_window","_window$scrollTo","scrollTo","top","behavior","handleSubmitCall","args","enableAsyncBehaviour","skipFieldValidation","skipErrorCheck","asyncBehaviorIsEnabled","type","callback","fieldEventListenersRef","includes","warning","info","requestAnimationFrame","onSubmitContinueRef","handleSubmit","formElement","filteredData","opts","resetForm","_formElement$reset","reset","removeItem","clearData","completeResult","keys","setFieldEventListener","_ref2","p","t","push","_onSubmitContinueRef$","_ajvRef$current","compile","_ajvRef$current2","onTimeout","bufferedFormState","useFormStatusBuffer","waitFor","submitState","disabled","createElement","hasContext","fieldProps","FormStatus","globalStatus","title","errorSummaryTitle","show","paths","concat","thisPath","stateRef","nowRef","timeoutRef","setState","clear","clearTimeout","hadCompleteRef","isTest","minimum","setTimeout","Date","now","offset","Math","max","delay","complete","timeout"],"sources":["../../../../../../src/extensions/forms/DataContext/Provider/Provider.tsx"],"sourcesContent":["import React, {\n useRef,\n useMemo,\n useCallback,\n useReducer,\n useEffect,\n} from 'react'\nimport pointer, { JsonObject } from 'json-pointer'\nimport { ValidateFunction } from 'ajv/dist/2020'\nimport {\n Ajv,\n makeAjvInstance,\n ajvErrorsToFormErrors,\n} from '../../utils/ajv'\nimport {\n FormError,\n CustomErrorMessagesWithPaths,\n AllJSONSchemaVersions,\n FieldProps,\n SubmitState,\n Path,\n EventStateObject,\n OnSubmit,\n OnChange,\n EventReturnWithStateObject,\n} from '../../types'\nimport { debounce } from '../../../../shared/helpers'\nimport FieldProvider from '../../Form/FieldProps'\nimport useMountEffect from '../../../../shared/helpers/useMountEffect'\nimport useUpdateEffect from '../../../../shared/helpers/useUpdateEffect'\nimport { isAsync } from '../../../../shared/helpers/isAsync'\nimport { useSharedState } from '../../../../shared/helpers/useSharedState'\nimport { ContextProps } from '../../../../shared/Context'\nimport useTranslation from '../../hooks/useTranslation'\nimport Context, {\n ContextState,\n EventListenerCall,\n FilterData,\n TransformData,\n} from '../Context'\n\n/**\n * Deprecated, as it is supported by all major browsers and Node.js >=v18\n * So its a question of time, when we will remove this polyfill\n */\nimport structuredClone from '@ungap/structured-clone'\n\n// SSR warning fix: https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\nconst useLayoutEffect =\n typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect\n\nexport interface Props<Data extends JsonObject> {\n /**\n * Unique ID to communicate with the hook Form.useData\n */\n id?: string\n /**\n * Unique ID to connect with a GlobalStatus\n */\n globalStatusId?: string\n /**\n * Default source data, only used if no other source is available, and not leading to updates if changed after mount\n */\n defaultData?: Data\n /**\n * Source data, will be used instead of defaultData, and leading to updates if changed after mount\n */\n data?: Data\n /**\n * JSON Schema to validate the data against.\n */\n schema?: AllJSONSchemaVersions\n /**\n * Custom Ajv instance, if you want to use your own\n */\n ajvInstance?: Ajv\n /**\n * Custom error messages for the whole data set\n */\n errorMessages?: CustomErrorMessagesWithPaths\n /**\n * Filter the `onSubmit` output data, based on your criteria: `(path, value, props, internal) => !props?.disabled`. It will iterate on each data entry (/path). Return false to exclude the entry.\n */\n filterSubmitData?: FilterData\n /**\n * @deprecated Use `filterSubmitData` instead\n */\n filterData?: FilterData\n /**\n * Transform the data context (internally as well) based on your criteria: `(path, value, props, internal) => 'new value'`. It will iterate on each data entry (/path).\n */\n transformIn?: TransformData\n /**\n * Mutate the data before it enters onSubmit or onChange based on your criteria: `(path, value, props, internal) => 'new value'`. It will iterate on each data entry (/path).\n */\n transformOut?: TransformData\n /**\n * Change handler for the whole data set.\n * You can provide an async function to show an indicator on the current label during a field change.\n */\n onChange?: OnChange<Data>\n /**\n * Change handler for each value\n */\n onPathChange?: (\n path: Path,\n value: any\n ) =>\n | EventReturnWithStateObject\n | void\n | Promise<EventReturnWithStateObject | void>\n /**\n * Will emit on a form submit – if validation has passed.\n * You can provide an async function to shows a submit indicator during submit. All form elements will be disabled during the submit.\n */\n onSubmit?: OnSubmit<Data>\n /**\n * Submit was requested, but data was invalid\n */\n onSubmitRequest?: () => void\n /**\n * Will be called when the onSubmit is finished and had not errors\n */\n onSubmitComplete?: (\n data: Data,\n /**\n * The result of the onSubmit function\n */\n result: unknown\n ) =>\n | EventReturnWithStateObject\n | void\n | Promise<EventReturnWithStateObject | void>\n /**\n * Minimum time to display the submit indicator.\n */\n minimumAsyncBehaviorTime?: number\n /**\n * The maximum time to display the submit indicator before it changes back to normal. In case something went wrong during submission.\n */\n asyncSubmitTimeout?: number\n /**\n * Scroll to top on submit\n */\n scrollTopOnSubmit?: boolean\n /**\n * Key for caching the data in session storage\n */\n sessionStorageId?: string\n /**\n * Locale to use for all nested Eufemia components\n */\n locale?: ContextProps['locale']\n /**\n * Provide your own translations. Use the same format as defined in the translation files\n */\n translations?: ContextProps['translations']\n /**\n * Make all fields required\n */\n required?: boolean\n\n children: React.ReactNode\n}\n\nconst isArrayJsonPointer = /^\\/\\d+(\\/|$)/\n\nexport default function Provider<Data extends JsonObject>(\n props: Props<Data>\n) {\n const [, forceUpdate] = useReducer(() => ({}), {})\n\n const {\n id,\n globalStatusId = 'main',\n defaultData,\n data,\n schema,\n onChange,\n onPathChange,\n onSubmit,\n onSubmitRequest,\n onSubmitComplete,\n scrollTopOnSubmit,\n minimumAsyncBehaviorTime,\n asyncSubmitTimeout,\n sessionStorageId,\n ajvInstance,\n transformIn,\n transformOut,\n filterSubmitData,\n filterData,\n locale,\n translations,\n required,\n errorMessages: contextErrorMessages,\n children,\n ...rest\n } = props\n\n // Prop error handling\n if (data !== undefined && sessionStorageId !== undefined) {\n console.error(\n 'Providing both data and sessionStorageId could lead to competing data sources. To provide default data to use only before anything is changed in the interface, use defaultData.'\n )\n }\n\n // - Locale\n const translation = useTranslation().Form\n\n // - Ajv\n const ajvRef = useRef<Ajv>(makeAjvInstance(ajvInstance))\n\n // - Paths\n const mountedFieldPathsRef = useRef<Path[]>([])\n\n // - Errors from provider validation (the whole data set)\n const errorsRef = useRef<Record<Path, FormError> | undefined>()\n const showAllErrorsRef = useRef<boolean>(false)\n const setShowAllErrors = useCallback((showAllErrors: boolean) => {\n showAllErrorsRef.current = showAllErrors\n forceUpdate()\n }, [])\n const submitStateRef = useRef<Partial<EventStateObject>>({})\n const setSubmitState = useCallback((state: EventStateObject) => {\n Object.assign(submitStateRef.current, state)\n forceUpdate()\n }, [])\n\n // - Progress\n const formStateRef = useRef<SubmitState>()\n const setFormState = useCallback((formState: SubmitState) => {\n formStateRef.current = formState\n forceUpdate()\n }, [])\n\n // - States (e.g. error) reported by fields, based on their direct validation rules\n const fieldErrorRef = useRef<Record<Path, Error>>({})\n const fieldStateRef = useRef<Record<Path, SubmitState>>({})\n\n // - Data\n const initialData = useMemo<Data>(() => {\n if (sessionStorageId && typeof window !== 'undefined') {\n const sessionDataJSON =\n window.sessionStorage?.getItem(sessionStorageId)\n if (sessionDataJSON) {\n return JSON.parse(sessionDataJSON)\n }\n }\n return data ?? defaultData\n // eslint-disable-next-line react-hooks/exhaustive-deps -- Avoid triggering code that should only run initially\n }, [])\n const internalDataRef = useRef<Data>(initialData)\n\n // - Validator\n const ajvValidatorRef = useRef<ValidateFunction>()\n const executeAjvValidator = useCallback(() => {\n if (!ajvValidatorRef.current) {\n // No schema-based validator. Assume data is valid.\n return\n }\n\n if (!ajvValidatorRef.current?.(internalDataRef.current)) {\n // Errors found\n errorsRef.current = ajvErrorsToFormErrors(\n ajvValidatorRef.current.errors,\n internalDataRef.current\n )\n } else {\n errorsRef.current = undefined\n }\n }, [])\n const validateData = useCallback(() => {\n if (!ajvValidatorRef.current) {\n // No schema-based validator. Assume data is valid.\n return\n }\n\n executeAjvValidator()\n forceUpdate()\n }, [executeAjvValidator])\n\n // - Error handling\n const checkFieldStateFor = useCallback(\n (path: Path, state: SubmitState) => {\n return Boolean(\n state === 'error'\n ? errorsRef.current?.[path] instanceof Error ||\n fieldErrorRef.current[path] instanceof Error\n : fieldStateRef.current[path] === state\n )\n },\n []\n )\n const hasFieldState = useCallback(\n (state: SubmitState) => {\n return mountedFieldPathsRef.current.some((path) => {\n return checkFieldStateFor(path, state)\n })\n },\n [checkFieldStateFor]\n )\n const hasErrors = useCallback(() => {\n return hasFieldState('error')\n }, [hasFieldState])\n\n /**\n * Sets the error state for a specific path\n */\n const setFieldError = useCallback(\n (path: Path, error: Error | FormError) => {\n fieldErrorRef.current[path] = error\n },\n []\n )\n\n /**\n * Sets the field state for a specific path\n */\n const setFieldState = useCallback(\n (path: Path, fieldState: SubmitState) => {\n if (fieldState !== fieldStateRef.current[path]) {\n // The state for the target value was changed\n fieldStateRef.current[path] = fieldState\n forceUpdate()\n }\n },\n []\n )\n\n /**\n * Mutate the data set based on the filterData function\n */\n const mutateDataHandler = useCallback(\n (data: Data, fn: TransformData, remove = false) => {\n if (fn) {\n Object.entries(fieldPropsRef.current).forEach(([path, props]) => {\n const exists = pointer.has(data, path)\n if (exists) {\n const result = fn(path, pointer.get(data, path), props, {\n error: fieldErrorRef.current?.[path],\n })\n if (remove) {\n if (result === false) {\n data = structuredClone(data)\n pointer.remove(data, path)\n }\n } else {\n if (typeof result !== 'undefined') {\n data = structuredClone(data)\n pointer.set(data, path, result)\n }\n }\n }\n })\n\n return data\n }\n\n return data\n },\n []\n )\n\n /**\n * Filter the data set based on the filterData function\n */\n const filterDataHandler = useCallback(\n (data: Data, filter = filterData || filterSubmitData) => {\n if (filter) {\n return mutateDataHandler(data, filter, true)\n }\n\n return data\n },\n [filterData, filterSubmitData, mutateDataHandler]\n )\n\n const fieldPropsRef = useRef<Record<Path, FieldProps>>({})\n const setProps = useCallback(\n (path: Path, props: Record<string, unknown>) => {\n // For async processing, we need to merge the props with the existing props\n fieldPropsRef.current[path] = {\n ...fieldPropsRef.current[path],\n ...props,\n }\n\n // If one of the given props is not in props anymore,\n // it needs to be removed from the fieldPropsRef\n for (const key in fieldPropsRef.current[path]) {\n if (!Object.prototype.hasOwnProperty.call(props, key)) {\n delete fieldPropsRef.current[path][key]\n }\n }\n },\n []\n )\n const hasFieldWithAsyncValidator = useCallback(() => {\n for (const path in fieldPropsRef.current) {\n const props = fieldPropsRef.current[path]\n if (isAsync(props.validator) || isAsync(props.onBlurValidator)) {\n return true\n }\n }\n\n return false\n }, [])\n\n // - Shared state\n const sharedData = useSharedState<Data>(id)\n const sharedAttachments = useSharedState<{\n filterDataHandler?: Props<Data>['filterSubmitData']\n hasErrors?: ContextState['hasErrors']\n setShowAllErrors?: ContextState['setShowAllErrors']\n setSubmitState?: ContextState['setSubmitState']\n rerenderUseDataHook?: () => void\n }>(id + '-attachments')\n\n const setSharedData = sharedData.set\n const extendSharedData = sharedData.extend\n const extendAttachment = sharedAttachments.extend\n const rerenderUseDataHook = sharedAttachments.data?.rerenderUseDataHook\n\n const cacheRef = useRef({\n data,\n schema,\n shared: sharedData.data,\n hasUsedInitialData: false,\n })\n\n internalDataRef.current = useMemo(() => {\n // NB: \"sharedData.data\" is only available on a rerender.\n // Update the shared state, if initialData is given and no shared state is available.\n // We do almost the same later in a useLayoutEffect, but we need to do it here as well, so we set the data as early as possible.\n if (id && initialData && !sharedData.data) {\n sharedData.update(initialData)\n }\n\n // Merge both internal data and the shared state, if it both where given\n if (\n id &&\n initialData &&\n sharedData.data &&\n cacheRef.current.shared === sharedData.data &&\n internalDataRef.current === initialData\n ) {\n return {\n ...internalDataRef.current,\n ...sharedData.data,\n }\n }\n\n // Use shared state if no initial and initial data, and the shared state exists\n if (\n id &&\n !initialData &&\n !internalDataRef.current &&\n sharedData.data &&\n cacheRef.current.shared === sharedData.data\n ) {\n return sharedData.data\n }\n\n // Merge the internal data with the shared state, if the shared was updated and not the same as internal data\n if (\n id &&\n sharedData.data &&\n cacheRef.current.shared !== sharedData.data &&\n sharedData.data !== internalDataRef.current\n ) {\n cacheRef.current.shared = sharedData.data\n return {\n ...internalDataRef.current,\n ...sharedData.data,\n }\n }\n\n // When external data has changed, update the internal data\n if (data !== cacheRef.current.data) {\n cacheRef.current.data = data\n return data\n }\n\n return internalDataRef.current\n }, [data, id, initialData, sharedData])\n\n useLayoutEffect(() => {\n // Set the shared state, if initialData was given\n if (id && initialData && !sharedData.data) {\n extendSharedData?.(initialData)\n }\n }, [id, initialData, extendSharedData, sharedData.data])\n\n useMemo(() => {\n executeAjvValidator()\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [internalDataRef.current]) // run validation when internal data has changed\n\n useLayoutEffect(() => {\n if (id) {\n extendAttachment?.({\n filterDataHandler,\n hasErrors,\n setShowAllErrors,\n setSubmitState,\n })\n if (filterData || filterSubmitData) {\n rerenderUseDataHook?.()\n }\n }\n }, [\n extendAttachment,\n filterData,\n filterDataHandler,\n filterSubmitData,\n hasErrors,\n id,\n rerenderUseDataHook,\n setShowAllErrors,\n setSubmitState,\n ])\n\n const storeInSession = useMemo(() => {\n return debounce(\n () => {\n window.sessionStorage?.setItem(\n sessionStorageId,\n JSON.stringify(internalDataRef.current)\n )\n },\n process.env.NODE_ENV === 'test' ? 1 : 800\n )\n }, [sessionStorageId])\n\n /**\n * Update the data set\n */\n const updateDataValue: ContextState['updateDataValue'] = useCallback(\n (path, value) => {\n if (!path) {\n return\n }\n\n const givenData = (\n path === '/'\n ? // When setting the root of the data, the whole data set should be the new value\n value\n : // For sub paths, use the the existing data set (or empty array/object), but modify it below (since pointer.set is not immutable)\n internalDataRef.current ??\n (path.match(isArrayJsonPointer) ? [] : {})\n ) as Data\n\n let newData: Data = null\n try {\n // Update the data even if it contains errors. Submit/SubmitRequest will be called accordingly\n newData = structuredClone(givenData)\n } catch (e) {\n newData = givenData\n }\n\n if (path !== '/') {\n pointer.set(newData, path, value)\n }\n\n // - Mutate the data context\n if (transformIn) {\n newData = mutateDataHandler(newData, transformIn)\n }\n\n internalDataRef.current = newData\n\n if (id) {\n // Will ensure that Form.getData() gets the correct data\n extendSharedData?.(newData)\n if (filterData || filterSubmitData) {\n rerenderUseDataHook?.()\n }\n }\n\n if (sessionStorageId && typeof window !== 'undefined') {\n storeInSession()\n }\n\n forceUpdate()\n },\n [\n extendSharedData,\n filterData,\n filterSubmitData,\n id,\n mutateDataHandler,\n rerenderUseDataHook,\n sessionStorageId,\n storeInSession,\n transformIn,\n ]\n )\n\n const setData = useCallback((newData: Data) => {\n internalDataRef.current = newData\n forceUpdate()\n }, [])\n\n /**\n * Update the data set on user interaction (unvalidated)\n */\n const handlePathChangeUnvalidated: ContextState['handlePathChange'] =\n useCallback(\n async (path, value) => {\n if (!path) {\n return null\n }\n\n updateDataValue(path, value)\n\n if (isAsync(onPathChange)) {\n await onPathChange?.(path, value)\n } else {\n onPathChange?.(path, value)\n }\n },\n [onPathChange, updateDataValue]\n )\n\n /**\n * Update the data set on user interaction\n */\n const handlePathChange: ContextState['handlePathChange'] = useCallback(\n async (path, value = '_undefined_') => {\n if (!path) {\n return null\n }\n\n if (value !== '_undefined_') {\n handlePathChangeUnvalidated(path, value)\n }\n\n showAllErrorsRef.current = false\n\n validateData()\n\n const data = internalDataRef.current as Data\n const transformedData = transformOut\n ? mutateDataHandler(data, transformOut)\n : data\n\n if (isAsync(onChange)) {\n return await onChange(transformedData)\n }\n\n return onChange?.(transformedData)\n },\n [\n handlePathChangeUnvalidated,\n mutateDataHandler,\n onChange,\n transformOut,\n validateData,\n ]\n )\n\n // - Mounted fields\n const handleMountField = useCallback((path: Path) => {\n mountedFieldPathsRef.current = addListPath(\n mountedFieldPathsRef.current,\n path\n )\n }, [])\n\n const handleUnMountField = useCallback((path: Path) => {\n mountedFieldPathsRef.current = removeListPath(\n mountedFieldPathsRef.current,\n path\n )\n if (fieldPropsRef.current?.[path]) {\n delete fieldPropsRef.current[path]\n }\n }, [])\n\n // - Features\n const scrollToTop = useCallback(() => {\n if (typeof window !== 'undefined') {\n window?.scrollTo?.({ top: 0, behavior: 'smooth' })\n }\n }, [])\n\n /**\n * Shared logic dedicated to submit the whole form\n */\n const handleSubmitCall = useCallback<ContextState['handleSubmitCall']>(\n async (args) => {\n const {\n onSubmit,\n enableAsyncBehaviour,\n skipFieldValidation,\n skipErrorCheck,\n } = args\n\n setSubmitState({ error: undefined })\n\n const asyncBehaviorIsEnabled =\n (skipErrorCheck\n ? true\n : // Don't enable async behaviour if we have errors, but when we have a pending state\n !hasErrors() || hasFieldState('pending')) &&\n (enableAsyncBehaviour || hasFieldWithAsyncValidator())\n\n if (asyncBehaviorIsEnabled) {\n setFormState('pending')\n }\n\n // Just call the submit listeners \"once\", and not on the retry/recall\n if (!skipFieldValidation) {\n for (const {\n path,\n type,\n callback,\n } of fieldEventListenersRef.current) {\n if (\n type === 'onSubmit' &&\n mountedFieldPathsRef.current.includes(path)\n ) {\n // Call all submit listener callbacks (e.g. to validate fields)\n if (asyncBehaviorIsEnabled) {\n await callback()\n } else {\n callback()\n }\n }\n }\n }\n\n if (\n !(skipErrorCheck ? false : hasErrors()) &&\n !hasFieldState('pending') &&\n (skipFieldValidation ? true : !hasFieldState('error'))\n ) {\n let result: EventStateObject | unknown\n\n try {\n result = await onSubmit()\n\n if (result instanceof Error) {\n throw result\n }\n } catch (error) {\n result = { error }\n }\n\n const state = result as EventStateObject\n\n if (asyncBehaviorIsEnabled) {\n setFormState(state?.error ? 'abort' : 'complete')\n }\n\n // Force the state to be set by a custom status\n if (state?.['status']) {\n setFormState(state?.['status'])\n }\n\n if (state?.error || state?.warning || state?.info) {\n setSubmitState(state)\n }\n } else {\n if (asyncBehaviorIsEnabled) {\n window.requestAnimationFrame(() => {\n setFormState(undefined)\n })\n\n if (!skipFieldValidation) {\n // Add a event listener to continue the submit after the pending state is resolved\n onSubmitContinueRef.current = () => {\n window.requestAnimationFrame(() => {\n // Do not call the validators again,\n // because we already did it in the first call\n // If they are async, we wait for them to finish anyway\n handleSubmitCall({ ...args, skipFieldValidation: true })\n })\n }\n }\n }\n\n onSubmitRequest?.()\n\n setShowAllErrors(true)\n }\n\n return internalDataRef.current\n },\n [\n setSubmitState,\n hasErrors,\n hasFieldWithAsyncValidator,\n hasFieldState,\n setFormState,\n onSubmitRequest,\n setShowAllErrors,\n ]\n )\n\n /**\n * Request to submit the whole form\n */\n const handleSubmit = useCallback<ContextState['handleSubmit']>(\n async ({ formElement = null } = {}) => {\n handleSubmitCall({\n enableAsyncBehaviour: isAsync(onSubmit),\n onSubmit: async () => {\n // - Mutate the data context\n const data = internalDataRef.current\n const filteredData = filterDataHandler(\n transformOut ? mutateDataHandler(data, transformOut) : data\n )\n const opts = {\n resetForm: () => {\n formElement?.reset?.()\n\n if (typeof window !== 'undefined') {\n if (sessionStorageId) {\n window.sessionStorage.removeItem(sessionStorageId)\n }\n }\n\n forceUpdate() // in order to fill \"empty fields\" again with their internal states\n },\n clearData: () => {\n internalDataRef.current = {} as Data\n if (id) {\n setSharedData?.({} as Data)\n } else {\n forceUpdate()\n }\n },\n }\n\n let result = undefined\n\n if (isAsync(onSubmit)) {\n result = await onSubmit(filteredData, opts)\n } else {\n result = onSubmit?.(filteredData, opts)\n }\n\n const completeResult = await onSubmitComplete?.(\n filteredData,\n result\n )\n if (completeResult) {\n result =\n Object.keys(result).length > 0\n ? { ...result, ...completeResult }\n : completeResult\n }\n\n if (scrollTopOnSubmit) {\n scrollToTop()\n }\n\n return result\n },\n })\n },\n [\n filterDataHandler,\n handleSubmitCall,\n id,\n mutateDataHandler,\n onSubmit,\n onSubmitComplete,\n scrollToTop,\n scrollTopOnSubmit,\n sessionStorageId,\n setSharedData,\n transformOut,\n ]\n )\n\n // Collect listeners to be called during form submit\n const fieldEventListenersRef = useRef<Array<EventListenerCall>>([])\n const setFieldEventListener = useCallback(\n (\n path: EventListenerCall['path'],\n type: EventListenerCall['type'],\n callback: EventListenerCall['callback']\n ) => {\n fieldEventListenersRef.current =\n fieldEventListenersRef.current.filter(({ path: p, type: t }) => {\n return !(p === path && t === type)\n })\n fieldEventListenersRef.current.push({ path, type, callback })\n },\n []\n )\n\n // Handle unresolved field states during async submit\n const onSubmitContinueRef = useRef<() => void>(null)\n if (!hasFieldState('pending')) {\n onSubmitContinueRef.current?.()\n onSubmitContinueRef.current = null\n }\n\n // - ajv validator routines\n useMountEffect(() => {\n if (schema) {\n ajvValidatorRef.current = ajvRef.current?.compile(schema)\n }\n\n // Validate the initial data\n validateData()\n })\n useUpdateEffect(() => {\n if (schema && schema !== cacheRef.current.schema) {\n cacheRef.current.schema = schema\n ajvValidatorRef.current = ajvRef.current?.compile(schema)\n\n validateData()\n forceUpdate()\n }\n }, [schema, validateData, forceUpdate])\n\n const onTimeout = useCallback(() => {\n setFormState(undefined)\n setSubmitState({\n info: undefined,\n warning: undefined,\n error: undefined,\n })\n }, [setFormState, setSubmitState])\n\n const { bufferedFormState: formState } = useFormStatusBuffer({\n formState: formStateRef.current,\n waitFor: hasFieldState('pending'),\n minimumAsyncBehaviorTime,\n asyncSubmitTimeout,\n onTimeout,\n })\n\n const submitState = submitStateRef.current\n const disabled =\n typeof rest?.['disabled'] === 'boolean'\n ? rest?.['disabled']\n : (formState === 'pending') === true\n ? true\n : undefined\n\n return (\n <Context.Provider\n value={{\n /** Method */\n handlePathChange,\n handlePathChangeUnvalidated,\n handleSubmit,\n handleMountField,\n handleUnMountField,\n handleSubmitCall,\n setFormState,\n setSubmitState,\n setShowAllErrors,\n setFieldEventListener,\n setFieldState,\n setFieldError,\n setProps,\n hasErrors,\n hasFieldState,\n checkFieldStateFor,\n validateData,\n updateDataValue,\n setData,\n filterDataHandler,\n scrollToTop,\n\n /** State handling */\n schema,\n disabled,\n required,\n formState,\n submitState,\n contextErrorMessages,\n hasContext: true,\n errors: errorsRef.current,\n showAllErrors: showAllErrorsRef.current,\n fieldPropsRef,\n ajvInstance: ajvRef.current,\n fieldProps: fieldPropsRef.current,\n\n /** Additional */\n id,\n data: internalDataRef.current,\n props,\n ...rest,\n }}\n >\n <FieldProvider\n FormStatus={\n globalStatusId\n ? {\n globalStatus: {\n id: globalStatusId,\n title: translation.errorSummaryTitle,\n show: showAllErrorsRef.current,\n },\n }\n : undefined\n }\n formElement={disabled ? { disabled: true } : undefined}\n locale={locale ? locale : undefined}\n translations={translations ? translations : undefined}\n >\n {children}\n </FieldProvider>\n </Context.Provider>\n )\n}\n\ntype PathList = string[]\n\nexport function addListPath(paths: PathList, path: Path): PathList {\n return paths.includes(path) ? paths : paths.concat(path)\n}\n\nexport function removeListPath(paths: PathList, path: Path): PathList {\n return paths.filter((thisPath) => thisPath !== path)\n}\n\ntype FormStatusBufferProps = {\n minimumAsyncBehaviorTime?: Props<unknown>['minimumAsyncBehaviorTime']\n asyncSubmitTimeout?: Props<unknown>['asyncSubmitTimeout']\n formState: ContextState['formState']\n waitFor: boolean\n onTimeout: () => void\n}\n\nfunction useFormStatusBuffer(props: FormStatusBufferProps) {\n const {\n formState,\n waitFor,\n minimumAsyncBehaviorTime,\n asyncSubmitTimeout,\n onTimeout,\n } = props || {}\n\n const [, forceUpdate] = useReducer(() => ({}), {})\n const stateRef = useRef<SubmitState>()\n const nowRef = useRef<number | null>(null)\n const timeoutRef = useRef<{\n complete?: NodeJS.Timeout | null\n reset?: NodeJS.Timeout | null\n timeout?: NodeJS.Timeout | null\n }>({})\n\n const setState = useCallback(\n (state: SubmitState) => {\n stateRef.current = state\n forceUpdate()\n },\n [forceUpdate]\n )\n\n const clear = useCallback(() => {\n for (const key in timeoutRef.current) {\n clearTimeout(timeoutRef.current[key])\n }\n }, [])\n\n const hadCompleteRef = useRef(false)\n\n useEffect(() => {\n // This offset is used to calculate the delay,\n // which ensures that the form state is displayed for at least minimumAsyncBehaviorTime duration.\n // If the form was 'pending' for less than minimumAsyncBehaviorTime,\n // the delay will be the remaining time to reach minimumAsyncBehaviorTime.\n const isTest = process.env.NODE_ENV === 'test'\n const minimum =\n minimumAsyncBehaviorTime ??\n // make it testable\n (isTest ? 1 : 1000)\n\n if (stateRef.current && formState === 'error') {\n clear()\n setState(undefined)\n return\n }\n\n if (formState === 'abort') {\n clear()\n setState('abort')\n\n timeoutRef.current.reset = setTimeout(() => {\n nowRef.current = 0\n setState(undefined)\n }, minimum)\n return\n }\n\n if (formState === 'complete') {\n hadCompleteRef.current = true\n }\n\n if (formState === 'pending' && stateRef.current !== 'pending') {\n clear()\n nowRef.current = Date.now()\n hadCompleteRef.current = false\n setState('pending')\n } else if (stateRef.current === 'pending') {\n const offset = Math.max(Date.now() - nowRef.current)\n const delay = isTest ? minimum : Math.max(minimum - offset, 0)\n\n if (!waitFor) {\n timeoutRef.current.complete = setTimeout(() => {\n if (hadCompleteRef.current) {\n setState('complete')\n }\n }, delay)\n\n timeoutRef.current.reset = setTimeout(() => {\n nowRef.current = 0\n setState(undefined)\n clear()\n }, delay + minimum)\n }\n }\n\n if (stateRef.current === 'pending') {\n timeoutRef.current.timeout = setTimeout(() => {\n clear()\n setState(undefined)\n onTimeout?.()\n }, asyncSubmitTimeout ?? 30000)\n }\n\n return clear\n }, [\n clear,\n minimumAsyncBehaviorTime,\n formState,\n setState,\n waitFor,\n asyncSubmitTimeout,\n onTimeout,\n ])\n\n return { bufferedFormState: stateRef.current }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Provider.js","names":["React","useRef","useMemo","useCallback","useReducer","useEffect","pointer","makeAjvInstance","ajvErrorsToFormErrors","debounce","FieldProvider","useMountEffect","useUpdateEffect","isAsync","useSharedState","useTranslation","Context","structuredClone","useLayoutEffect","window","isArrayJsonPointer","Provider","props","_sharedAttachments$da","forceUpdate","id","globalStatusId","defaultData","data","schema","onChange","onPathChange","onSubmit","onSubmitRequest","onSubmitComplete","scrollTopOnSubmit","minimumAsyncBehaviorTime","asyncSubmitTimeout","sessionStorageId","ajvInstance","transformIn","transformOut","filterSubmitData","filterData","locale","translations","required","errorMessages","contextErrorMessages","children","rest","_objectWithoutProperties","_excluded","undefined","console","error","translation","Form","ajvRef","mountedFieldPathsRef","errorsRef","showAllErrorsRef","setShowAllErrors","showAllErrors","current","submitStateRef","setSubmitState","state","Object","assign","formStateRef","setFormState","formState","fieldErrorRef","fieldStateRef","initialData","_window$sessionStorag","sessionDataJSON","sessionStorage","getItem","JSON","parse","internalDataRef","ajvValidatorRef","executeAjvValidator","_ajvValidatorRef$curr","call","errors","validateData","checkFieldStateFor","path","_errorsRef$current","Boolean","Error","hasFieldState","some","hasFieldError","p","hasErrors","setFieldError","setFieldState","fieldState","mutateDataHandler","filter","remove","arguments","length","mutate","result","set","entries","fieldPropsRef","forEach","_ref","exists","has","_fieldErrorRef$curren","value","get","internal","_ref2","condition","_fieldPropsRef$curren","_fieldErrorRef$curren2","filterDataHandler","setProps","hasFieldWithAsyncValidator","includes","validator","onBlurValidator","sharedData","sharedAttachments","setSharedData","extendSharedData","extend","extendAttachment","rerenderUseDataHook","cacheRef","shared","hasUsedInitialData","update","_objectSpread","storeInSession","_window$sessionStorag2","setItem","stringify","process","env","NODE_ENV","updateDataValue","_internalDataRef$curr","givenData","match","newData","e","setData","handlePathChangeUnvalidated","handlePathChange","transformedData","handleMountField","addListPath","handleUnMountField","removeListPath","scrollToTop","_window","_window$scrollTo","scrollTo","top","behavior","handleSubmitCall","args","enableAsyncBehaviour","skipFieldValidation","skipErrorCheck","asyncBehaviorIsEnabled","type","callback","fieldEventListenersRef","warning","info","requestAnimationFrame","onSubmitContinueRef","handleSubmit","formElement","filteredData","opts","resetForm","_formElement$reset","reset","removeItem","clearData","completeResult","keys","setFieldEventListener","_ref3","t","push","_onSubmitContinueRef$","_ajvRef$current","compile","_ajvRef$current2","onTimeout","bufferedFormState","useFormStatusBuffer","waitFor","submitState","disabled","createElement","hasContext","FormStatus","globalStatus","title","errorSummaryTitle","show","paths","concat","thisPath","stateRef","nowRef","timeoutRef","setState","clear","key","clearTimeout","hadCompleteRef","activeElementRef","isTest","minimum","setTimeout","document","activeElement","Date","now","offset","Math","max","delay","complete","_activeElementRef$cur","_activeElementRef$cur2","focus","timeout"],"sources":["../../../../../../src/extensions/forms/DataContext/Provider/Provider.tsx"],"sourcesContent":["import React, {\n useRef,\n useMemo,\n useCallback,\n useReducer,\n useEffect,\n} from 'react'\nimport pointer, { JsonObject } from 'json-pointer'\nimport { ValidateFunction } from 'ajv/dist/2020'\nimport {\n Ajv,\n makeAjvInstance,\n ajvErrorsToFormErrors,\n} from '../../utils/ajv'\nimport {\n FormError,\n CustomErrorMessagesWithPaths,\n AllJSONSchemaVersions,\n FieldProps,\n SubmitState,\n Path,\n EventStateObject,\n OnSubmit,\n OnChange,\n EventReturnWithStateObject,\n} from '../../types'\nimport { debounce } from '../../../../shared/helpers'\nimport FieldProvider from '../../Form/FieldProps'\nimport useMountEffect from '../../../../shared/helpers/useMountEffect'\nimport useUpdateEffect from '../../../../shared/helpers/useUpdateEffect'\nimport { isAsync } from '../../../../shared/helpers/isAsync'\nimport { useSharedState } from '../../../../shared/helpers/useSharedState'\nimport { ContextProps } from '../../../../shared/Context'\nimport useTranslation from '../../hooks/useTranslation'\nimport Context, {\n ContextState,\n EventListenerCall,\n FilterData,\n TransformData,\n} from '../Context'\n\n/**\n * Deprecated, as it is supported by all major browsers and Node.js >=v18\n * So its a question of time, when we will remove this polyfill\n */\nimport structuredClone from '@ungap/structured-clone'\n\n// SSR warning fix: https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\nconst useLayoutEffect =\n typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect\n\nexport interface Props<Data extends JsonObject> {\n /**\n * Unique ID to communicate with the hook Form.useData\n */\n id?: string\n /**\n * Unique ID to connect with a GlobalStatus\n */\n globalStatusId?: string\n /**\n * Default source data, only used if no other source is available, and not leading to updates if changed after mount\n */\n defaultData?: Data\n /**\n * Source data, will be used instead of defaultData, and leading to updates if changed after mount\n */\n data?: Data\n /**\n * JSON Schema to validate the data against.\n */\n schema?: AllJSONSchemaVersions\n /**\n * Custom Ajv instance, if you want to use your own\n */\n ajvInstance?: Ajv\n /**\n * Custom error messages for the whole data set\n */\n errorMessages?: CustomErrorMessagesWithPaths\n /**\n * Filter the `onSubmit` output data, based on your criteria: `({ path, value, data, props, internal }) => !props?.disabled`. It will iterate on each data entry (/path). Return false to exclude the entry.\n */\n filterSubmitData?: FilterData\n /**\n * @deprecated Use `filterSubmitData` instead\n */\n filterData?: FilterData\n /**\n * Transform the data context (internally as well) based on your criteria: `({ path, value, data, props, internal }) => 'new value'`. It will iterate on each data entry (/path).\n */\n transformIn?: TransformData\n /**\n * Mutate the data before it enters onSubmit or onChange based on your criteria: `({ path, value, data, props, internal }) => 'new value'`. It will iterate on each data entry (/path).\n */\n transformOut?: TransformData\n /**\n * Change handler for the whole data set.\n * You can provide an async function to show an indicator on the current label during a field change.\n */\n onChange?: OnChange<Data>\n /**\n * Change handler for each value\n */\n onPathChange?: (\n path: Path,\n value: any\n ) =>\n | EventReturnWithStateObject\n | void\n | Promise<EventReturnWithStateObject | void>\n /**\n * Will emit on a form submit – if validation has passed.\n * You can provide an async function to shows a submit indicator during submit. All form elements will be disabled during the submit.\n */\n onSubmit?: OnSubmit<Data>\n /**\n * Submit was requested, but data was invalid\n */\n onSubmitRequest?: () => void\n /**\n * Will be called when the onSubmit is finished and had not errors\n */\n onSubmitComplete?: (\n data: Data,\n /**\n * The result of the onSubmit function\n */\n result: unknown\n ) =>\n | EventReturnWithStateObject\n | void\n | Promise<EventReturnWithStateObject | void>\n /**\n * Minimum time to display the submit indicator.\n */\n minimumAsyncBehaviorTime?: number\n /**\n * The maximum time to display the submit indicator before it changes back to normal. In case something went wrong during submission.\n */\n asyncSubmitTimeout?: number\n /**\n * Scroll to top on submit\n */\n scrollTopOnSubmit?: boolean\n /**\n * Key for caching the data in session storage\n */\n sessionStorageId?: string\n /**\n * Locale to use for all nested Eufemia components\n */\n locale?: ContextProps['locale']\n /**\n * Provide your own translations. Use the same format as defined in the translation files\n */\n translations?: ContextProps['translations']\n /**\n * Make all fields required\n */\n required?: boolean\n\n children: React.ReactNode\n}\n\nconst isArrayJsonPointer = /^\\/\\d+(\\/|$)/\n\nexport default function Provider<Data extends JsonObject>(\n props: Props<Data>\n) {\n const [, forceUpdate] = useReducer(() => ({}), {})\n\n const {\n id,\n globalStatusId = 'main',\n defaultData,\n data,\n schema,\n onChange,\n onPathChange,\n onSubmit,\n onSubmitRequest,\n onSubmitComplete,\n scrollTopOnSubmit,\n minimumAsyncBehaviorTime,\n asyncSubmitTimeout,\n sessionStorageId,\n ajvInstance,\n transformIn,\n transformOut,\n filterSubmitData,\n filterData,\n locale,\n translations,\n required,\n errorMessages: contextErrorMessages,\n children,\n ...rest\n } = props\n\n // Prop error handling\n if (data !== undefined && sessionStorageId !== undefined) {\n console.error(\n 'Providing both data and sessionStorageId could lead to competing data sources. To provide default data to use only before anything is changed in the interface, use defaultData.'\n )\n }\n\n // - Locale\n const translation = useTranslation().Form\n\n // - Ajv\n const ajvRef = useRef<Ajv>(makeAjvInstance(ajvInstance))\n\n // - Paths\n const mountedFieldPathsRef = useRef<Path[]>([])\n\n // - Errors from provider validation (the whole data set)\n const errorsRef = useRef<Record<Path, FormError> | undefined>()\n const showAllErrorsRef = useRef<boolean>(false)\n const setShowAllErrors = useCallback((showAllErrors: boolean) => {\n showAllErrorsRef.current = showAllErrors\n forceUpdate()\n }, [])\n const submitStateRef = useRef<Partial<EventStateObject>>({})\n const setSubmitState = useCallback((state: EventStateObject) => {\n Object.assign(submitStateRef.current, state)\n forceUpdate()\n }, [])\n\n // - Progress\n const formStateRef = useRef<SubmitState>()\n const setFormState = useCallback((formState: SubmitState) => {\n formStateRef.current = formState\n forceUpdate()\n }, [])\n\n // - States (e.g. error) reported by fields, based on their direct validation rules\n const fieldErrorRef = useRef<Record<Path, Error>>({})\n const fieldStateRef = useRef<Record<Path, SubmitState>>({})\n\n // - Data\n const initialData = useMemo<Data>(() => {\n if (sessionStorageId && typeof window !== 'undefined') {\n const sessionDataJSON =\n window.sessionStorage?.getItem(sessionStorageId)\n if (sessionDataJSON) {\n return JSON.parse(sessionDataJSON)\n }\n }\n return data ?? defaultData\n // eslint-disable-next-line react-hooks/exhaustive-deps -- Avoid triggering code that should only run initially\n }, [])\n const internalDataRef = useRef<Data>(initialData)\n\n // - Validator\n const ajvValidatorRef = useRef<ValidateFunction>()\n const executeAjvValidator = useCallback(() => {\n if (!ajvValidatorRef.current) {\n // No schema-based validator. Assume data is valid.\n return\n }\n\n if (!ajvValidatorRef.current?.(internalDataRef.current)) {\n // Errors found\n errorsRef.current = ajvErrorsToFormErrors(\n ajvValidatorRef.current.errors,\n internalDataRef.current\n )\n } else {\n errorsRef.current = undefined\n }\n }, [])\n const validateData = useCallback(() => {\n if (!ajvValidatorRef.current) {\n // No schema-based validator. Assume data is valid.\n return\n }\n\n executeAjvValidator()\n forceUpdate()\n }, [executeAjvValidator])\n\n // - Error handling\n const checkFieldStateFor = useCallback(\n (path: Path, state: SubmitState) => {\n return Boolean(\n state === 'error'\n ? errorsRef.current?.[path] instanceof Error ||\n fieldErrorRef.current[path] instanceof Error\n : fieldStateRef.current[path] === state\n )\n },\n []\n )\n const hasFieldState = useCallback(\n (state: SubmitState) => {\n return mountedFieldPathsRef.current.some((path) => {\n return checkFieldStateFor(path, state)\n })\n },\n [checkFieldStateFor]\n )\n const hasFieldError = useCallback(\n (path: Path) => {\n return mountedFieldPathsRef.current.some((p) => {\n return p === path && checkFieldStateFor(p, 'error')\n })\n },\n [checkFieldStateFor]\n )\n const hasErrors = useCallback(() => {\n return hasFieldState('error')\n }, [hasFieldState])\n\n /**\n * Sets the error state for a specific path\n */\n const setFieldError = useCallback(\n (path: Path, error: Error | FormError) => {\n fieldErrorRef.current[path] = error\n },\n []\n )\n\n /**\n * Sets the field state for a specific path\n */\n const setFieldState = useCallback(\n (path: Path, fieldState: SubmitState) => {\n if (fieldState !== fieldStateRef.current[path]) {\n // The state for the target value was changed\n fieldStateRef.current[path] = fieldState\n forceUpdate()\n }\n },\n []\n )\n\n /**\n * Mutate the data set based on the filterData function\n */\n const mutateDataHandler = useCallback(\n (data: Data, filter: FilterData | TransformData, remove = false) => {\n const mutate = (path: Path, result: boolean | unknown) => {\n if (remove) {\n if (result === false) {\n data = structuredClone(data)\n pointer.remove(data, path)\n }\n } else {\n if (typeof result !== 'undefined') {\n data = structuredClone(data)\n pointer.set(data, path, result)\n }\n }\n }\n\n if (typeof filter === 'function') {\n Object.entries(fieldPropsRef.current).forEach(([path, props]) => {\n const exists = pointer.has(data, path)\n if (exists) {\n const value = pointer.get(data, path)\n const internal = {\n error: fieldErrorRef.current?.[path],\n }\n const result = filter({\n path,\n value,\n data: internalDataRef.current,\n props,\n internal,\n })\n mutate(path, result)\n }\n })\n\n return data\n } else if (filter) {\n Object.entries(filter).forEach(([path, condition]) => {\n const exists = pointer.has(data, path)\n if (exists) {\n const value = pointer.get(data, path)\n const props = fieldPropsRef.current?.[path]\n const internal = { error: fieldErrorRef.current?.[path] }\n const result =\n typeof condition === 'function'\n ? condition({\n value,\n data: internalDataRef.current,\n props,\n internal,\n })\n : condition\n mutate(path, result)\n }\n })\n return data\n }\n\n return data\n },\n []\n )\n\n /**\n * Filter the data set based on the filterData function\n */\n const filterDataHandler = useCallback(\n (data: Data, filter = filterData || filterSubmitData) => {\n if (filter) {\n return mutateDataHandler(data, filter, true)\n }\n\n return data\n },\n [filterData, filterSubmitData, mutateDataHandler]\n )\n\n const fieldPropsRef = useRef<Record<Path, FieldProps>>({})\n const setProps = useCallback(\n (path: Path, props: Record<string, unknown>) => {\n fieldPropsRef.current[path] = props\n },\n []\n )\n const hasFieldWithAsyncValidator = useCallback(() => {\n for (const path in fieldPropsRef.current) {\n if (mountedFieldPathsRef.current.includes(path)) {\n const props = fieldPropsRef.current[path]\n if (isAsync(props.validator) || isAsync(props.onBlurValidator)) {\n return true\n }\n }\n }\n\n return false\n }, [])\n\n // - Shared state\n const sharedData = useSharedState<Data>(id)\n const sharedAttachments = useSharedState<{\n filterDataHandler?: Props<Data>['filterSubmitData']\n hasErrors?: ContextState['hasErrors']\n hasFieldError?: ContextState['hasFieldError']\n setShowAllErrors?: ContextState['setShowAllErrors']\n setSubmitState?: ContextState['setSubmitState']\n rerenderUseDataHook?: () => void\n }>(id + '-attachments')\n\n const setSharedData = sharedData.set\n const extendSharedData = sharedData.extend\n const extendAttachment = sharedAttachments.extend\n const rerenderUseDataHook = sharedAttachments.data?.rerenderUseDataHook\n\n const cacheRef = useRef({\n data,\n schema,\n shared: sharedData.data,\n hasUsedInitialData: false,\n })\n\n internalDataRef.current = useMemo(() => {\n // NB: \"sharedData.data\" is only available on a rerender.\n // Update the shared state, if initialData is given and no shared state is available.\n // We do almost the same later in a useLayoutEffect, but we need to do it here as well, so we set the data as early as possible.\n if (id && initialData && !sharedData.data) {\n sharedData.update(initialData)\n }\n\n // Merge both internal data and the shared state, if it both where given\n if (\n id &&\n initialData &&\n sharedData.data &&\n cacheRef.current.shared === sharedData.data &&\n internalDataRef.current === initialData\n ) {\n return {\n ...internalDataRef.current,\n ...sharedData.data,\n }\n }\n\n // Use shared state if no initial and initial data, and the shared state exists\n if (\n id &&\n !initialData &&\n !internalDataRef.current &&\n sharedData.data &&\n cacheRef.current.shared === sharedData.data\n ) {\n return sharedData.data\n }\n\n // Merge the internal data with the shared state, if the shared was updated and not the same as internal data\n if (\n id &&\n sharedData.data &&\n cacheRef.current.shared !== sharedData.data &&\n sharedData.data !== internalDataRef.current\n ) {\n cacheRef.current.shared = sharedData.data\n return {\n ...internalDataRef.current,\n ...sharedData.data,\n }\n }\n\n // When external data has changed, update the internal data\n if (data !== cacheRef.current.data) {\n cacheRef.current.data = data\n return data\n }\n\n return internalDataRef.current\n }, [data, id, initialData, sharedData])\n\n useLayoutEffect(() => {\n // Set the shared state, if initialData was given\n if (id && initialData && !sharedData.data) {\n extendSharedData?.(initialData)\n }\n }, [id, initialData, extendSharedData, sharedData.data])\n\n useMemo(() => {\n executeAjvValidator()\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [internalDataRef.current]) // run validation when internal data has changed\n\n useLayoutEffect(() => {\n if (id) {\n extendAttachment?.({\n filterDataHandler,\n hasErrors,\n hasFieldError,\n setShowAllErrors,\n setSubmitState,\n })\n if (filterData || filterSubmitData) {\n rerenderUseDataHook?.()\n }\n }\n }, [\n extendAttachment,\n filterData,\n filterDataHandler,\n filterSubmitData,\n hasErrors,\n hasFieldError,\n id,\n rerenderUseDataHook,\n setShowAllErrors,\n setSubmitState,\n ])\n\n const storeInSession = useMemo(() => {\n return debounce(\n () => {\n window.sessionStorage?.setItem(\n sessionStorageId,\n JSON.stringify(internalDataRef.current)\n )\n },\n process.env.NODE_ENV === 'test' ? 1 : 800\n )\n }, [sessionStorageId])\n\n /**\n * Update the data set\n */\n const updateDataValue: ContextState['updateDataValue'] = useCallback(\n (path, value) => {\n if (!path) {\n return\n }\n\n const givenData = (\n path === '/'\n ? // When setting the root of the data, the whole data set should be the new value\n value\n : // For sub paths, use the the existing data set (or empty array/object), but modify it below (since pointer.set is not immutable)\n internalDataRef.current ??\n (path.match(isArrayJsonPointer) ? [] : {})\n ) as Data\n\n let newData: Data = null\n try {\n // Update the data even if it contains errors. Submit/SubmitRequest will be called accordingly\n newData = structuredClone(givenData)\n } catch (e) {\n newData = givenData\n }\n\n if (path !== '/') {\n pointer.set(newData, path, value)\n }\n\n // - Mutate the data context\n if (transformIn) {\n newData = mutateDataHandler(newData, transformIn)\n }\n\n internalDataRef.current = newData\n\n if (id) {\n // Will ensure that Form.getData() gets the correct data\n extendSharedData?.(newData)\n if (filterData || filterSubmitData) {\n rerenderUseDataHook?.()\n }\n }\n\n if (sessionStorageId && typeof window !== 'undefined') {\n storeInSession()\n }\n\n forceUpdate()\n },\n [\n extendSharedData,\n filterData,\n filterSubmitData,\n id,\n mutateDataHandler,\n rerenderUseDataHook,\n sessionStorageId,\n storeInSession,\n transformIn,\n ]\n )\n\n const setData = useCallback((newData: Data) => {\n internalDataRef.current = newData\n forceUpdate()\n }, [])\n\n /**\n * Update the data set on user interaction (unvalidated)\n */\n const handlePathChangeUnvalidated: ContextState['handlePathChange'] =\n useCallback(\n async (path, value) => {\n if (!path) {\n return null\n }\n\n updateDataValue(path, value)\n\n if (isAsync(onPathChange)) {\n await onPathChange?.(path, value)\n } else {\n onPathChange?.(path, value)\n }\n },\n [onPathChange, updateDataValue]\n )\n\n /**\n * Update the data set on user interaction\n */\n const handlePathChange: ContextState['handlePathChange'] = useCallback(\n async (path, value = '_undefined_') => {\n if (!path) {\n return null\n }\n\n if (value !== '_undefined_') {\n handlePathChangeUnvalidated(path, value)\n }\n\n showAllErrorsRef.current = false\n\n validateData()\n\n const data = internalDataRef.current as Data\n const transformedData = transformOut\n ? mutateDataHandler(data, transformOut)\n : data\n\n if (isAsync(onChange)) {\n return await onChange(transformedData)\n }\n\n return onChange?.(transformedData)\n },\n [\n handlePathChangeUnvalidated,\n mutateDataHandler,\n onChange,\n transformOut,\n validateData,\n ]\n )\n\n // - Mounted fields\n const handleMountField = useCallback((path: Path) => {\n mountedFieldPathsRef.current = addListPath(\n mountedFieldPathsRef.current,\n path\n )\n }, [])\n\n const handleUnMountField = useCallback((path: Path) => {\n mountedFieldPathsRef.current = removeListPath(\n mountedFieldPathsRef.current,\n path\n )\n }, [])\n\n // - Features\n const scrollToTop = useCallback(() => {\n if (typeof window !== 'undefined') {\n window?.scrollTo?.({ top: 0, behavior: 'smooth' })\n }\n }, [])\n\n /**\n * Shared logic dedicated to submit the whole form\n */\n const handleSubmitCall = useCallback<ContextState['handleSubmitCall']>(\n async (args) => {\n const {\n onSubmit,\n enableAsyncBehaviour,\n skipFieldValidation,\n skipErrorCheck,\n } = args\n\n setSubmitState({ error: undefined })\n\n const asyncBehaviorIsEnabled =\n (skipErrorCheck\n ? true\n : // Don't enable async behaviour if we have errors, but when we have a pending state\n !hasErrors() || hasFieldState('pending')) &&\n (enableAsyncBehaviour || hasFieldWithAsyncValidator())\n\n if (asyncBehaviorIsEnabled) {\n setFormState('pending')\n }\n\n // Just call the submit listeners \"once\", and not on the retry/recall\n if (!skipFieldValidation) {\n for (const {\n path,\n type,\n callback,\n } of fieldEventListenersRef.current) {\n if (\n type === 'onSubmit' &&\n mountedFieldPathsRef.current.includes(path)\n ) {\n // Call all submit listener callbacks (e.g. to validate fields)\n if (asyncBehaviorIsEnabled) {\n await callback()\n } else {\n callback()\n }\n }\n }\n }\n\n if (\n !(skipErrorCheck ? false : hasErrors()) &&\n !hasFieldState('pending') &&\n (skipFieldValidation ? true : !hasFieldState('error'))\n ) {\n let result: EventStateObject | unknown\n\n try {\n result = await onSubmit()\n\n if (result instanceof Error) {\n throw result\n }\n } catch (error) {\n result = { error }\n }\n\n const state = result as EventStateObject\n\n if (asyncBehaviorIsEnabled) {\n setFormState(state?.error ? 'abort' : 'complete')\n }\n\n // Force the state to be set by a custom status\n if (state?.['status']) {\n setFormState(state?.['status'])\n }\n\n if (state?.error || state?.warning || state?.info) {\n setSubmitState(state)\n }\n } else {\n if (asyncBehaviorIsEnabled) {\n window.requestAnimationFrame(() => {\n setFormState(undefined)\n })\n\n if (!skipFieldValidation) {\n // Add a event listener to continue the submit after the pending state is resolved\n onSubmitContinueRef.current = () => {\n window.requestAnimationFrame(() => {\n // Do not call the validators again,\n // because we already did it in the first call\n // If they are async, we wait for them to finish anyway\n handleSubmitCall({ ...args, skipFieldValidation: true })\n })\n }\n }\n }\n\n onSubmitRequest?.()\n\n setShowAllErrors(true)\n }\n\n return internalDataRef.current\n },\n [\n setSubmitState,\n hasErrors,\n hasFieldWithAsyncValidator,\n hasFieldState,\n setFormState,\n onSubmitRequest,\n setShowAllErrors,\n ]\n )\n\n /**\n * Request to submit the whole form\n */\n const handleSubmit = useCallback<ContextState['handleSubmit']>(\n async ({ formElement = null } = {}) => {\n handleSubmitCall({\n enableAsyncBehaviour: isAsync(onSubmit),\n onSubmit: async () => {\n // - Mutate the data context\n const data = internalDataRef.current\n const filteredData = filterDataHandler(\n transformOut ? mutateDataHandler(data, transformOut) : data\n )\n const opts = {\n resetForm: () => {\n formElement?.reset?.()\n\n if (typeof window !== 'undefined') {\n if (sessionStorageId) {\n window.sessionStorage.removeItem(sessionStorageId)\n }\n }\n\n forceUpdate() // in order to fill \"empty fields\" again with their internal states\n },\n clearData: () => {\n internalDataRef.current = {} as Data\n if (id) {\n setSharedData?.({} as Data)\n } else {\n forceUpdate()\n }\n },\n }\n\n let result = undefined\n\n if (isAsync(onSubmit)) {\n result = await onSubmit(filteredData, opts)\n } else {\n result = onSubmit?.(filteredData, opts)\n }\n\n const completeResult = await onSubmitComplete?.(\n filteredData,\n result\n )\n if (completeResult) {\n result =\n Object.keys(result).length > 0\n ? { ...result, ...completeResult }\n : completeResult\n }\n\n if (scrollTopOnSubmit) {\n scrollToTop()\n }\n\n return result\n },\n })\n },\n [\n filterDataHandler,\n handleSubmitCall,\n id,\n mutateDataHandler,\n onSubmit,\n onSubmitComplete,\n scrollToTop,\n scrollTopOnSubmit,\n sessionStorageId,\n setSharedData,\n transformOut,\n ]\n )\n\n // Collect listeners to be called during form submit\n const fieldEventListenersRef = useRef<Array<EventListenerCall>>([])\n const setFieldEventListener = useCallback(\n (\n path: EventListenerCall['path'],\n type: EventListenerCall['type'],\n callback: EventListenerCall['callback']\n ) => {\n fieldEventListenersRef.current =\n fieldEventListenersRef.current.filter(({ path: p, type: t }) => {\n return !(p === path && t === type)\n })\n fieldEventListenersRef.current.push({ path, type, callback })\n },\n []\n )\n\n // Handle unresolved field states during async submit\n const onSubmitContinueRef = useRef<() => void>(null)\n if (!hasFieldState('pending')) {\n onSubmitContinueRef.current?.()\n onSubmitContinueRef.current = null\n }\n\n // - ajv validator routines\n useMountEffect(() => {\n if (schema) {\n ajvValidatorRef.current = ajvRef.current?.compile(schema)\n }\n\n // Validate the initial data\n validateData()\n })\n useUpdateEffect(() => {\n if (schema && schema !== cacheRef.current.schema) {\n cacheRef.current.schema = schema\n ajvValidatorRef.current = ajvRef.current?.compile(schema)\n\n validateData()\n forceUpdate()\n }\n }, [schema, validateData, forceUpdate])\n\n const onTimeout = useCallback(() => {\n setFormState(undefined)\n setSubmitState({\n info: undefined,\n warning: undefined,\n error: undefined,\n })\n }, [setFormState, setSubmitState])\n\n const { bufferedFormState: formState } = useFormStatusBuffer({\n formState: formStateRef.current,\n waitFor: hasFieldState('pending'),\n minimumAsyncBehaviorTime,\n asyncSubmitTimeout,\n onTimeout,\n })\n\n const submitState = submitStateRef.current\n const disabled =\n typeof rest?.['disabled'] === 'boolean'\n ? rest?.['disabled']\n : (formState === 'pending') === true\n ? true\n : undefined\n\n return (\n <Context.Provider\n value={{\n /** Method */\n handlePathChange,\n handlePathChangeUnvalidated,\n handleSubmit,\n handleMountField,\n handleUnMountField,\n handleSubmitCall,\n setFormState,\n setSubmitState,\n setShowAllErrors,\n setFieldEventListener,\n setFieldState,\n setFieldError,\n setProps,\n hasErrors,\n hasFieldError,\n hasFieldState,\n validateData,\n updateDataValue,\n setData,\n filterDataHandler,\n scrollToTop,\n\n /** State handling */\n schema,\n disabled,\n required,\n formState,\n submitState,\n contextErrorMessages,\n hasContext: true,\n errors: errorsRef.current,\n showAllErrors: showAllErrorsRef.current,\n fieldPropsRef,\n ajvInstance: ajvRef.current,\n\n /** Additional */\n id,\n data: internalDataRef.current,\n props,\n ...rest,\n }}\n >\n <FieldProvider\n FormStatus={\n globalStatusId\n ? {\n globalStatus: {\n id: globalStatusId,\n title: translation.errorSummaryTitle,\n show: showAllErrorsRef.current,\n },\n }\n : undefined\n }\n formElement={disabled ? { disabled: true } : undefined}\n locale={locale ? locale : undefined}\n translations={translations ? translations : undefined}\n >\n {children}\n </FieldProvider>\n </Context.Provider>\n )\n}\n\ntype PathList = string[]\n\nexport function addListPath(paths: PathList, path: Path): PathList {\n return paths.includes(path) ? paths : paths.concat(path)\n}\n\nexport function removeListPath(paths: PathList, path: Path): PathList {\n return paths.filter((thisPath) => thisPath !== path)\n}\n\ntype FormStatusBufferProps = {\n minimumAsyncBehaviorTime?: Props<unknown>['minimumAsyncBehaviorTime']\n asyncSubmitTimeout?: Props<unknown>['asyncSubmitTimeout']\n formState: ContextState['formState']\n waitFor: boolean\n onTimeout: () => void\n}\n\nfunction useFormStatusBuffer(props: FormStatusBufferProps) {\n const {\n formState,\n waitFor,\n minimumAsyncBehaviorTime,\n asyncSubmitTimeout,\n onTimeout,\n } = props || {}\n\n const [, forceUpdate] = useReducer(() => ({}), {})\n const stateRef = useRef<SubmitState>()\n const nowRef = useRef<number | null>(null)\n const timeoutRef = useRef<{\n complete?: NodeJS.Timeout | null\n reset?: NodeJS.Timeout | null\n timeout?: NodeJS.Timeout | null\n }>({})\n\n const setState = useCallback(\n (state: SubmitState) => {\n stateRef.current = state\n forceUpdate()\n },\n [forceUpdate]\n )\n\n const clear = useCallback(() => {\n for (const key in timeoutRef.current) {\n clearTimeout(timeoutRef.current[key])\n }\n }, [])\n\n const hadCompleteRef = useRef(false)\n const activeElementRef = useRef<HTMLElement>(null)\n\n useEffect(() => {\n // This offset is used to calculate the delay,\n // which ensures that the form state is displayed for at least minimumAsyncBehaviorTime duration.\n // If the form was 'pending' for less than minimumAsyncBehaviorTime,\n // the delay will be the remaining time to reach minimumAsyncBehaviorTime.\n const isTest = process.env.NODE_ENV === 'test'\n const minimum =\n minimumAsyncBehaviorTime ??\n // make it testable\n (isTest ? 1 : 1000)\n\n if (stateRef.current && formState === 'error') {\n clear()\n setState(undefined)\n return\n }\n\n if (formState === 'abort') {\n clear()\n setState('abort')\n\n timeoutRef.current.reset = setTimeout(() => {\n nowRef.current = 0\n setState(undefined)\n }, minimum)\n return\n }\n\n if (formState === 'complete') {\n hadCompleteRef.current = true\n }\n\n if (formState === 'pending' && stateRef.current !== 'pending') {\n activeElementRef.current = document.activeElement as HTMLElement\n clear()\n nowRef.current = Date.now()\n hadCompleteRef.current = false\n setState('pending')\n } else if (stateRef.current === 'pending') {\n const offset = Math.max(Date.now() - nowRef.current)\n const delay = isTest ? minimum : Math.max(minimum - offset, 0)\n\n if (!waitFor) {\n timeoutRef.current.complete = setTimeout(() => {\n if (hadCompleteRef.current) {\n setState('complete')\n }\n window.requestAnimationFrame(() => {\n activeElementRef.current?.focus?.()\n })\n }, delay)\n\n timeoutRef.current.reset = setTimeout(() => {\n nowRef.current = 0\n setState(undefined)\n clear()\n }, delay + minimum)\n }\n }\n\n if (stateRef.current === 'pending') {\n timeoutRef.current.timeout = setTimeout(() => {\n clear()\n setState(undefined)\n onTimeout?.()\n }, asyncSubmitTimeout ?? 30000)\n }\n\n return clear\n }, [\n clear,\n minimumAsyncBehaviorTime,\n formState,\n setState,\n waitFor,\n asyncSubmitTimeout,\n onTimeout,\n ])\n\n return { bufferedFormState: stateRef.current }\n}\n"],"mappings":"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"}