@wordpress/dataviews 10.1.5 → 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 (531) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +109 -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 +6 -5
  78. package/build/dataform-controls/password.js.map +3 -3
  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 +91 -42
  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} +48 -24
  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 +4 -2
  134. package/build/dataviews-layouts/list/index.js.map +1 -1
  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 +36 -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 +9 -6
  290. package/build-module/dataform-controls/password.js.map +2 -2
  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 +95 -42
  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} +43 -19
  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 +3 -2
  346. package/build-module/dataviews-layouts/list/index.js.map +1 -1
  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 +36 -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 +41 -51
  418. package/build-style/style.css +41 -51
  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-controls/password.d.ts.map +1 -1
  430. package/build-types/dataform-layouts/card/index.d.ts +3 -3
  431. package/build-types/dataform-layouts/card/index.d.ts.map +1 -1
  432. package/build-types/dataform-layouts/data-form-layout.d.ts +4 -4
  433. package/build-types/dataform-layouts/data-form-layout.d.ts.map +1 -1
  434. package/build-types/dataform-layouts/details/index.d.ts +6 -0
  435. package/build-types/dataform-layouts/details/index.d.ts.map +1 -0
  436. package/build-types/dataform-layouts/get-summary-fields.d.ts.map +1 -1
  437. package/build-types/dataform-layouts/index.d.ts +7 -2
  438. package/build-types/dataform-layouts/index.d.ts.map +1 -1
  439. package/build-types/dataform-layouts/normalize-form.d.ts +8 -0
  440. package/build-types/dataform-layouts/normalize-form.d.ts.map +1 -0
  441. package/build-types/dataform-layouts/panel/dropdown.d.ts +2 -2
  442. package/build-types/dataform-layouts/panel/dropdown.d.ts.map +1 -1
  443. package/build-types/dataform-layouts/panel/index.d.ts.map +1 -1
  444. package/build-types/dataform-layouts/panel/modal.d.ts +2 -2
  445. package/build-types/dataform-layouts/panel/modal.d.ts.map +1 -1
  446. package/build-types/dataform-layouts/regular/index.d.ts.map +1 -1
  447. package/build-types/dataform-layouts/row/index.d.ts.map +1 -1
  448. package/build-types/dataviews-layouts/index.d.ts +8 -0
  449. package/build-types/dataviews-layouts/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 +13 -11
  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.story.d.ts +7 -1
  466. package/build-types/stories/dataviews.story.d.ts.map +1 -1
  467. package/build-types/test/normalize-form.d.ts +2 -0
  468. package/build-types/test/normalize-form.d.ts.map +1 -0
  469. package/build-types/types/dataform.d.ts +27 -9
  470. package/build-types/types/dataform.d.ts.map +1 -1
  471. package/build-types/types/dataviews.d.ts +23 -2
  472. package/build-types/types/dataviews.d.ts.map +1 -1
  473. package/build-wp/index.js +2258 -1817
  474. package/package.json +15 -15
  475. package/src/components/dataform/index.tsx +3 -1
  476. package/src/components/dataviews/style.scss +1 -1
  477. package/src/components/dataviews-bulk-actions/style.scss +1 -1
  478. package/src/components/dataviews-filters/filter.tsx +16 -1
  479. package/src/components/dataviews-filters/style.scss +1 -1
  480. package/src/components/dataviews-item-actions/index.tsx +37 -14
  481. package/src/components/dataviews-pagination/style.scss +2 -2
  482. package/src/components/dataviews-view-config/index.tsx +8 -504
  483. package/src/components/dataviews-view-config/properties-section.tsx +201 -0
  484. package/src/components/dataviews-view-config/style.scss +2 -39
  485. package/src/constants.ts +1 -0
  486. package/src/dataform-controls/datetime.tsx +3 -10
  487. package/src/dataform-controls/password.tsx +16 -12
  488. package/src/dataform-layouts/card/index.tsx +89 -33
  489. package/src/dataform-layouts/data-form-layout.tsx +12 -23
  490. package/src/dataform-layouts/details/index.tsx +71 -0
  491. package/src/dataform-layouts/details/style.scss +5 -0
  492. package/src/dataform-layouts/index.tsx +10 -3
  493. package/src/dataform-layouts/{normalize-form-fields.ts → normalize-form.ts} +50 -23
  494. package/src/dataform-layouts/panel/dropdown.tsx +10 -13
  495. package/src/dataform-layouts/panel/index.tsx +9 -24
  496. package/src/dataform-layouts/panel/modal.tsx +15 -15
  497. package/src/dataform-layouts/regular/index.tsx +7 -12
  498. package/src/dataform-layouts/row/index.tsx +13 -26
  499. package/src/dataviews-layouts/index.ts +10 -0
  500. package/src/dataviews-layouts/picker-table/index.tsx +487 -0
  501. package/src/dataviews-layouts/picker-table/style.scss +45 -0
  502. package/src/dataviews-layouts/table/column-header-menu.tsx +3 -2
  503. package/src/dataviews-layouts/table/column-primary.tsx +4 -7
  504. package/src/dataviews-layouts/table/index.tsx +37 -2
  505. package/src/dataviews-layouts/table/style.scss +2 -2
  506. package/src/field-types/datetime.tsx +16 -5
  507. package/src/field-types/utils/parse-date-time.ts +17 -0
  508. package/src/hooks/use-form-validity.ts +572 -422
  509. package/src/stories/dataform.story.tsx +604 -456
  510. package/src/stories/dataviews-picker.story.tsx +166 -38
  511. package/src/stories/dataviews.story.tsx +10 -2
  512. package/src/stories/field-types.story.tsx +7 -7
  513. package/src/style.scss +2 -0
  514. package/src/test/normalize-form.ts +568 -0
  515. package/src/test/use-form-validity.ts +318 -33
  516. package/src/types/dataform.ts +36 -11
  517. package/src/types/dataviews.ts +36 -2
  518. package/tsconfig.tsbuildinfo +1 -1
  519. package/build/dataform-layouts/is-combined-field.js.map +0 -7
  520. package/build/dataform-layouts/normalize-form-fields.js.map +0 -7
  521. package/build-module/dataform-layouts/is-combined-field.js +0 -7
  522. package/build-module/dataform-layouts/is-combined-field.js.map +0 -7
  523. package/build-module/dataform-layouts/normalize-form-fields.js.map +0 -7
  524. package/build-types/dataform-layouts/is-combined-field.d.ts +0 -6
  525. package/build-types/dataform-layouts/is-combined-field.d.ts.map +0 -1
  526. package/build-types/dataform-layouts/normalize-form-fields.d.ts +0 -19
  527. package/build-types/dataform-layouts/normalize-form-fields.d.ts.map +0 -1
  528. package/build-types/test/normalize-form-fields.d.ts +0 -2
  529. package/build-types/test/normalize-form-fields.d.ts.map +0 -1
  530. package/src/dataform-layouts/is-combined-field.ts +0 -10
  531. package/src/test/normalize-form-fields.ts +0 -317
@@ -1,8 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import type { ChangeEvent, ReactNode } from 'react';
5
- import clsx from 'clsx';
4
+ import type { ChangeEvent } from 'react';
6
5
 
7
6
  /**
8
7
  * WordPress dependencies
@@ -15,28 +14,16 @@ import {
15
14
  __experimentalToggleGroupControlOption as ToggleGroupControlOption,
16
15
  __experimentalToggleGroupControlOptionIcon as ToggleGroupControlOptionIcon,
17
16
  SelectControl,
18
- __experimentalItemGroup as ItemGroup,
19
- __experimentalItem as Item,
20
17
  __experimentalGrid as Grid,
21
18
  __experimentalVStack as VStack,
22
19
  __experimentalHStack as HStack,
23
20
  __experimentalHeading as Heading,
24
21
  __experimentalText as Text,
25
22
  privateApis as componentsPrivateApis,
26
- BaseControl,
27
- Icon,
28
23
  } from '@wordpress/components';
29
- import { __, _x, sprintf } from '@wordpress/i18n';
30
- import { memo, useContext, useMemo, useState } from '@wordpress/element';
31
- import {
32
- chevronDown,
33
- chevronUp,
34
- cog,
35
- seen,
36
- unseen,
37
- lock,
38
- moreVertical,
39
- } from '@wordpress/icons';
24
+ import { __, _x } from '@wordpress/i18n';
25
+ import { memo, useContext, useMemo } from '@wordpress/element';
26
+ import { cog } from '@wordpress/icons';
40
27
  import warning from '@wordpress/warning';
41
28
  import { useInstanceId } from '@wordpress/compose';
42
29
 
@@ -45,9 +32,10 @@ import { useInstanceId } from '@wordpress/compose';
45
32
  */
46
33
  import { SORTING_DIRECTIONS, sortIcons, sortLabels } from '../../constants';
47
34
  import { VIEW_LAYOUTS } from '../../dataviews-layouts';
48
- import type { NormalizedField, View } from '../../types';
35
+ import type { View } from '../../types';
49
36
  import DataViewsContext from '../dataviews-context';
50
37
  import InfiniteScrollToggle from './infinite-scroll-toggle';
38
+ import { PropertiesSection } from './properties-section';
51
39
  import { unlock } from '../../lock-unlock';
52
40
 
53
41
  const { Menu } = unlock( componentsPrivateApis );
@@ -100,6 +88,7 @@ export function ViewTypeMenu() {
100
88
  case 'grid':
101
89
  case 'table':
102
90
  case 'pickerGrid':
91
+ case 'pickerTable':
103
92
  const viewWithoutLayout = { ...view };
104
93
  if ( 'layout' in viewWithoutLayout ) {
105
94
  delete viewWithoutLayout.layout;
@@ -261,489 +250,6 @@ function ItemsPerPageControl() {
261
250
  );
262
251
  }
263
252
 
264
- function PreviewOptions( {
265
- previewOptions,
266
- onChangePreviewOption,
267
- onMenuOpenChange,
268
- activeOption,
269
- }: {
270
- previewOptions?: Array< { label: string; id: string } >;
271
- onChangePreviewOption?: ( newPreviewOption: string ) => void;
272
- onMenuOpenChange: ( isOpen: boolean ) => void;
273
- activeOption?: string;
274
- } ) {
275
- const focusPreviewOptionsField = ( id: string ) => {
276
- // Focus the visibility button to avoid focus loss.
277
- // Our code is safe against the component being unmounted, so we don't need to worry about cleaning the timeout.
278
- // eslint-disable-next-line @wordpress/react-no-unsafe-timeout
279
- setTimeout( () => {
280
- const element = document.querySelector(
281
- `.dataviews-field-control__field-${ id } .dataviews-field-control__field-preview-options-button`
282
- );
283
- if ( element instanceof HTMLElement ) {
284
- element.focus();
285
- }
286
- }, 50 );
287
- };
288
- return (
289
- <Menu onOpenChange={ onMenuOpenChange }>
290
- <Menu.TriggerButton
291
- render={
292
- <Button
293
- className="dataviews-field-control__field-preview-options-button"
294
- size="compact"
295
- icon={ moreVertical }
296
- label={ __( 'Preview' ) }
297
- />
298
- }
299
- />
300
- <Menu.Popover>
301
- { previewOptions?.map( ( { id, label } ) => {
302
- return (
303
- <Menu.RadioItem
304
- key={ id }
305
- value={ id }
306
- checked={ id === activeOption }
307
- onChange={ () => {
308
- onChangePreviewOption?.( id );
309
- focusPreviewOptionsField( id );
310
- } }
311
- >
312
- <Menu.ItemLabel>{ label }</Menu.ItemLabel>
313
- </Menu.RadioItem>
314
- );
315
- } ) }
316
- </Menu.Popover>
317
- </Menu>
318
- );
319
- }
320
- function FieldItem( {
321
- field,
322
- label,
323
- description,
324
- isVisible,
325
- isFirst,
326
- isLast,
327
- canMove = true,
328
- onToggleVisibility,
329
- onMoveUp,
330
- onMoveDown,
331
- previewOptions,
332
- onChangePreviewOption,
333
- }: {
334
- field: NormalizedField< any >;
335
- label?: string;
336
- description?: string;
337
- isVisible: boolean;
338
- isFirst?: boolean;
339
- isLast?: boolean;
340
- canMove?: boolean;
341
- onToggleVisibility?: () => void;
342
- onMoveUp?: () => void;
343
- onMoveDown?: () => void;
344
- previewOptions?: Array< { label: string; id: string } >;
345
- onChangePreviewOption?: ( newPreviewOption: string ) => void;
346
- } ) {
347
- const [ isChangingPreviewOption, setIsChangingPreviewOption ] =
348
- useState< boolean >( false );
349
-
350
- const focusVisibilityField = () => {
351
- // Focus the visibility button to avoid focus loss.
352
- // Our code is safe against the component being unmounted, so we don't need to worry about cleaning the timeout.
353
- // eslint-disable-next-line @wordpress/react-no-unsafe-timeout
354
- setTimeout( () => {
355
- const element = document.querySelector(
356
- `.dataviews-field-control__field-${ field.id } .dataviews-field-control__field-visibility-button`
357
- );
358
- if ( element instanceof HTMLElement ) {
359
- element.focus();
360
- }
361
- }, 50 );
362
- };
363
-
364
- return (
365
- <Item>
366
- <HStack
367
- expanded
368
- className={ clsx(
369
- 'dataviews-field-control__field',
370
- `dataviews-field-control__field-${ field.id }`,
371
- // The actions are hidden when the mouse is not hovering the item, or focus
372
- // is outside the item.
373
- // For actions that require a popover, a menu etc, that would mean that when the interactive element
374
- // opens and the focus goes there the actions would be hidden.
375
- // To avoid that we add a class to the item, that makes sure actions are visible while there is some
376
- // interaction with the item.
377
- { 'is-interacting': isChangingPreviewOption }
378
- ) }
379
- justify="flex-start"
380
- >
381
- <span className="dataviews-field-control__icon">
382
- { ! canMove && ! field.enableHiding && (
383
- <Icon icon={ lock } />
384
- ) }
385
- </span>
386
- <span className="dataviews-field-control__label-sub-label-container">
387
- <span className="dataviews-field-control__label">
388
- { label || field.label }
389
- </span>
390
- { description && (
391
- <span className="dataviews-field-control__sub-label">
392
- { description }
393
- </span>
394
- ) }
395
- </span>
396
- <HStack
397
- justify="flex-end"
398
- expanded={ false }
399
- className="dataviews-field-control__actions"
400
- >
401
- { isVisible && (
402
- <>
403
- <Button
404
- disabled={ isFirst || ! canMove }
405
- accessibleWhenDisabled
406
- size="compact"
407
- onClick={ onMoveUp }
408
- icon={ chevronUp }
409
- label={
410
- isFirst || ! canMove
411
- ? __( "This field can't be moved up" )
412
- : sprintf(
413
- /* translators: %s: field label */
414
- __( 'Move %s up' ),
415
- field.label
416
- )
417
- }
418
- />
419
- <Button
420
- disabled={ isLast || ! canMove }
421
- accessibleWhenDisabled
422
- size="compact"
423
- onClick={ onMoveDown }
424
- icon={ chevronDown }
425
- label={
426
- isLast || ! canMove
427
- ? __( "This field can't be moved down" )
428
- : sprintf(
429
- /* translators: %s: field label */
430
- __( 'Move %s down' ),
431
- field.label
432
- )
433
- }
434
- />
435
- </>
436
- ) }
437
- { onToggleVisibility && (
438
- <Button
439
- className="dataviews-field-control__field-visibility-button"
440
- disabled={ ! field.enableHiding }
441
- accessibleWhenDisabled
442
- size="compact"
443
- onClick={ () => {
444
- onToggleVisibility();
445
- focusVisibilityField();
446
- } }
447
- icon={ isVisible ? unseen : seen }
448
- label={
449
- isVisible
450
- ? sprintf(
451
- /* translators: %s: field label */
452
- _x( 'Hide %s', 'field' ),
453
- field.label
454
- )
455
- : sprintf(
456
- /* translators: %s: field label */
457
- _x( 'Show %s', 'field' ),
458
- field.label
459
- )
460
- }
461
- />
462
- ) }
463
- { previewOptions && (
464
- <PreviewOptions
465
- previewOptions={ previewOptions }
466
- onChangePreviewOption={ onChangePreviewOption }
467
- onMenuOpenChange={ setIsChangingPreviewOption }
468
- activeOption={ field.id }
469
- />
470
- ) }
471
- </HStack>
472
- </HStack>
473
- </Item>
474
- );
475
- }
476
-
477
- function RegularFieldItem( {
478
- index,
479
- field,
480
- view,
481
- onChangeView,
482
- }: {
483
- index?: number;
484
- field: NormalizedField< any >;
485
- view: View;
486
- onChangeView: ( view: View ) => void;
487
- } ) {
488
- const visibleFieldIds = view.fields ?? [];
489
- const isVisible =
490
- index !== undefined && visibleFieldIds.includes( field.id );
491
-
492
- return (
493
- <FieldItem
494
- field={ field }
495
- isVisible={ isVisible }
496
- isFirst={ index !== undefined && index < 1 }
497
- isLast={
498
- index !== undefined && index === visibleFieldIds.length - 1
499
- }
500
- onToggleVisibility={ () => {
501
- onChangeView( {
502
- ...view,
503
- fields: isVisible
504
- ? visibleFieldIds.filter(
505
- ( fieldId ) => fieldId !== field.id
506
- )
507
- : [ ...visibleFieldIds, field.id ],
508
- } );
509
- } }
510
- onMoveUp={
511
- index !== undefined
512
- ? () => {
513
- onChangeView( {
514
- ...view,
515
- fields: [
516
- ...( visibleFieldIds.slice(
517
- 0,
518
- index - 1
519
- ) ?? [] ),
520
- field.id,
521
- visibleFieldIds[ index - 1 ],
522
- ...visibleFieldIds.slice( index + 1 ),
523
- ],
524
- } );
525
- }
526
- : undefined
527
- }
528
- onMoveDown={
529
- index !== undefined
530
- ? () => {
531
- onChangeView( {
532
- ...view,
533
- fields: [
534
- ...( visibleFieldIds.slice( 0, index ) ??
535
- [] ),
536
- visibleFieldIds[ index + 1 ],
537
- field.id,
538
- ...visibleFieldIds.slice( index + 2 ),
539
- ],
540
- } );
541
- }
542
- : undefined
543
- }
544
- />
545
- );
546
- }
547
-
548
- function isDefined< T >( item: T | undefined ): item is T {
549
- return !! item;
550
- }
551
-
552
- function FieldControl() {
553
- const { view, fields, onChangeView } = useContext( DataViewsContext );
554
-
555
- const togglableFields = [
556
- view?.titleField,
557
- view?.mediaField,
558
- view?.descriptionField,
559
- ].filter( Boolean );
560
- const visibleFieldIds = view.fields ?? [];
561
- const hiddenFields = fields.filter(
562
- ( f ) =>
563
- ! visibleFieldIds.includes( f.id ) &&
564
- ! togglableFields.includes( f.id ) &&
565
- f.type !== 'media' &&
566
- f.enableHiding !== false
567
- );
568
- let visibleFields = visibleFieldIds
569
- .map( ( fieldId ) => fields.find( ( f ) => f.id === fieldId ) )
570
- .filter( isDefined );
571
-
572
- if ( ! visibleFields?.length && ! hiddenFields?.length ) {
573
- return null;
574
- }
575
- const titleField = fields.find( ( f ) => f.id === view.titleField );
576
- const previewField = fields.find( ( f ) => f.id === view.mediaField );
577
- const descriptionField = fields.find(
578
- ( f ) => f.id === view.descriptionField
579
- );
580
-
581
- const previewFields = fields.filter( ( f ) => f.type === 'media' );
582
-
583
- let previewFieldUI;
584
- if ( previewFields.length > 1 ) {
585
- const isPreviewFieldVisible =
586
- isDefined( previewField ) && ( view.showMedia ?? true );
587
- previewFieldUI = isDefined( previewField ) && (
588
- <FieldItem
589
- key={ previewField.id }
590
- field={ previewField }
591
- label={ __( 'Preview' ) }
592
- description={ previewField.label }
593
- isVisible={ isPreviewFieldVisible }
594
- onToggleVisibility={ () => {
595
- onChangeView( {
596
- ...view,
597
- showMedia: ! isPreviewFieldVisible,
598
- } );
599
- } }
600
- canMove={ false }
601
- previewOptions={ previewFields.map( ( field ) => ( {
602
- label: field.label,
603
- id: field.id,
604
- } ) ) }
605
- onChangePreviewOption={ ( newPreviewId ) =>
606
- onChangeView( { ...view, mediaField: newPreviewId } )
607
- }
608
- />
609
- );
610
- }
611
- const lockedFields = [
612
- {
613
- field: titleField,
614
- isVisibleFlag: 'showTitle',
615
- },
616
- {
617
- field: previewField,
618
- isVisibleFlag: 'showMedia',
619
- ui: previewFieldUI,
620
- },
621
- {
622
- field: descriptionField,
623
- isVisibleFlag: 'showDescription',
624
- },
625
- ].filter( ( { field } ) => isDefined( field ) );
626
- let visibleLockedFields = lockedFields.filter(
627
- ( { field, isVisibleFlag } ) =>
628
- // @ts-expect-error
629
- isDefined( field ) && ( view[ isVisibleFlag ] ?? true )
630
- ) as Array< {
631
- field: NormalizedField< any >;
632
- isVisibleFlag: string;
633
- ui?: ReactNode;
634
- } >;
635
-
636
- // If only one locked field is visible, prevent it from being hidden.
637
- if ( visibleLockedFields.length === 1 ) {
638
- visibleLockedFields = visibleLockedFields.map( ( locked ) => ( {
639
- ...locked,
640
- field: { ...locked.field, enableHiding: false },
641
- } ) );
642
- }
643
-
644
- // If no locked fields are visible but there are visibleFields, lock the last visible field.
645
- if ( visibleLockedFields.length === 0 && visibleFields.length === 1 ) {
646
- visibleFields = [ { ...visibleFields[ 0 ], enableHiding: false } ];
647
- }
648
-
649
- const hiddenLockedFields = lockedFields.filter(
650
- ( { field, isVisibleFlag } ) =>
651
- // @ts-expect-error
652
- isDefined( field ) && ! ( view[ isVisibleFlag ] ?? true )
653
- ) as Array< {
654
- field: NormalizedField< any >;
655
- isVisibleFlag: string;
656
- ui?: ReactNode;
657
- } >;
658
-
659
- return (
660
- <VStack className="dataviews-field-control" spacing={ 6 }>
661
- <VStack className="dataviews-view-config__properties" spacing={ 0 }>
662
- { ( visibleLockedFields.length > 0 ||
663
- !! visibleFields?.length ) && (
664
- <ItemGroup isBordered isSeparated>
665
- { visibleLockedFields.map(
666
- ( { field, isVisibleFlag, ui } ) => {
667
- return (
668
- ui ?? (
669
- <FieldItem
670
- key={ field.id }
671
- field={ field }
672
- isVisible
673
- onToggleVisibility={ () => {
674
- onChangeView( {
675
- ...view,
676
- [ isVisibleFlag ]: false,
677
- } );
678
- } }
679
- canMove={ false }
680
- />
681
- )
682
- );
683
- }
684
- ) }
685
-
686
- { visibleFields.map( ( field, index ) => (
687
- <RegularFieldItem
688
- key={ field.id }
689
- field={ field }
690
- view={ view }
691
- onChangeView={ onChangeView }
692
- index={ index }
693
- />
694
- ) ) }
695
- </ItemGroup>
696
- ) }
697
- </VStack>
698
-
699
- { ( !! hiddenFields?.length || !! hiddenLockedFields.length ) && (
700
- <VStack spacing={ 4 }>
701
- <BaseControl.VisualLabel style={ { margin: 0 } }>
702
- { __( 'Hidden' ) }
703
- </BaseControl.VisualLabel>
704
- <VStack
705
- className="dataviews-view-config__properties"
706
- spacing={ 0 }
707
- >
708
- <ItemGroup isBordered isSeparated>
709
- { hiddenLockedFields.length > 0 &&
710
- hiddenLockedFields.map(
711
- ( { field, isVisibleFlag, ui } ) => {
712
- return (
713
- ui ?? (
714
- <FieldItem
715
- key={ field.id }
716
- field={ field }
717
- isVisible={ false }
718
- onToggleVisibility={ () => {
719
- onChangeView( {
720
- ...view,
721
- [ isVisibleFlag ]:
722
- true,
723
- } );
724
- } }
725
- canMove={ false }
726
- />
727
- )
728
- );
729
- }
730
- ) }
731
- { hiddenFields.map( ( field ) => (
732
- <RegularFieldItem
733
- key={ field.id }
734
- field={ field }
735
- view={ view }
736
- onChangeView={ onChangeView }
737
- />
738
- ) ) }
739
- </ItemGroup>
740
- </VStack>
741
- </VStack>
742
- ) }
743
- </VStack>
744
- );
745
- }
746
-
747
253
  function SettingsSection( {
748
254
  title,
749
255
  description,
@@ -826,9 +332,7 @@ export function DataviewsViewConfigDropdown() {
826
332
  ) }
827
333
  <InfiniteScrollToggle />
828
334
  <ItemsPerPageControl />
829
- </SettingsSection>
830
- <SettingsSection title={ __( 'Properties' ) }>
831
- <FieldControl />
335
+ <PropertiesSection />
832
336
  </SettingsSection>
833
337
  </VStack>
834
338
  </DropdownContentWrapper>