@wordpress/dataviews 10.2.0 → 10.3.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 (529) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +108 -1
  3. package/build/components/dataform/index.js +6 -2
  4. package/build/components/dataform/index.js.map +3 -3
  5. package/build/components/dataform-context/index.js +4 -2
  6. package/build/components/dataform-context/index.js.map +1 -1
  7. package/build/components/dataviews/index.js +8 -6
  8. package/build/components/dataviews/index.js.map +1 -1
  9. package/build/components/dataviews-bulk-actions/index.js +4 -2
  10. package/build/components/dataviews-bulk-actions/index.js.map +1 -1
  11. package/build/components/dataviews-context/index.js +3 -1
  12. package/build/components/dataviews-context/index.js.map +1 -1
  13. package/build/components/dataviews-filters/add-filter.js +4 -2
  14. package/build/components/dataviews-filters/add-filter.js.map +1 -1
  15. package/build/components/dataviews-filters/filter.js +20 -5
  16. package/build/components/dataviews-filters/filter.js.map +3 -3
  17. package/build/components/dataviews-filters/filters-toggled.js +3 -1
  18. package/build/components/dataviews-filters/filters-toggled.js.map +1 -1
  19. package/build/components/dataviews-filters/filters.js +3 -1
  20. package/build/components/dataviews-filters/filters.js.map +1 -1
  21. package/build/components/dataviews-filters/index.js +2 -0
  22. package/build/components/dataviews-filters/index.js.map +1 -1
  23. package/build/components/dataviews-filters/input-widget.js +3 -1
  24. package/build/components/dataviews-filters/input-widget.js.map +1 -1
  25. package/build/components/dataviews-filters/reset-filters.js +3 -1
  26. package/build/components/dataviews-filters/reset-filters.js.map +1 -1
  27. package/build/components/dataviews-filters/search-widget.js +8 -6
  28. package/build/components/dataviews-filters/search-widget.js.map +2 -2
  29. package/build/components/dataviews-filters/toggle.js +3 -1
  30. package/build/components/dataviews-filters/toggle.js.map +1 -1
  31. package/build/components/dataviews-filters/use-filters.js +2 -0
  32. package/build/components/dataviews-filters/use-filters.js.map +1 -1
  33. package/build/components/dataviews-filters/utils.js +4 -2
  34. package/build/components/dataviews-filters/utils.js.map +1 -1
  35. package/build/components/dataviews-footer/index.js +4 -2
  36. package/build/components/dataviews-footer/index.js.map +1 -1
  37. package/build/components/dataviews-item-actions/index.js +23 -4
  38. package/build/components/dataviews-item-actions/index.js.map +2 -2
  39. package/build/components/dataviews-layout/index.js +3 -1
  40. package/build/components/dataviews-layout/index.js.map +1 -1
  41. package/build/components/dataviews-pagination/index.js +3 -1
  42. package/build/components/dataviews-pagination/index.js.map +1 -1
  43. package/build/components/dataviews-picker/footer.js +4 -2
  44. package/build/components/dataviews-picker/footer.js.map +1 -1
  45. package/build/components/dataviews-picker/index.js +8 -6
  46. package/build/components/dataviews-picker/index.js.map +1 -1
  47. package/build/components/dataviews-search/index.js +4 -2
  48. package/build/components/dataviews-search/index.js.map +1 -1
  49. package/build/components/dataviews-selection-checkbox/index.js +3 -1
  50. package/build/components/dataviews-selection-checkbox/index.js.map +1 -1
  51. package/build/components/dataviews-view-config/index.js +17 -400
  52. package/build/components/dataviews-view-config/index.js.map +3 -3
  53. package/build/components/dataviews-view-config/infinite-scroll-toggle.js +3 -1
  54. package/build/components/dataviews-view-config/infinite-scroll-toggle.js.map +1 -1
  55. package/build/components/dataviews-view-config/properties-section.js +177 -0
  56. package/build/components/dataviews-view-config/properties-section.js.map +7 -0
  57. package/build/constants.js +39 -34
  58. package/build/constants.js.map +2 -2
  59. package/build/dataform-controls/array.js +4 -2
  60. package/build/dataform-controls/array.js.map +1 -1
  61. package/build/dataform-controls/checkbox.js +4 -2
  62. package/build/dataform-controls/checkbox.js.map +1 -1
  63. package/build/dataform-controls/color.js +5 -3
  64. package/build/dataform-controls/color.js.map +1 -1
  65. package/build/dataform-controls/date.js +8 -6
  66. package/build/dataform-controls/date.js.map +1 -1
  67. package/build/dataform-controls/datetime.js +11 -15
  68. package/build/dataform-controls/datetime.js.map +3 -3
  69. package/build/dataform-controls/email.js +3 -1
  70. package/build/dataform-controls/email.js.map +1 -1
  71. package/build/dataform-controls/index.js +4 -2
  72. package/build/dataform-controls/index.js.map +1 -1
  73. package/build/dataform-controls/integer.js +3 -1
  74. package/build/dataform-controls/integer.js.map +1 -1
  75. package/build/dataform-controls/number.js +3 -1
  76. package/build/dataform-controls/number.js.map +1 -1
  77. package/build/dataform-controls/password.js +3 -1
  78. package/build/dataform-controls/password.js.map +1 -1
  79. package/build/dataform-controls/radio.js +4 -2
  80. package/build/dataform-controls/radio.js.map +1 -1
  81. package/build/dataform-controls/select.js +4 -2
  82. package/build/dataform-controls/select.js.map +1 -1
  83. package/build/dataform-controls/telephone.js +3 -1
  84. package/build/dataform-controls/telephone.js.map +1 -1
  85. package/build/dataform-controls/text.js +3 -1
  86. package/build/dataform-controls/text.js.map +1 -1
  87. package/build/dataform-controls/textarea.js +4 -2
  88. package/build/dataform-controls/textarea.js.map +1 -1
  89. package/build/dataform-controls/toggle-group.js +4 -2
  90. package/build/dataform-controls/toggle-group.js.map +1 -1
  91. package/build/dataform-controls/toggle.js +4 -2
  92. package/build/dataform-controls/toggle.js.map +1 -1
  93. package/build/dataform-controls/url.js +3 -1
  94. package/build/dataform-controls/url.js.map +1 -1
  95. package/build/dataform-controls/utils/get-custom-validity.js +2 -0
  96. package/build/dataform-controls/utils/get-custom-validity.js.map +1 -1
  97. package/build/dataform-controls/utils/relative-date-control.js +4 -2
  98. package/build/dataform-controls/utils/relative-date-control.js.map +1 -1
  99. package/build/dataform-controls/utils/validated-input.js +4 -2
  100. package/build/dataform-controls/utils/validated-input.js.map +1 -1
  101. package/build/dataform-controls/utils/validated-number.js +4 -2
  102. package/build/dataform-controls/utils/validated-number.js.map +1 -1
  103. package/build/dataform-layouts/card/index.js +65 -34
  104. package/build/dataform-layouts/card/index.js.map +3 -3
  105. package/build/dataform-layouts/data-form-layout.js +8 -14
  106. package/build/dataform-layouts/data-form-layout.js.map +3 -3
  107. package/build/dataform-layouts/details/index.js +78 -0
  108. package/build/dataform-layouts/details/index.js.map +7 -0
  109. package/build/dataform-layouts/get-summary-fields.js +3 -1
  110. package/build/dataform-layouts/get-summary-fields.js.map +1 -1
  111. package/build/dataform-layouts/index.js +9 -2
  112. package/build/dataform-layouts/index.js.map +3 -3
  113. package/build/dataform-layouts/{normalize-form-fields.js → normalize-form.js} +44 -22
  114. package/build/dataform-layouts/normalize-form.js.map +7 -0
  115. package/build/dataform-layouts/panel/dropdown.js +9 -8
  116. package/build/dataform-layouts/panel/dropdown.js.map +2 -2
  117. package/build/dataform-layouts/panel/index.js +10 -14
  118. package/build/dataform-layouts/panel/index.js.map +2 -2
  119. package/build/dataform-layouts/panel/modal.js +9 -8
  120. package/build/dataform-layouts/panel/modal.js.map +2 -2
  121. package/build/dataform-layouts/panel/summary-button.js +3 -1
  122. package/build/dataform-layouts/panel/summary-button.js.map +1 -1
  123. package/build/dataform-layouts/regular/index.js +8 -10
  124. package/build/dataform-layouts/regular/index.js.map +2 -2
  125. package/build/dataform-layouts/row/index.js +10 -33
  126. package/build/dataform-layouts/row/index.js.map +3 -3
  127. package/build/dataviews-layouts/grid/index.js +4 -2
  128. package/build/dataviews-layouts/grid/index.js.map +1 -1
  129. package/build/dataviews-layouts/grid/preview-size-picker.js +4 -2
  130. package/build/dataviews-layouts/grid/preview-size-picker.js.map +1 -1
  131. package/build/dataviews-layouts/index.js +12 -1
  132. package/build/dataviews-layouts/index.js.map +3 -3
  133. package/build/dataviews-layouts/list/index.js +6 -6
  134. package/build/dataviews-layouts/list/index.js.map +2 -2
  135. package/build/dataviews-layouts/picker-grid/index.js +4 -2
  136. package/build/dataviews-layouts/picker-grid/index.js.map +1 -1
  137. package/build/dataviews-layouts/picker-table/index.js +422 -0
  138. package/build/dataviews-layouts/picker-table/index.js.map +7 -0
  139. package/build/dataviews-layouts/table/column-header-menu.js +6 -4
  140. package/build/dataviews-layouts/table/column-header-menu.js.map +2 -2
  141. package/build/dataviews-layouts/table/column-primary.js +4 -7
  142. package/build/dataviews-layouts/table/column-primary.js.map +2 -2
  143. package/build/dataviews-layouts/table/density-picker.js +3 -1
  144. package/build/dataviews-layouts/table/density-picker.js.map +1 -1
  145. package/build/dataviews-layouts/table/index.js +48 -2
  146. package/build/dataviews-layouts/table/index.js.map +2 -2
  147. package/build/dataviews-layouts/table/use-is-horizontal-scroll-end.js +3 -1
  148. package/build/dataviews-layouts/table/use-is-horizontal-scroll-end.js.map +1 -1
  149. package/build/dataviews-layouts/utils/get-data-by-group.js +2 -0
  150. package/build/dataviews-layouts/utils/get-data-by-group.js.map +1 -1
  151. package/build/dataviews-layouts/utils/grid-items.js +4 -2
  152. package/build/dataviews-layouts/utils/grid-items.js.map +1 -1
  153. package/build/dataviews-layouts/utils/item-click-wrapper.js +3 -1
  154. package/build/dataviews-layouts/utils/item-click-wrapper.js.map +1 -1
  155. package/build/dataviews-layouts/utils/preview-size-picker.js +4 -2
  156. package/build/dataviews-layouts/utils/preview-size-picker.js.map +1 -1
  157. package/build/field-types/array.js +3 -1
  158. package/build/field-types/array.js.map +1 -1
  159. package/build/field-types/boolean.js +3 -1
  160. package/build/field-types/boolean.js.map +1 -1
  161. package/build/field-types/color.js +3 -1
  162. package/build/field-types/color.js.map +1 -1
  163. package/build/field-types/date.js +4 -2
  164. package/build/field-types/date.js.map +1 -1
  165. package/build/field-types/datetime.js +17 -2
  166. package/build/field-types/datetime.js.map +3 -3
  167. package/build/field-types/email.js +4 -2
  168. package/build/field-types/email.js.map +1 -1
  169. package/build/field-types/index.js +3 -1
  170. package/build/field-types/index.js.map +1 -1
  171. package/build/field-types/integer.js +3 -1
  172. package/build/field-types/integer.js.map +1 -1
  173. package/build/field-types/media.js +2 -0
  174. package/build/field-types/media.js.map +1 -1
  175. package/build/field-types/number.js +3 -1
  176. package/build/field-types/number.js.map +1 -1
  177. package/build/field-types/password.js +3 -1
  178. package/build/field-types/password.js.map +1 -1
  179. package/build/field-types/telephone.js +3 -1
  180. package/build/field-types/telephone.js.map +1 -1
  181. package/build/field-types/text.js +3 -1
  182. package/build/field-types/text.js.map +1 -1
  183. package/build/field-types/url.js +3 -1
  184. package/build/field-types/url.js.map +1 -1
  185. package/build/{dataform-layouts/is-combined-field.js → field-types/utils/parse-date-time.js} +15 -11
  186. package/build/field-types/utils/parse-date-time.js.map +7 -0
  187. package/build/field-types/utils/render-from-elements.js +2 -0
  188. package/build/field-types/utils/render-from-elements.js.map +1 -1
  189. package/build/hooks/index.js +2 -0
  190. package/build/hooks/index.js.map +1 -1
  191. package/build/hooks/use-elements.js +3 -1
  192. package/build/hooks/use-elements.js.map +1 -1
  193. package/build/hooks/use-form-validity.js +425 -321
  194. package/build/hooks/use-form-validity.js.map +3 -3
  195. package/build/index.js +2 -0
  196. package/build/index.js.map +1 -1
  197. package/build/lock-unlock.js +3 -1
  198. package/build/lock-unlock.js.map +1 -1
  199. package/build/types/dataform.js +2 -0
  200. package/build/types/dataform.js.map +2 -2
  201. package/build/types/dataviews.js +2 -0
  202. package/build/types/dataviews.js.map +2 -2
  203. package/build/types/field-api.js +2 -0
  204. package/build/types/field-api.js.map +1 -1
  205. package/build/types/index.js +2 -0
  206. package/build/types/index.js.map +1 -1
  207. package/build/types/private.js +2 -0
  208. package/build/types/private.js.map +1 -1
  209. package/build/utils/filter-sort-and-paginate.js +3 -1
  210. package/build/utils/filter-sort-and-paginate.js.map +1 -1
  211. package/build/utils/has-elements.js +2 -0
  212. package/build/utils/has-elements.js.map +1 -1
  213. package/build/utils/normalize-fields.js +4 -2
  214. package/build/utils/normalize-fields.js.map +1 -1
  215. package/build-module/components/dataform/index.js +5 -2
  216. package/build-module/components/dataform/index.js.map +2 -2
  217. package/build-module/components/dataform-context/index.js +3 -2
  218. package/build-module/components/dataform-context/index.js.map +1 -1
  219. package/build-module/components/dataviews/index.js +7 -6
  220. package/build-module/components/dataviews/index.js.map +1 -1
  221. package/build-module/components/dataviews-bulk-actions/index.js +3 -2
  222. package/build-module/components/dataviews-bulk-actions/index.js.map +1 -1
  223. package/build-module/components/dataviews-context/index.js +2 -1
  224. package/build-module/components/dataviews-context/index.js.map +1 -1
  225. package/build-module/components/dataviews-filters/add-filter.js +3 -2
  226. package/build-module/components/dataviews-filters/add-filter.js.map +1 -1
  227. package/build-module/components/dataviews-filters/filter.js +19 -5
  228. package/build-module/components/dataviews-filters/filter.js.map +2 -2
  229. package/build-module/components/dataviews-filters/filters-toggled.js +2 -1
  230. package/build-module/components/dataviews-filters/filters-toggled.js.map +1 -1
  231. package/build-module/components/dataviews-filters/filters.js +2 -1
  232. package/build-module/components/dataviews-filters/filters.js.map +1 -1
  233. package/build-module/components/dataviews-filters/index.js +1 -0
  234. package/build-module/components/dataviews-filters/index.js.map +1 -1
  235. package/build-module/components/dataviews-filters/input-widget.js +2 -1
  236. package/build-module/components/dataviews-filters/input-widget.js.map +1 -1
  237. package/build-module/components/dataviews-filters/reset-filters.js +2 -1
  238. package/build-module/components/dataviews-filters/reset-filters.js.map +1 -1
  239. package/build-module/components/dataviews-filters/search-widget.js +7 -6
  240. package/build-module/components/dataviews-filters/search-widget.js.map +2 -2
  241. package/build-module/components/dataviews-filters/toggle.js +2 -1
  242. package/build-module/components/dataviews-filters/toggle.js.map +1 -1
  243. package/build-module/components/dataviews-filters/use-filters.js +1 -0
  244. package/build-module/components/dataviews-filters/use-filters.js.map +1 -1
  245. package/build-module/components/dataviews-filters/utils.js +3 -2
  246. package/build-module/components/dataviews-filters/utils.js.map +1 -1
  247. package/build-module/components/dataviews-footer/index.js +3 -2
  248. package/build-module/components/dataviews-footer/index.js.map +1 -1
  249. package/build-module/components/dataviews-item-actions/index.js +22 -4
  250. package/build-module/components/dataviews-item-actions/index.js.map +2 -2
  251. package/build-module/components/dataviews-layout/index.js +2 -1
  252. package/build-module/components/dataviews-layout/index.js.map +1 -1
  253. package/build-module/components/dataviews-pagination/index.js +2 -1
  254. package/build-module/components/dataviews-pagination/index.js.map +1 -1
  255. package/build-module/components/dataviews-picker/footer.js +3 -2
  256. package/build-module/components/dataviews-picker/footer.js.map +1 -1
  257. package/build-module/components/dataviews-picker/index.js +7 -6
  258. package/build-module/components/dataviews-picker/index.js.map +1 -1
  259. package/build-module/components/dataviews-search/index.js +3 -2
  260. package/build-module/components/dataviews-search/index.js.map +1 -1
  261. package/build-module/components/dataviews-selection-checkbox/index.js +2 -1
  262. package/build-module/components/dataviews-selection-checkbox/index.js.map +1 -1
  263. package/build-module/components/dataviews-view-config/index.js +20 -416
  264. package/build-module/components/dataviews-view-config/index.js.map +2 -2
  265. package/build-module/components/dataviews-view-config/infinite-scroll-toggle.js +2 -1
  266. package/build-module/components/dataviews-view-config/infinite-scroll-toggle.js.map +1 -1
  267. package/build-module/components/dataviews-view-config/properties-section.js +149 -0
  268. package/build-module/components/dataviews-view-config/properties-section.js.map +7 -0
  269. package/build-module/constants.js +37 -34
  270. package/build-module/constants.js.map +2 -2
  271. package/build-module/dataform-controls/array.js +3 -2
  272. package/build-module/dataform-controls/array.js.map +1 -1
  273. package/build-module/dataform-controls/checkbox.js +3 -2
  274. package/build-module/dataform-controls/checkbox.js.map +1 -1
  275. package/build-module/dataform-controls/color.js +4 -3
  276. package/build-module/dataform-controls/color.js.map +1 -1
  277. package/build-module/dataform-controls/date.js +7 -6
  278. package/build-module/dataform-controls/date.js.map +1 -1
  279. package/build-module/dataform-controls/datetime.js +7 -12
  280. package/build-module/dataform-controls/datetime.js.map +2 -2
  281. package/build-module/dataform-controls/email.js +2 -1
  282. package/build-module/dataform-controls/email.js.map +1 -1
  283. package/build-module/dataform-controls/index.js +3 -2
  284. package/build-module/dataform-controls/index.js.map +1 -1
  285. package/build-module/dataform-controls/integer.js +2 -1
  286. package/build-module/dataform-controls/integer.js.map +1 -1
  287. package/build-module/dataform-controls/number.js +2 -1
  288. package/build-module/dataform-controls/number.js.map +1 -1
  289. package/build-module/dataform-controls/password.js +2 -1
  290. package/build-module/dataform-controls/password.js.map +1 -1
  291. package/build-module/dataform-controls/radio.js +3 -2
  292. package/build-module/dataform-controls/radio.js.map +1 -1
  293. package/build-module/dataform-controls/select.js +3 -2
  294. package/build-module/dataform-controls/select.js.map +1 -1
  295. package/build-module/dataform-controls/telephone.js +2 -1
  296. package/build-module/dataform-controls/telephone.js.map +1 -1
  297. package/build-module/dataform-controls/text.js +2 -1
  298. package/build-module/dataform-controls/text.js.map +1 -1
  299. package/build-module/dataform-controls/textarea.js +3 -2
  300. package/build-module/dataform-controls/textarea.js.map +1 -1
  301. package/build-module/dataform-controls/toggle-group.js +3 -2
  302. package/build-module/dataform-controls/toggle-group.js.map +1 -1
  303. package/build-module/dataform-controls/toggle.js +3 -2
  304. package/build-module/dataform-controls/toggle.js.map +1 -1
  305. package/build-module/dataform-controls/url.js +2 -1
  306. package/build-module/dataform-controls/url.js.map +1 -1
  307. package/build-module/dataform-controls/utils/get-custom-validity.js +1 -0
  308. package/build-module/dataform-controls/utils/get-custom-validity.js.map +1 -1
  309. package/build-module/dataform-controls/utils/relative-date-control.js +3 -2
  310. package/build-module/dataform-controls/utils/relative-date-control.js.map +1 -1
  311. package/build-module/dataform-controls/utils/validated-input.js +3 -2
  312. package/build-module/dataform-controls/utils/validated-input.js.map +1 -1
  313. package/build-module/dataform-controls/utils/validated-number.js +3 -2
  314. package/build-module/dataform-controls/utils/validated-number.js.map +1 -1
  315. package/build-module/dataform-layouts/card/index.js +63 -33
  316. package/build-module/dataform-layouts/card/index.js.map +3 -3
  317. package/build-module/dataform-layouts/data-form-layout.js +8 -15
  318. package/build-module/dataform-layouts/data-form-layout.js.map +2 -2
  319. package/build-module/dataform-layouts/details/index.js +47 -0
  320. package/build-module/dataform-layouts/details/index.js.map +7 -0
  321. package/build-module/dataform-layouts/get-summary-fields.js +2 -1
  322. package/build-module/dataform-layouts/get-summary-fields.js.map +1 -1
  323. package/build-module/dataform-layouts/index.js +8 -2
  324. package/build-module/dataform-layouts/index.js.map +2 -2
  325. package/build-module/dataform-layouts/{normalize-form-fields.js → normalize-form.js} +39 -17
  326. package/build-module/dataform-layouts/normalize-form.js.map +7 -0
  327. package/build-module/dataform-layouts/panel/dropdown.js +7 -7
  328. package/build-module/dataform-layouts/panel/dropdown.js.map +2 -2
  329. package/build-module/dataform-layouts/panel/index.js +9 -14
  330. package/build-module/dataform-layouts/panel/index.js.map +2 -2
  331. package/build-module/dataform-layouts/panel/modal.js +7 -7
  332. package/build-module/dataform-layouts/panel/modal.js.map +2 -2
  333. package/build-module/dataform-layouts/panel/summary-button.js +2 -1
  334. package/build-module/dataform-layouts/panel/summary-button.js.map +1 -1
  335. package/build-module/dataform-layouts/regular/index.js +6 -9
  336. package/build-module/dataform-layouts/regular/index.js.map +2 -2
  337. package/build-module/dataform-layouts/row/index.js +9 -23
  338. package/build-module/dataform-layouts/row/index.js.map +2 -2
  339. package/build-module/dataviews-layouts/grid/index.js +3 -2
  340. package/build-module/dataviews-layouts/grid/index.js.map +1 -1
  341. package/build-module/dataviews-layouts/grid/preview-size-picker.js +3 -2
  342. package/build-module/dataviews-layouts/grid/preview-size-picker.js.map +1 -1
  343. package/build-module/dataviews-layouts/index.js +13 -2
  344. package/build-module/dataviews-layouts/index.js.map +2 -2
  345. package/build-module/dataviews-layouts/list/index.js +5 -6
  346. package/build-module/dataviews-layouts/list/index.js.map +2 -2
  347. package/build-module/dataviews-layouts/picker-grid/index.js +3 -2
  348. package/build-module/dataviews-layouts/picker-grid/index.js.map +1 -1
  349. package/build-module/dataviews-layouts/picker-table/index.js +397 -0
  350. package/build-module/dataviews-layouts/picker-table/index.js.map +7 -0
  351. package/build-module/dataviews-layouts/table/column-header-menu.js +5 -4
  352. package/build-module/dataviews-layouts/table/column-header-menu.js.map +2 -2
  353. package/build-module/dataviews-layouts/table/column-primary.js +3 -7
  354. package/build-module/dataviews-layouts/table/column-primary.js.map +2 -2
  355. package/build-module/dataviews-layouts/table/density-picker.js +2 -1
  356. package/build-module/dataviews-layouts/table/density-picker.js.map +1 -1
  357. package/build-module/dataviews-layouts/table/index.js +48 -3
  358. package/build-module/dataviews-layouts/table/index.js.map +2 -2
  359. package/build-module/dataviews-layouts/table/use-is-horizontal-scroll-end.js +2 -1
  360. package/build-module/dataviews-layouts/table/use-is-horizontal-scroll-end.js.map +1 -1
  361. package/build-module/dataviews-layouts/utils/get-data-by-group.js +1 -0
  362. package/build-module/dataviews-layouts/utils/get-data-by-group.js.map +1 -1
  363. package/build-module/dataviews-layouts/utils/grid-items.js +3 -2
  364. package/build-module/dataviews-layouts/utils/grid-items.js.map +1 -1
  365. package/build-module/dataviews-layouts/utils/item-click-wrapper.js +2 -1
  366. package/build-module/dataviews-layouts/utils/item-click-wrapper.js.map +1 -1
  367. package/build-module/dataviews-layouts/utils/preview-size-picker.js +3 -2
  368. package/build-module/dataviews-layouts/utils/preview-size-picker.js.map +1 -1
  369. package/build-module/field-types/array.js +2 -1
  370. package/build-module/field-types/array.js.map +1 -1
  371. package/build-module/field-types/boolean.js +2 -1
  372. package/build-module/field-types/boolean.js.map +1 -1
  373. package/build-module/field-types/color.js +2 -1
  374. package/build-module/field-types/color.js.map +1 -1
  375. package/build-module/field-types/date.js +3 -2
  376. package/build-module/field-types/date.js.map +1 -1
  377. package/build-module/field-types/datetime.js +16 -2
  378. package/build-module/field-types/datetime.js.map +2 -2
  379. package/build-module/field-types/email.js +3 -2
  380. package/build-module/field-types/email.js.map +1 -1
  381. package/build-module/field-types/index.js +2 -1
  382. package/build-module/field-types/index.js.map +1 -1
  383. package/build-module/field-types/integer.js +2 -1
  384. package/build-module/field-types/integer.js.map +1 -1
  385. package/build-module/field-types/media.js +1 -0
  386. package/build-module/field-types/media.js.map +1 -1
  387. package/build-module/field-types/number.js +2 -1
  388. package/build-module/field-types/number.js.map +1 -1
  389. package/build-module/field-types/password.js +2 -1
  390. package/build-module/field-types/password.js.map +1 -1
  391. package/build-module/field-types/telephone.js +2 -1
  392. package/build-module/field-types/telephone.js.map +1 -1
  393. package/build-module/field-types/text.js +2 -1
  394. package/build-module/field-types/text.js.map +1 -1
  395. package/build-module/field-types/url.js +2 -1
  396. package/build-module/field-types/url.js.map +1 -1
  397. package/build-module/field-types/utils/parse-date-time.js +14 -0
  398. package/build-module/field-types/utils/parse-date-time.js.map +7 -0
  399. package/build-module/field-types/utils/render-from-elements.js +1 -0
  400. package/build-module/field-types/utils/render-from-elements.js.map +1 -1
  401. package/build-module/hooks/index.js +1 -0
  402. package/build-module/hooks/index.js.map +1 -1
  403. package/build-module/hooks/use-elements.js +2 -1
  404. package/build-module/hooks/use-elements.js.map +1 -1
  405. package/build-module/hooks/use-form-validity.js +424 -321
  406. package/build-module/hooks/use-form-validity.js.map +3 -3
  407. package/build-module/index.js +1 -0
  408. package/build-module/index.js.map +1 -1
  409. package/build-module/lock-unlock.js +2 -1
  410. package/build-module/lock-unlock.js.map +1 -1
  411. package/build-module/utils/filter-sort-and-paginate.js +2 -1
  412. package/build-module/utils/filter-sort-and-paginate.js.map +1 -1
  413. package/build-module/utils/has-elements.js +1 -0
  414. package/build-module/utils/has-elements.js.map +1 -1
  415. package/build-module/utils/normalize-fields.js +3 -2
  416. package/build-module/utils/normalize-fields.js.map +1 -1
  417. package/build-style/style-rtl.css +35 -40
  418. package/build-style/style.css +35 -40
  419. package/build-types/components/dataform/index.d.ts.map +1 -1
  420. package/build-types/components/dataviews-filters/filter.d.ts.map +1 -1
  421. package/build-types/components/dataviews-filters/utils.d.ts.map +1 -1
  422. package/build-types/components/dataviews-item-actions/index.d.ts.map +1 -1
  423. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
  424. package/build-types/components/dataviews-view-config/properties-section.d.ts +4 -0
  425. package/build-types/components/dataviews-view-config/properties-section.d.ts.map +1 -0
  426. package/build-types/constants.d.ts +1 -0
  427. package/build-types/constants.d.ts.map +1 -1
  428. package/build-types/dataform-controls/datetime.d.ts.map +1 -1
  429. package/build-types/dataform-layouts/card/index.d.ts +1 -1
  430. package/build-types/dataform-layouts/card/index.d.ts.map +1 -1
  431. package/build-types/dataform-layouts/data-form-layout.d.ts +4 -4
  432. package/build-types/dataform-layouts/data-form-layout.d.ts.map +1 -1
  433. package/build-types/dataform-layouts/details/index.d.ts +6 -0
  434. package/build-types/dataform-layouts/details/index.d.ts.map +1 -0
  435. package/build-types/dataform-layouts/get-summary-fields.d.ts.map +1 -1
  436. package/build-types/dataform-layouts/index.d.ts +7 -2
  437. package/build-types/dataform-layouts/index.d.ts.map +1 -1
  438. package/build-types/dataform-layouts/normalize-form.d.ts +8 -0
  439. package/build-types/dataform-layouts/normalize-form.d.ts.map +1 -0
  440. package/build-types/dataform-layouts/panel/dropdown.d.ts +2 -2
  441. package/build-types/dataform-layouts/panel/dropdown.d.ts.map +1 -1
  442. package/build-types/dataform-layouts/panel/index.d.ts.map +1 -1
  443. package/build-types/dataform-layouts/panel/modal.d.ts +2 -2
  444. package/build-types/dataform-layouts/panel/modal.d.ts.map +1 -1
  445. package/build-types/dataform-layouts/regular/index.d.ts.map +1 -1
  446. package/build-types/dataform-layouts/row/index.d.ts.map +1 -1
  447. package/build-types/dataviews-layouts/index.d.ts +8 -0
  448. package/build-types/dataviews-layouts/index.d.ts.map +1 -1
  449. package/build-types/dataviews-layouts/list/index.d.ts.map +1 -1
  450. package/build-types/dataviews-layouts/picker-table/index.d.ts +4 -0
  451. package/build-types/dataviews-layouts/picker-table/index.d.ts.map +1 -0
  452. package/build-types/dataviews-layouts/table/column-header-menu.d.ts +3 -3
  453. package/build-types/dataviews-layouts/table/column-header-menu.d.ts.map +1 -1
  454. package/build-types/dataviews-layouts/table/column-primary.d.ts.map +1 -1
  455. package/build-types/dataviews-layouts/table/index.d.ts.map +1 -1
  456. package/build-types/field-types/datetime.d.ts +1 -1
  457. package/build-types/field-types/datetime.d.ts.map +1 -1
  458. package/build-types/field-types/utils/parse-date-time.d.ts +2 -0
  459. package/build-types/field-types/utils/parse-date-time.d.ts.map +1 -0
  460. package/build-types/hooks/use-form-validity.d.ts.map +1 -1
  461. package/build-types/stories/dataform.story.d.ts +4 -10
  462. package/build-types/stories/dataform.story.d.ts.map +1 -1
  463. package/build-types/stories/dataviews-picker.story.d.ts +33 -0
  464. package/build-types/stories/dataviews-picker.story.d.ts.map +1 -1
  465. package/build-types/stories/dataviews.fixtures.d.ts.map +1 -1
  466. package/build-types/stories/dataviews.story.d.ts +7 -1
  467. package/build-types/stories/dataviews.story.d.ts.map +1 -1
  468. package/build-types/test/normalize-form.d.ts +2 -0
  469. package/build-types/test/normalize-form.d.ts.map +1 -0
  470. package/build-types/types/dataform.d.ts +23 -9
  471. package/build-types/types/dataform.d.ts.map +1 -1
  472. package/build-types/types/dataviews.d.ts +23 -2
  473. package/build-types/types/dataviews.d.ts.map +1 -1
  474. package/build-wp/index.js +2101 -1673
  475. package/package.json +15 -15
  476. package/src/components/dataform/index.tsx +3 -1
  477. package/src/components/dataviews-filters/filter.tsx +16 -1
  478. package/src/components/dataviews-item-actions/index.tsx +37 -14
  479. package/src/components/dataviews-view-config/index.tsx +8 -504
  480. package/src/components/dataviews-view-config/properties-section.tsx +201 -0
  481. package/src/components/dataviews-view-config/style.scss +2 -39
  482. package/src/constants.ts +1 -0
  483. package/src/dataform-controls/datetime.tsx +3 -10
  484. package/src/dataform-layouts/card/index.tsx +45 -21
  485. package/src/dataform-layouts/data-form-layout.tsx +12 -23
  486. package/src/dataform-layouts/details/index.tsx +71 -0
  487. package/src/dataform-layouts/details/style.scss +5 -0
  488. package/src/dataform-layouts/index.tsx +10 -3
  489. package/src/dataform-layouts/{normalize-form-fields.ts → normalize-form.ts} +45 -23
  490. package/src/dataform-layouts/panel/dropdown.tsx +10 -13
  491. package/src/dataform-layouts/panel/index.tsx +9 -24
  492. package/src/dataform-layouts/panel/modal.tsx +15 -15
  493. package/src/dataform-layouts/regular/index.tsx +7 -12
  494. package/src/dataform-layouts/row/index.tsx +13 -26
  495. package/src/dataviews-layouts/index.ts +10 -0
  496. package/src/dataviews-layouts/list/index.tsx +2 -5
  497. package/src/dataviews-layouts/picker-table/index.tsx +487 -0
  498. package/src/dataviews-layouts/picker-table/style.scss +45 -0
  499. package/src/dataviews-layouts/table/column-header-menu.tsx +3 -2
  500. package/src/dataviews-layouts/table/column-primary.tsx +4 -7
  501. package/src/dataviews-layouts/table/index.tsx +54 -2
  502. package/src/dataviews-layouts/table/style.scss +6 -1
  503. package/src/field-types/datetime.tsx +16 -5
  504. package/src/field-types/utils/parse-date-time.ts +17 -0
  505. package/src/hooks/use-form-validity.ts +572 -422
  506. package/src/stories/dataform.story.tsx +586 -454
  507. package/src/stories/dataviews-picker.story.tsx +166 -38
  508. package/src/stories/dataviews.fixtures.tsx +4 -1
  509. package/src/stories/dataviews.story.tsx +10 -2
  510. package/src/stories/field-types.story.tsx +7 -7
  511. package/src/style.scss +2 -0
  512. package/src/test/normalize-form.ts +568 -0
  513. package/src/test/use-form-validity.ts +318 -33
  514. package/src/types/dataform.ts +30 -11
  515. package/src/types/dataviews.ts +36 -2
  516. package/tsconfig.tsbuildinfo +1 -1
  517. package/build/dataform-layouts/is-combined-field.js.map +0 -7
  518. package/build/dataform-layouts/normalize-form-fields.js.map +0 -7
  519. package/build-module/dataform-layouts/is-combined-field.js +0 -7
  520. package/build-module/dataform-layouts/is-combined-field.js.map +0 -7
  521. package/build-module/dataform-layouts/normalize-form-fields.js.map +0 -7
  522. package/build-types/dataform-layouts/is-combined-field.d.ts +0 -6
  523. package/build-types/dataform-layouts/is-combined-field.d.ts.map +0 -1
  524. package/build-types/dataform-layouts/normalize-form-fields.d.ts +0 -19
  525. package/build-types/dataform-layouts/normalize-form-fields.d.ts.map +0 -1
  526. package/build-types/test/normalize-form-fields.d.ts +0 -2
  527. package/build-types/test/normalize-form-fields.d.ts.map +0 -1
  528. package/src/dataform-layouts/is-combined-field.ts +0 -10
  529. package/src/test/normalize-form-fields.ts +0 -324
@@ -26,6 +26,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // packages/dataviews/src/hooks/use-form-validity.ts
29
31
  var use_form_validity_exports = {};
30
32
  __export(use_form_validity_exports, {
31
33
  default: () => use_form_validity_default,
@@ -33,12 +35,13 @@ __export(use_form_validity_exports, {
33
35
  });
34
36
  module.exports = __toCommonJS(use_form_validity_exports);
35
37
  var import_deepmerge = __toESM(require("deepmerge"));
38
+ var import_es6 = __toESM(require("fast-deep-equal/es6"));
36
39
  var import_element = require("@wordpress/element");
37
40
  var import_i18n = require("@wordpress/i18n");
38
41
  var import_normalize_fields = __toESM(require("../utils/normalize-fields"));
39
- var import_normalize_form_fields = __toESM(require("../dataform-layouts/normalize-form-fields"));
40
- const isEmptyNullOrUndefined = (value) => [void 0, "", null].includes(value);
41
- const isArrayOrElementsEmptyNullOrUndefined = (value) => {
42
+ var import_normalize_form = __toESM(require("../dataform-layouts/normalize-form"));
43
+ var isEmptyNullOrUndefined = (value) => [void 0, "", null].includes(value);
44
+ var isArrayOrElementsEmptyNullOrUndefined = (value) => {
42
45
  return !Array.isArray(value) || value.length === 0 || value.every((element) => isEmptyNullOrUndefined(element));
43
46
  };
44
47
  function isInvalidForRequired(fieldType, value) {
@@ -62,352 +65,453 @@ function isFormValid(formValidity) {
62
65
  );
63
66
  });
64
67
  }
65
- function updateFieldValidity(setFormValidity, parentFieldId, fieldId, newValidity) {
66
- if (parentFieldId) {
67
- setFormValidity((prev) => ({
68
- ...prev,
69
- [parentFieldId]: {
70
- ...prev?.[parentFieldId],
71
- children: {
72
- ...prev?.[parentFieldId]?.children,
73
- [fieldId]: {
74
- ...newValidity
75
- }
76
- }
68
+ function getFormFieldsToValidate(form, fields) {
69
+ const normalizedForm = (0, import_normalize_form.default)(form);
70
+ if (normalizedForm.fields.length === 0) {
71
+ return [];
72
+ }
73
+ const fieldsMap = /* @__PURE__ */ new Map();
74
+ fields.forEach((field) => {
75
+ fieldsMap.set(field.id, field);
76
+ });
77
+ function processFormField(formField) {
78
+ if ("children" in formField && Array.isArray(formField.children)) {
79
+ const processedChildren = formField.children.map(processFormField).filter((child) => child !== null);
80
+ if (processedChildren.length === 0) {
81
+ return null;
77
82
  }
78
- }));
79
- } else {
80
- setFormValidity((prev) => ({
81
- ...prev,
82
- [fieldId]: {
83
- ...newValidity
83
+ const fieldDef2 = fieldsMap.get(formField.id);
84
+ if (fieldDef2) {
85
+ const [normalizedField2] = (0, import_normalize_fields.default)([
86
+ fieldDef2
87
+ ]);
88
+ return {
89
+ id: formField.id,
90
+ children: processedChildren,
91
+ field: normalizedField2
92
+ };
84
93
  }
85
- }));
94
+ return {
95
+ id: formField.id,
96
+ children: processedChildren
97
+ };
98
+ }
99
+ const fieldDef = fieldsMap.get(formField.id);
100
+ if (!fieldDef) {
101
+ return null;
102
+ }
103
+ const [normalizedField] = (0, import_normalize_fields.default)([fieldDef]);
104
+ return {
105
+ id: formField.id,
106
+ children: [],
107
+ field: normalizedField
108
+ };
86
109
  }
110
+ const toValidate = normalizedForm.fields.map(processFormField).filter((field) => field !== null);
111
+ return toValidate;
87
112
  }
88
- function getFieldsToValidate(fields, form) {
89
- const formFields = (0, import_normalize_form_fields.default)(form);
90
- if (formFields.length === 0) {
91
- return { fields: [], fieldToParent: /* @__PURE__ */ new Map() };
113
+ function setValidityAtPath(formValidity, fieldValidity, path) {
114
+ if (!formValidity) {
115
+ formValidity = {};
92
116
  }
93
- const fieldToParent = /* @__PURE__ */ new Map();
94
- const fieldIdsToValidate = [];
95
- formFields.forEach((formField) => {
96
- if (!!formField.children) {
97
- formField.children.forEach((child) => {
98
- const childId = typeof child === "string" ? child : child.id;
99
- fieldIdsToValidate.push(childId);
100
- fieldToParent.set(childId, formField.id);
101
- });
102
- } else {
103
- fieldIdsToValidate.push(formField.id);
117
+ if (path.length === 0) {
118
+ return formValidity;
119
+ }
120
+ const result = { ...formValidity };
121
+ let current = result;
122
+ for (let i = 0; i < path.length - 1; i++) {
123
+ const segment = path[i];
124
+ if (!current[segment]) {
125
+ current[segment] = {};
104
126
  }
105
- });
106
- return {
107
- fields: (0, import_normalize_fields.default)(
108
- fields.filter(
109
- (field) => fieldIdsToValidate.includes(field.id)
110
- )
111
- ),
112
- fieldToParent
127
+ current = current[segment];
128
+ }
129
+ const finalKey = path[path.length - 1];
130
+ current[finalKey] = {
131
+ ...current[finalKey] || {},
132
+ ...fieldValidity
113
133
  };
134
+ return result;
114
135
  }
115
- function useFormValidity(item, fields, form) {
116
- const [formValidity, setFormValidity] = (0, import_element.useState)();
117
- const previousValidatedValuesRef = (0, import_element.useRef)({});
118
- const customValidationCounterRef = (0, import_element.useRef)({});
119
- const elementsValidationCounterRef = (0, import_element.useRef)(
120
- {}
121
- );
122
- const validate = (0, import_element.useCallback)(() => {
123
- const { fields: fieldsToValidate, fieldToParent } = getFieldsToValidate(
124
- fields,
125
- form
126
- );
127
- if (fieldsToValidate.length === 0) {
128
- setFormValidity(void 0);
136
+ function handleElementsValidationAsync(promise, formField, promiseHandler) {
137
+ const { elementsCounterRef, setFormValidity, path, item } = promiseHandler;
138
+ const currentToken = (elementsCounterRef.current[formField.id] || 0) + 1;
139
+ elementsCounterRef.current[formField.id] = currentToken;
140
+ promise.then((result) => {
141
+ if (currentToken !== elementsCounterRef.current[formField.id]) {
129
142
  return;
130
143
  }
131
- fieldsToValidate.forEach((field) => {
132
- const value = field.getValue({ item });
133
- if (previousValidatedValuesRef.current.hasOwnProperty(field.id) && value === previousValidatedValuesRef.current[field.id]) {
134
- return;
135
- }
136
- previousValidatedValuesRef.current[field.id] = value;
137
- const parentFieldId = fieldToParent.get(field.id);
138
- if (field.isValid.required && isInvalidForRequired(field.type, value)) {
139
- updateFieldValidity(setFormValidity, parentFieldId, field.id, {
140
- required: { type: "invalid" }
141
- });
142
- return;
143
- }
144
- if (field.isValid.elements && field.hasElements && !field.getElements && Array.isArray(field.elements)) {
145
- const validValues = field.elements.map((el) => el.value);
146
- if (field.type !== "array" && !validValues.includes(value)) {
147
- updateFieldValidity(
148
- setFormValidity,
149
- parentFieldId,
150
- field.id,
151
- {
152
- elements: {
153
- type: "invalid",
154
- message: "Value must be one of the elements."
155
- }
144
+ if (!Array.isArray(result)) {
145
+ setFormValidity((prev) => {
146
+ const newFormValidity = setValidityAtPath(
147
+ prev,
148
+ {
149
+ elements: {
150
+ type: "invalid",
151
+ message: (0, import_i18n.__)("Could not validate elements.")
156
152
  }
157
- );
158
- return;
159
- }
160
- if (field.type === "array" && !Array.isArray(value)) {
161
- updateFieldValidity(
162
- setFormValidity,
163
- parentFieldId,
164
- field.id,
165
- {
166
- elements: {
167
- type: "invalid",
168
- message: "Value must be an array."
169
- }
153
+ },
154
+ [...path, formField.id]
155
+ );
156
+ return newFormValidity;
157
+ });
158
+ return;
159
+ }
160
+ const validValues = result.map((el) => el.value);
161
+ if (!!formField.field && formField.field.type !== "array" && !validValues.includes(formField.field.getValue({ item }))) {
162
+ setFormValidity((prev) => {
163
+ const newFormValidity = setValidityAtPath(
164
+ prev,
165
+ {
166
+ elements: {
167
+ type: "invalid",
168
+ message: (0, import_i18n.__)(
169
+ "Value must be one of the elements."
170
+ )
170
171
  }
171
- );
172
- return;
173
- }
174
- if (field.type === "array" && value.some((v) => !validValues.includes(v))) {
175
- updateFieldValidity(
176
- setFormValidity,
177
- parentFieldId,
178
- field.id,
179
- {
180
- elements: {
181
- type: "invalid",
182
- message: "Value must be one of the elements."
183
- }
172
+ },
173
+ [...path, formField.id]
174
+ );
175
+ return newFormValidity;
176
+ });
177
+ return;
178
+ }
179
+ if (!!formField.field && formField.field.type === "array" && !Array.isArray(formField.field.getValue({ item }))) {
180
+ setFormValidity((prev) => {
181
+ const newFormValidity = setValidityAtPath(
182
+ prev,
183
+ {
184
+ elements: {
185
+ type: "invalid",
186
+ message: (0, import_i18n.__)("Value must be an array.")
184
187
  }
185
- );
186
- return;
187
- }
188
- }
189
- if (field.isValid.elements && field.hasElements && typeof field.getElements === "function") {
190
- const currentToken = (elementsValidationCounterRef.current[field.id] || 0) + 1;
191
- elementsValidationCounterRef.current[field.id] = currentToken;
192
- updateFieldValidity(setFormValidity, parentFieldId, field.id, {
193
- elements: {
194
- type: "validating",
195
- message: "Validating..."
196
- }
197
- });
198
- field.getElements().then((result) => {
199
- if (elementsValidationCounterRef.current[field.id] !== currentToken) {
200
- return;
201
- }
202
- if (!Array.isArray(result)) {
203
- updateFieldValidity(
204
- setFormValidity,
205
- parentFieldId,
206
- field.id,
207
- {
208
- elements: {
209
- type: "invalid",
210
- message: "Could not validate elements."
211
- }
212
- }
213
- );
214
- return;
215
- }
216
- const validValues = result.map((el) => el.value);
217
- if (field.type !== "array" && !validValues.includes(value)) {
218
- updateFieldValidity(
219
- setFormValidity,
220
- parentFieldId,
221
- field.id,
222
- {
223
- elements: {
224
- type: "invalid",
225
- message: "Value must be one of the elements."
226
- }
227
- }
228
- );
229
- return;
230
- }
231
- if (field.type === "array" && !Array.isArray(value)) {
232
- updateFieldValidity(
233
- setFormValidity,
234
- parentFieldId,
235
- field.id,
236
- {
237
- elements: {
238
- type: "invalid",
239
- message: "Value must be an array."
240
- }
241
- }
242
- );
243
- return;
244
- }
245
- if (field.type === "array" && value.some(
246
- (v) => !validValues.includes(v)
247
- )) {
248
- updateFieldValidity(
249
- setFormValidity,
250
- parentFieldId,
251
- field.id,
252
- {
253
- elements: {
254
- type: "invalid",
255
- message: "Value must be one of the elements."
256
- }
257
- }
258
- );
259
- }
260
- }).catch((error) => {
261
- if (elementsValidationCounterRef.current[field.id] !== currentToken) {
262
- return;
263
- }
264
- updateFieldValidity(
265
- setFormValidity,
266
- parentFieldId,
267
- field.id,
268
- {
269
- elements: {
270
- type: "invalid",
271
- message: error.message
272
- }
188
+ },
189
+ [...path, formField.id]
190
+ );
191
+ return newFormValidity;
192
+ });
193
+ return;
194
+ }
195
+ if (!!formField.field && formField.field.type === "array" && formField.field.getValue({ item }).some((v) => !validValues.includes(v))) {
196
+ setFormValidity((prev) => {
197
+ const newFormValidity = setValidityAtPath(
198
+ prev,
199
+ {
200
+ elements: {
201
+ type: "invalid",
202
+ message: (0, import_i18n.__)(
203
+ "Value must be one of the elements."
204
+ )
273
205
  }
274
- );
275
- });
276
- }
277
- let customError;
278
- try {
279
- customError = field.isValid?.custom?.(
280
- (0, import_deepmerge.default)(
281
- item,
282
- field.setValue({
283
- item,
284
- value
285
- })
286
- ),
287
- field
206
+ },
207
+ [...path, formField.id]
288
208
  );
289
- } catch (error) {
290
- let errorMessage;
291
- if (error instanceof Error) {
292
- errorMessage = error.message;
293
- } else {
294
- errorMessage = String(error) || (0, import_i18n.__)("Unknown error when running custom validation.");
295
- }
296
- updateFieldValidity(setFormValidity, parentFieldId, field.id, {
297
- custom: {
209
+ return newFormValidity;
210
+ });
211
+ }
212
+ }).catch((error) => {
213
+ if (currentToken !== elementsCounterRef.current[formField.id]) {
214
+ return;
215
+ }
216
+ let errorMessage;
217
+ if (error instanceof Error) {
218
+ errorMessage = error.message;
219
+ } else {
220
+ errorMessage = String(error) || (0, import_i18n.__)(
221
+ "Unknown error when running elements validation asynchronously."
222
+ );
223
+ }
224
+ setFormValidity((prev) => {
225
+ const newFormValidity = setValidityAtPath(
226
+ prev,
227
+ {
228
+ elements: {
298
229
  type: "invalid",
299
230
  message: errorMessage
300
231
  }
301
- });
302
- }
303
- if (typeof customError === "string") {
304
- updateFieldValidity(setFormValidity, parentFieldId, field.id, {
232
+ },
233
+ [...path, formField.id]
234
+ );
235
+ return newFormValidity;
236
+ });
237
+ });
238
+ }
239
+ function handleCustomValidationAsync(promise, formField, promiseHandler) {
240
+ const { customCounterRef, setFormValidity, path } = promiseHandler;
241
+ const currentToken = (customCounterRef.current[formField.id] || 0) + 1;
242
+ customCounterRef.current[formField.id] = currentToken;
243
+ promise.then((result) => {
244
+ if (currentToken !== customCounterRef.current[formField.id]) {
245
+ return;
246
+ }
247
+ if (result === null) {
248
+ setFormValidity((prev) => {
249
+ const newFormValidity = setValidityAtPath(
250
+ prev,
251
+ {
252
+ custom: {
253
+ type: "valid",
254
+ message: (0, import_i18n.__)("Valid")
255
+ }
256
+ },
257
+ [...path, formField.id]
258
+ );
259
+ return newFormValidity;
260
+ });
261
+ return;
262
+ }
263
+ if (typeof result === "string") {
264
+ setFormValidity((prev) => {
265
+ const newFormValidity = setValidityAtPath(
266
+ prev,
267
+ {
268
+ custom: {
269
+ type: "invalid",
270
+ message: result
271
+ }
272
+ },
273
+ [...path, formField.id]
274
+ );
275
+ return newFormValidity;
276
+ });
277
+ return;
278
+ }
279
+ setFormValidity((prev) => {
280
+ const newFormValidity = setValidityAtPath(
281
+ prev,
282
+ {
305
283
  custom: {
306
284
  type: "invalid",
307
- message: customError
285
+ message: (0, import_i18n.__)("Validation could not be processed.")
308
286
  }
309
- });
310
- return;
311
- }
312
- if (customError instanceof Promise) {
313
- const currentToken = (customValidationCounterRef.current[field.id] || 0) + 1;
314
- customValidationCounterRef.current[field.id] = currentToken;
315
- updateFieldValidity(setFormValidity, parentFieldId, field.id, {
287
+ },
288
+ [...path, formField.id]
289
+ );
290
+ return newFormValidity;
291
+ });
292
+ }).catch((error) => {
293
+ if (currentToken !== customCounterRef.current[formField.id]) {
294
+ return;
295
+ }
296
+ let errorMessage;
297
+ if (error instanceof Error) {
298
+ errorMessage = error.message;
299
+ } else {
300
+ errorMessage = String(error) || (0, import_i18n.__)(
301
+ "Unknown error when running custom validation asynchronously."
302
+ );
303
+ }
304
+ setFormValidity((prev) => {
305
+ const newFormValidity = setValidityAtPath(
306
+ prev,
307
+ {
316
308
  custom: {
317
- type: "validating",
318
- message: "Validating..."
319
- }
320
- });
321
- customError.then((result) => {
322
- if (customValidationCounterRef.current[field.id] !== currentToken) {
323
- return;
324
- }
325
- if (result === null) {
326
- updateFieldValidity(
327
- setFormValidity,
328
- parentFieldId,
329
- field.id,
330
- {
331
- custom: {
332
- type: "valid",
333
- message: "Valid"
334
- }
335
- }
336
- );
337
- return;
338
- }
339
- if (typeof result === "string") {
340
- updateFieldValidity(
341
- setFormValidity,
342
- parentFieldId,
343
- field.id,
344
- {
345
- custom: {
346
- type: "invalid",
347
- message: result
348
- }
349
- }
350
- );
351
- }
352
- }).catch((error) => {
353
- if (customValidationCounterRef.current[field.id] !== currentToken) {
354
- return;
309
+ type: "invalid",
310
+ message: errorMessage
355
311
  }
356
- updateFieldValidity(
357
- setFormValidity,
358
- parentFieldId,
359
- field.id,
360
- {
361
- custom: {
362
- type: "invalid",
363
- message: error.message
364
- }
365
- }
366
- );
367
- });
368
- return;
369
- }
370
- setFormValidity((prev) => {
371
- if (!prev) {
372
- return prev;
312
+ },
313
+ [...path, formField.id]
314
+ );
315
+ return newFormValidity;
316
+ });
317
+ });
318
+ }
319
+ function validateFormField(item, formField, promiseHandler) {
320
+ if (!!formField.field && formField.field.isValid.required && isInvalidForRequired(
321
+ formField.field.type,
322
+ formField.field.getValue({ item })
323
+ )) {
324
+ return {
325
+ required: { type: "invalid" }
326
+ };
327
+ }
328
+ if (!!formField.field && formField.field.isValid.elements && formField.field.hasElements && !formField.field.getElements && Array.isArray(formField.field.elements)) {
329
+ const value = formField.field.getValue({ item });
330
+ const validValues = formField.field.elements.map((el) => el.value);
331
+ if (formField.field.type !== "array" && !validValues.includes(value)) {
332
+ return {
333
+ elements: {
334
+ type: "invalid",
335
+ message: (0, import_i18n.__)("Value must be one of the elements.")
373
336
  }
374
- if (parentFieldId) {
375
- const parentField = prev[parentFieldId];
376
- if (!parentField?.children) {
377
- return prev;
378
- }
379
- const { [field.id]: removed2, ...restChildren } = parentField.children;
380
- if (Object.keys(restChildren).length === 0) {
381
- const { children, ...restParent } = parentField;
382
- if (Object.keys(restParent).length === 0) {
383
- const {
384
- [parentFieldId]: removedParent,
385
- ...restFields
386
- } = prev;
387
- return Object.keys(restFields).length === 0 ? void 0 : restFields;
388
- }
389
- return {
390
- ...prev,
391
- [parentFieldId]: restParent
392
- };
393
- }
394
- return {
395
- ...prev,
396
- [parentFieldId]: {
397
- ...parentField,
398
- children: restChildren
399
- }
400
- };
337
+ };
338
+ }
339
+ if (formField.field.type === "array" && !Array.isArray(value)) {
340
+ return {
341
+ elements: {
342
+ type: "invalid",
343
+ message: (0, import_i18n.__)("Value must be an array.")
401
344
  }
402
- if (!prev[field.id]) {
403
- return prev;
345
+ };
346
+ }
347
+ if (formField.field.type === "array" && value.some((v) => !validValues.includes(v))) {
348
+ return {
349
+ elements: {
350
+ type: "invalid",
351
+ message: (0, import_i18n.__)("Value must be one of the elements.")
404
352
  }
405
- const { [field.id]: removed, ...rest } = prev;
406
- if (Object.keys(rest).length === 0) {
407
- return void 0;
353
+ };
354
+ }
355
+ }
356
+ if (!!formField.field && formField.field.isValid.elements && formField.field.hasElements && typeof formField.field.getElements === "function") {
357
+ handleElementsValidationAsync(
358
+ formField.field.getElements(),
359
+ formField,
360
+ promiseHandler
361
+ );
362
+ return {
363
+ elements: {
364
+ type: "validating",
365
+ message: (0, import_i18n.__)("Validating\u2026")
366
+ }
367
+ };
368
+ }
369
+ let customError;
370
+ if (!!formField.field) {
371
+ try {
372
+ const value = formField.field.getValue({ item });
373
+ customError = formField.field.isValid?.custom?.(
374
+ (0, import_deepmerge.default)(
375
+ item,
376
+ formField.field.setValue({
377
+ item,
378
+ value
379
+ })
380
+ ),
381
+ formField.field
382
+ );
383
+ } catch (error) {
384
+ let errorMessage;
385
+ if (error instanceof Error) {
386
+ errorMessage = error.message;
387
+ } else {
388
+ errorMessage = String(error) || (0, import_i18n.__)("Unknown error when running custom validation.");
389
+ }
390
+ return {
391
+ custom: {
392
+ type: "invalid",
393
+ message: errorMessage
394
+ }
395
+ };
396
+ }
397
+ }
398
+ if (typeof customError === "string") {
399
+ return {
400
+ custom: {
401
+ type: "invalid",
402
+ message: customError
403
+ }
404
+ };
405
+ }
406
+ if (customError instanceof Promise) {
407
+ handleCustomValidationAsync(customError, formField, promiseHandler);
408
+ return {
409
+ custom: {
410
+ type: "validating",
411
+ message: (0, import_i18n.__)("Validating\u2026")
412
+ }
413
+ };
414
+ }
415
+ if (formField.children.length > 0) {
416
+ const result = {};
417
+ formField.children.forEach((child) => {
418
+ result[child.id] = validateFormField(item, child, {
419
+ ...promiseHandler,
420
+ path: [...promiseHandler.path, formField.id, "children"]
421
+ });
422
+ });
423
+ const filteredResult = {};
424
+ Object.entries(result).forEach(([key, value]) => {
425
+ if (value !== void 0) {
426
+ filteredResult[key] = value;
427
+ }
428
+ });
429
+ if (Object.keys(filteredResult).length === 0) {
430
+ return void 0;
431
+ }
432
+ return {
433
+ children: filteredResult
434
+ };
435
+ }
436
+ return void 0;
437
+ }
438
+ function getFormFieldValue(formField, item) {
439
+ const fieldValue = formField?.field?.getValue({ item });
440
+ if (formField.children.length === 0) {
441
+ return fieldValue;
442
+ }
443
+ const childrenValues = formField.children.map(
444
+ (child) => getFormFieldValue(child, item)
445
+ );
446
+ if (!childrenValues) {
447
+ return fieldValue;
448
+ }
449
+ return {
450
+ value: fieldValue,
451
+ children: childrenValues
452
+ };
453
+ }
454
+ function useFormValidity(item, fields, form) {
455
+ const [formValidity, setFormValidity] = (0, import_element.useState)();
456
+ const customCounterRef = (0, import_element.useRef)({});
457
+ const elementsCounterRef = (0, import_element.useRef)({});
458
+ const previousValuesRef = (0, import_element.useRef)({});
459
+ const validate = (0, import_element.useCallback)(() => {
460
+ const promiseHandler = {
461
+ customCounterRef,
462
+ elementsCounterRef,
463
+ setFormValidity,
464
+ path: [],
465
+ item
466
+ };
467
+ const formFieldsToValidate = getFormFieldsToValidate(form, fields);
468
+ if (formFieldsToValidate.length === 0) {
469
+ setFormValidity(void 0);
470
+ return;
471
+ }
472
+ const newFormValidity = {};
473
+ const untouchedFields = [];
474
+ formFieldsToValidate.forEach((formField) => {
475
+ const value = getFormFieldValue(formField, item);
476
+ if (previousValuesRef.current.hasOwnProperty(formField.id) && (0, import_es6.default)(
477
+ previousValuesRef.current[formField.id],
478
+ value
479
+ )) {
480
+ untouchedFields.push(formField.id);
481
+ return;
482
+ }
483
+ previousValuesRef.current[formField.id] = value;
484
+ const fieldValidity = validateFormField(
485
+ item,
486
+ formField,
487
+ promiseHandler
488
+ );
489
+ if (fieldValidity !== void 0) {
490
+ newFormValidity[formField.id] = fieldValidity;
491
+ }
492
+ });
493
+ setFormValidity((existingFormValidity) => {
494
+ let validity = {
495
+ ...existingFormValidity,
496
+ ...newFormValidity
497
+ };
498
+ const fieldsToKeep = [
499
+ ...untouchedFields,
500
+ ...Object.keys(newFormValidity)
501
+ ];
502
+ Object.keys(validity).forEach((key) => {
503
+ if (validity && !fieldsToKeep.includes(key)) {
504
+ delete validity[key];
408
505
  }
409
- return rest;
410
506
  });
507
+ if (Object.keys(validity).length === 0) {
508
+ validity = void 0;
509
+ }
510
+ const areEqual = (0, import_es6.default)(existingFormValidity, validity);
511
+ if (areEqual) {
512
+ return existingFormValidity;
513
+ }
514
+ return validity;
411
515
  });
412
516
  }, [item, fields, form]);
413
517
  (0, import_element.useEffect)(() => {