@wordpress/dataviews 4.22.0 → 5.0.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 (343) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +147 -32
  3. package/build/components/dataviews/index.js +71 -37
  4. package/build/components/dataviews/index.js.map +1 -1
  5. package/build/components/dataviews-context/index.js +15 -1
  6. package/build/components/dataviews-context/index.js.map +1 -1
  7. package/build/components/dataviews-filters/{filter-summary.js → filter.js} +108 -17
  8. package/build/components/dataviews-filters/filter.js.map +1 -0
  9. package/build/components/dataviews-filters/index.js +21 -20
  10. package/build/components/dataviews-filters/index.js.map +1 -1
  11. package/build/components/dataviews-filters/input-widget.js +76 -0
  12. package/build/components/dataviews-filters/input-widget.js.map +1 -0
  13. package/build/components/dataviews-filters/search-widget.js +33 -39
  14. package/build/components/dataviews-filters/search-widget.js.map +1 -1
  15. package/build/components/dataviews-filters/utils.js +25 -0
  16. package/build/components/dataviews-filters/utils.js.map +1 -0
  17. package/build/components/dataviews-item-actions/index.js +1 -1
  18. package/build/components/dataviews-item-actions/index.js.map +1 -1
  19. package/build/components/dataviews-layout/index.js +7 -2
  20. package/build/components/dataviews-layout/index.js.map +1 -1
  21. package/build/components/dataviews-pagination/index.js +4 -3
  22. package/build/components/dataviews-pagination/index.js.map +1 -1
  23. package/build/components/dataviews-selection-checkbox/index.js.map +1 -1
  24. package/build/components/dataviews-view-config/index.js +10 -19
  25. package/build/components/dataviews-view-config/index.js.map +1 -1
  26. package/build/constants.js +83 -2
  27. package/build/constants.js.map +1 -1
  28. package/build/dataform-controls/boolean.js +42 -0
  29. package/build/dataform-controls/boolean.js.map +1 -0
  30. package/build/dataform-controls/checkbox.js +44 -0
  31. package/build/dataform-controls/checkbox.js.map +1 -0
  32. package/build/dataform-controls/datetime.js +96 -2
  33. package/build/dataform-controls/datetime.js.map +1 -1
  34. package/build/dataform-controls/email.js +48 -0
  35. package/build/dataform-controls/email.js.map +1 -0
  36. package/build/dataform-controls/index.js +9 -1
  37. package/build/dataform-controls/index.js.map +1 -1
  38. package/build/dataform-controls/integer.js +49 -1
  39. package/build/dataform-controls/integer.js.map +1 -1
  40. package/build/dataform-controls/select.js +1 -0
  41. package/build/dataform-controls/select.js.map +1 -1
  42. package/build/dataform-controls/text.js +3 -1
  43. package/build/dataform-controls/text.js.map +1 -1
  44. package/build/dataform-controls/toggle-group.js +52 -0
  45. package/build/dataform-controls/toggle-group.js.map +1 -0
  46. package/build/dataforms-layouts/data-form-layout.js +1 -1
  47. package/build/dataforms-layouts/data-form-layout.js.map +1 -1
  48. package/build/dataforms-layouts/panel/index.js +14 -5
  49. package/build/dataforms-layouts/panel/index.js.map +1 -1
  50. package/build/dataforms-layouts/regular/index.js +23 -4
  51. package/build/dataforms-layouts/regular/index.js.map +1 -1
  52. package/build/dataviews-layouts/grid/index.js +89 -27
  53. package/build/dataviews-layouts/grid/index.js.map +1 -1
  54. package/build/dataviews-layouts/list/index.js +11 -6
  55. package/build/dataviews-layouts/list/index.js.map +1 -1
  56. package/build/dataviews-layouts/table/column-header-menu.js +9 -7
  57. package/build/dataviews-layouts/table/column-header-menu.js.map +1 -1
  58. package/build/dataviews-layouts/table/column-primary.js +18 -13
  59. package/build/dataviews-layouts/table/column-primary.js.map +1 -1
  60. package/build/dataviews-layouts/table/index.js +46 -14
  61. package/build/dataviews-layouts/table/index.js.map +1 -1
  62. package/build/dataviews-layouts/table/use-is-horizontal-scroll-end.js +65 -0
  63. package/build/dataviews-layouts/table/use-is-horizontal-scroll-end.js.map +1 -0
  64. package/build/dataviews-layouts/utils/item-click-wrapper.js +77 -0
  65. package/build/dataviews-layouts/utils/item-click-wrapper.js.map +1 -0
  66. package/build/field-types/array.js +62 -0
  67. package/build/field-types/array.js.map +1 -0
  68. package/build/field-types/boolean.js +71 -0
  69. package/build/field-types/boolean.js.map +1 -0
  70. package/build/field-types/date.js +57 -0
  71. package/build/field-types/date.js.map +1 -0
  72. package/build/field-types/datetime.js +19 -1
  73. package/build/field-types/datetime.js.map +1 -1
  74. package/build/field-types/email.js +60 -0
  75. package/build/field-types/email.js.map +1 -0
  76. package/build/field-types/index.js +42 -1
  77. package/build/field-types/index.js.map +1 -1
  78. package/build/field-types/integer.js +23 -1
  79. package/build/field-types/integer.js.map +1 -1
  80. package/build/field-types/media.js +31 -0
  81. package/build/field-types/media.js.map +1 -0
  82. package/build/field-types/text.js +23 -1
  83. package/build/field-types/text.js.map +1 -1
  84. package/build/filter-and-sort-data-view.js +174 -11
  85. package/build/filter-and-sort-data-view.js.map +1 -1
  86. package/build/normalize-fields.js +72 -11
  87. package/build/normalize-fields.js.map +1 -1
  88. package/build/types.js.map +1 -1
  89. package/build/utils.js +11 -19
  90. package/build/utils.js.map +1 -1
  91. package/build-module/components/dataviews/index.js +74 -40
  92. package/build-module/components/dataviews/index.js.map +1 -1
  93. package/build-module/components/dataviews-context/index.js +16 -2
  94. package/build-module/components/dataviews-context/index.js.map +1 -1
  95. package/build-module/components/dataviews-filters/filter.js +309 -0
  96. package/build-module/components/dataviews-filters/filter.js.map +1 -0
  97. package/build-module/components/dataviews-filters/index.js +22 -21
  98. package/build-module/components/dataviews-filters/index.js.map +1 -1
  99. package/build-module/components/dataviews-filters/input-widget.js +69 -0
  100. package/build-module/components/dataviews-filters/input-widget.js.map +1 -0
  101. package/build-module/components/dataviews-filters/search-widget.js +31 -37
  102. package/build-module/components/dataviews-filters/search-widget.js.map +1 -1
  103. package/build-module/components/dataviews-filters/utils.js +18 -0
  104. package/build-module/components/dataviews-filters/utils.js.map +1 -0
  105. package/build-module/components/dataviews-item-actions/index.js +1 -1
  106. package/build-module/components/dataviews-item-actions/index.js.map +1 -1
  107. package/build-module/components/dataviews-layout/index.js +7 -2
  108. package/build-module/components/dataviews-layout/index.js.map +1 -1
  109. package/build-module/components/dataviews-pagination/index.js +4 -4
  110. package/build-module/components/dataviews-pagination/index.js.map +1 -1
  111. package/build-module/components/dataviews-selection-checkbox/index.js.map +1 -1
  112. package/build-module/components/dataviews-view-config/index.js +9 -20
  113. package/build-module/components/dataviews-view-config/index.js.map +1 -1
  114. package/build-module/constants.js +82 -1
  115. package/build-module/constants.js.map +1 -1
  116. package/build-module/dataform-controls/boolean.js +35 -0
  117. package/build-module/dataform-controls/boolean.js.map +1 -0
  118. package/build-module/dataform-controls/checkbox.js +37 -0
  119. package/build-module/dataform-controls/checkbox.js.map +1 -0
  120. package/build-module/dataform-controls/datetime.js +98 -3
  121. package/build-module/dataform-controls/datetime.js.map +1 -1
  122. package/build-module/dataform-controls/email.js +41 -0
  123. package/build-module/dataform-controls/email.js.map +1 -0
  124. package/build-module/dataform-controls/index.js +9 -1
  125. package/build-module/dataform-controls/index.js.map +1 -1
  126. package/build-module/dataform-controls/integer.js +51 -3
  127. package/build-module/dataform-controls/integer.js.map +1 -1
  128. package/build-module/dataform-controls/select.js +1 -0
  129. package/build-module/dataform-controls/select.js.map +1 -1
  130. package/build-module/dataform-controls/text.js +3 -1
  131. package/build-module/dataform-controls/text.js.map +1 -1
  132. package/build-module/dataform-controls/toggle-group.js +45 -0
  133. package/build-module/dataform-controls/toggle-group.js.map +1 -0
  134. package/build-module/dataforms-layouts/data-form-layout.js +1 -1
  135. package/build-module/dataforms-layouts/data-form-layout.js.map +1 -1
  136. package/build-module/dataforms-layouts/panel/index.js +14 -5
  137. package/build-module/dataforms-layouts/panel/index.js.map +1 -1
  138. package/build-module/dataforms-layouts/regular/index.js +23 -4
  139. package/build-module/dataforms-layouts/regular/index.js.map +1 -1
  140. package/build-module/dataviews-layouts/grid/index.js +90 -29
  141. package/build-module/dataviews-layouts/grid/index.js.map +1 -1
  142. package/build-module/dataviews-layouts/list/index.js +11 -6
  143. package/build-module/dataviews-layouts/list/index.js.map +1 -1
  144. package/build-module/dataviews-layouts/table/column-header-menu.js +9 -7
  145. package/build-module/dataviews-layouts/table/column-header-menu.js.map +1 -1
  146. package/build-module/dataviews-layouts/table/column-primary.js +18 -12
  147. package/build-module/dataviews-layouts/table/column-primary.js.map +1 -1
  148. package/build-module/dataviews-layouts/table/index.js +47 -16
  149. package/build-module/dataviews-layouts/table/index.js.map +1 -1
  150. package/build-module/dataviews-layouts/table/use-is-horizontal-scroll-end.js +58 -0
  151. package/build-module/dataviews-layouts/table/use-is-horizontal-scroll-end.js.map +1 -0
  152. package/build-module/dataviews-layouts/utils/item-click-wrapper.js +71 -0
  153. package/build-module/dataviews-layouts/utils/item-click-wrapper.js.map +1 -0
  154. package/build-module/field-types/array.js +57 -0
  155. package/build-module/field-types/array.js.map +1 -0
  156. package/build-module/field-types/boolean.js +65 -0
  157. package/build-module/field-types/boolean.js.map +1 -0
  158. package/build-module/field-types/date.js +51 -0
  159. package/build-module/field-types/date.js.map +1 -0
  160. package/build-module/field-types/datetime.js +19 -1
  161. package/build-module/field-types/datetime.js.map +1 -1
  162. package/build-module/field-types/email.js +54 -0
  163. package/build-module/field-types/email.js.map +1 -0
  164. package/build-module/field-types/index.js +42 -1
  165. package/build-module/field-types/index.js.map +1 -1
  166. package/build-module/field-types/integer.js +23 -1
  167. package/build-module/field-types/integer.js.map +1 -1
  168. package/build-module/field-types/media.js +25 -0
  169. package/build-module/field-types/media.js.map +1 -0
  170. package/build-module/field-types/text.js +23 -1
  171. package/build-module/field-types/text.js.map +1 -1
  172. package/build-module/filter-and-sort-data-view.js +175 -12
  173. package/build-module/filter-and-sort-data-view.js.map +1 -1
  174. package/build-module/normalize-fields.js +72 -11
  175. package/build-module/normalize-fields.js.map +1 -1
  176. package/build-module/types.js.map +1 -1
  177. package/build-module/utils.js +10 -17
  178. package/build-module/utils.js.map +1 -1
  179. package/build-style/style-rtl.css +315 -13
  180. package/build-style/style.css +315 -13
  181. package/build-types/components/dataform/stories/index.story.d.ts.map +1 -1
  182. package/build-types/components/dataviews/index.d.ts +24 -3
  183. package/build-types/components/dataviews/index.d.ts.map +1 -1
  184. package/build-types/components/dataviews/stories/fixtures.d.ts +10 -1
  185. package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -1
  186. package/build-types/components/dataviews/stories/index.story.d.ts +23 -4
  187. package/build-types/components/dataviews/stories/index.story.d.ts.map +1 -1
  188. package/build-types/components/dataviews-context/index.d.ts +14 -1
  189. package/build-types/components/dataviews-context/index.d.ts.map +1 -1
  190. package/build-types/components/dataviews-filters/filter.d.ts +15 -0
  191. package/build-types/components/dataviews-filters/filter.d.ts.map +1 -0
  192. package/build-types/components/dataviews-filters/index.d.ts +3 -8
  193. package/build-types/components/dataviews-filters/index.d.ts.map +1 -1
  194. package/build-types/components/dataviews-filters/input-widget.d.ts +13 -0
  195. package/build-types/components/dataviews-filters/input-widget.d.ts.map +1 -0
  196. package/build-types/components/dataviews-filters/search-widget.d.ts +4 -5
  197. package/build-types/components/dataviews-filters/search-widget.d.ts.map +1 -1
  198. package/build-types/components/dataviews-filters/utils.d.ts +6 -0
  199. package/build-types/components/dataviews-filters/utils.d.ts.map +1 -0
  200. package/build-types/components/dataviews-layout/index.d.ts +5 -1
  201. package/build-types/components/dataviews-layout/index.d.ts.map +1 -1
  202. package/build-types/components/dataviews-pagination/index.d.ts +1 -1
  203. package/build-types/components/dataviews-pagination/index.d.ts.map +1 -1
  204. package/build-types/components/dataviews-selection-checkbox/index.d.ts +2 -2
  205. package/build-types/components/dataviews-selection-checkbox/index.d.ts.map +1 -1
  206. package/build-types/components/dataviews-view-config/index.d.ts +3 -4
  207. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
  208. package/build-types/components/stories/index.story.d.ts +63 -0
  209. package/build-types/components/stories/index.story.d.ts.map +1 -0
  210. package/build-types/constants.d.ts +20 -3
  211. package/build-types/constants.d.ts.map +1 -1
  212. package/build-types/dataform-controls/boolean.d.ts +6 -0
  213. package/build-types/dataform-controls/boolean.d.ts.map +1 -0
  214. package/build-types/dataform-controls/checkbox.d.ts +6 -0
  215. package/build-types/dataform-controls/checkbox.d.ts.map +1 -0
  216. package/build-types/dataform-controls/datetime.d.ts +1 -1
  217. package/build-types/dataform-controls/datetime.d.ts.map +1 -1
  218. package/build-types/dataform-controls/email.d.ts +6 -0
  219. package/build-types/dataform-controls/email.d.ts.map +1 -0
  220. package/build-types/dataform-controls/index.d.ts +1 -1
  221. package/build-types/dataform-controls/index.d.ts.map +1 -1
  222. package/build-types/dataform-controls/integer.d.ts +1 -4
  223. package/build-types/dataform-controls/integer.d.ts.map +1 -1
  224. package/build-types/dataform-controls/select.d.ts.map +1 -1
  225. package/build-types/dataform-controls/text.d.ts.map +1 -1
  226. package/build-types/dataform-controls/toggle-group.d.ts +6 -0
  227. package/build-types/dataform-controls/toggle-group.d.ts.map +1 -0
  228. package/build-types/dataforms-layouts/panel/index.d.ts.map +1 -1
  229. package/build-types/dataforms-layouts/regular/index.d.ts.map +1 -1
  230. package/build-types/dataviews-layouts/grid/index.d.ts +2 -1
  231. package/build-types/dataviews-layouts/grid/index.d.ts.map +1 -1
  232. package/build-types/dataviews-layouts/index.d.ts +3 -3
  233. package/build-types/dataviews-layouts/list/index.d.ts.map +1 -1
  234. package/build-types/dataviews-layouts/table/column-header-menu.d.ts.map +1 -1
  235. package/build-types/dataviews-layouts/table/column-primary.d.ts +8 -1
  236. package/build-types/dataviews-layouts/table/column-primary.d.ts.map +1 -1
  237. package/build-types/dataviews-layouts/table/index.d.ts +1 -1
  238. package/build-types/dataviews-layouts/table/index.d.ts.map +1 -1
  239. package/build-types/dataviews-layouts/table/use-is-horizontal-scroll-end.d.ts +19 -0
  240. package/build-types/dataviews-layouts/table/use-is-horizontal-scroll-end.d.ts.map +1 -0
  241. package/build-types/dataviews-layouts/utils/item-click-wrapper.d.ts +15 -0
  242. package/build-types/dataviews-layouts/utils/item-click-wrapper.d.ts.map +1 -0
  243. package/build-types/field-types/array.d.ts +7 -0
  244. package/build-types/field-types/array.d.ts.map +1 -0
  245. package/build-types/field-types/boolean.d.ts +19 -0
  246. package/build-types/field-types/boolean.d.ts.map +1 -0
  247. package/build-types/field-types/date.d.ts +16 -0
  248. package/build-types/field-types/date.d.ts.map +1 -0
  249. package/build-types/field-types/datetime.d.ts +7 -1
  250. package/build-types/field-types/datetime.d.ts.map +1 -1
  251. package/build-types/field-types/email.d.ts +19 -0
  252. package/build-types/field-types/email.d.ts.map +1 -0
  253. package/build-types/field-types/index.d.ts +2 -10
  254. package/build-types/field-types/index.d.ts.map +1 -1
  255. package/build-types/field-types/integer.d.ts +7 -1
  256. package/build-types/field-types/integer.d.ts.map +1 -1
  257. package/build-types/field-types/media.d.ts +16 -0
  258. package/build-types/field-types/media.d.ts.map +1 -0
  259. package/build-types/field-types/text.d.ts +7 -1
  260. package/build-types/field-types/text.d.ts.map +1 -1
  261. package/build-types/filter-and-sort-data-view.d.ts.map +1 -1
  262. package/build-types/normalize-fields.d.ts.map +1 -1
  263. package/build-types/types.d.ts +74 -8
  264. package/build-types/types.d.ts.map +1 -1
  265. package/build-types/utils.d.ts +5 -2
  266. package/build-types/utils.d.ts.map +1 -1
  267. package/build-wp/index.js +3299 -1182
  268. package/package.json +18 -12
  269. package/src/components/dataform/stories/index.story.tsx +41 -20
  270. package/src/components/dataviews/index.tsx +108 -43
  271. package/src/components/dataviews/stories/fixtures.tsx +135 -69
  272. package/src/components/dataviews/stories/index.story.tsx +265 -7
  273. package/src/components/dataviews/stories/style.css +24 -3
  274. package/src/components/dataviews/style.scss +27 -0
  275. package/src/components/dataviews-context/index.ts +30 -2
  276. package/src/components/dataviews-filters/filter.tsx +603 -0
  277. package/src/components/dataviews-filters/index.tsx +23 -29
  278. package/src/components/dataviews-filters/input-widget.tsx +91 -0
  279. package/src/components/dataviews-filters/search-widget.tsx +51 -48
  280. package/src/components/dataviews-filters/style.scss +117 -14
  281. package/src/components/dataviews-filters/utils.ts +25 -0
  282. package/src/components/dataviews-item-actions/index.tsx +1 -1
  283. package/src/components/dataviews-layout/index.tsx +8 -1
  284. package/src/components/dataviews-pagination/index.tsx +4 -4
  285. package/src/components/dataviews-selection-checkbox/index.tsx +2 -2
  286. package/src/components/dataviews-view-config/index.tsx +10 -18
  287. package/src/components/stories/index.story.tsx +372 -0
  288. package/src/constants.ts +116 -1
  289. package/src/dataform-controls/boolean.tsx +30 -0
  290. package/src/dataform-controls/checkbox.tsx +31 -0
  291. package/src/dataform-controls/datetime.tsx +106 -2
  292. package/src/dataform-controls/email.tsx +42 -0
  293. package/src/dataform-controls/index.tsx +8 -0
  294. package/src/dataform-controls/integer.tsx +75 -1
  295. package/src/dataform-controls/select.tsx +1 -0
  296. package/src/dataform-controls/style.scss +5 -0
  297. package/src/dataform-controls/text.tsx +2 -1
  298. package/src/dataform-controls/toggle-group.tsx +59 -0
  299. package/src/dataforms-layouts/data-form-layout.tsx +1 -1
  300. package/src/dataforms-layouts/panel/index.tsx +19 -7
  301. package/src/dataforms-layouts/panel/style.scss +8 -1
  302. package/src/dataforms-layouts/regular/index.tsx +50 -17
  303. package/src/dataforms-layouts/regular/style.scss +4 -1
  304. package/src/dataviews-layouts/grid/index.tsx +180 -68
  305. package/src/dataviews-layouts/grid/style.scss +8 -0
  306. package/src/dataviews-layouts/list/index.tsx +12 -5
  307. package/src/dataviews-layouts/table/column-header-menu.tsx +10 -8
  308. package/src/dataviews-layouts/table/column-primary.tsx +26 -13
  309. package/src/dataviews-layouts/table/index.tsx +74 -10
  310. package/src/dataviews-layouts/table/style.scss +37 -1
  311. package/src/dataviews-layouts/table/use-is-horizontal-scroll-end.ts +82 -0
  312. package/src/dataviews-layouts/utils/item-click-wrapper.tsx +93 -0
  313. package/src/field-types/array.tsx +75 -0
  314. package/src/field-types/boolean.tsx +66 -0
  315. package/src/field-types/date.ts +56 -0
  316. package/src/field-types/datetime.tsx +46 -2
  317. package/src/field-types/email.tsx +79 -0
  318. package/src/field-types/index.tsx +50 -3
  319. package/src/field-types/integer.tsx +53 -2
  320. package/src/field-types/media.tsx +28 -0
  321. package/src/field-types/text.tsx +41 -2
  322. package/src/filter-and-sort-data-view.ts +270 -10
  323. package/src/normalize-fields.ts +116 -13
  324. package/src/test/dataviews.tsx +20 -2
  325. package/src/test/filter-and-sort-data-view.js +601 -25
  326. package/src/test/normalize-fields.ts +155 -0
  327. package/src/types.ts +112 -9
  328. package/src/utils.ts +10 -33
  329. package/tsconfig.json +2 -0
  330. package/tsconfig.tsbuildinfo +1 -1
  331. package/build/components/dataviews-filters/filter-summary.js.map +0 -1
  332. package/build/dataviews-layouts/utils/get-clickable-item-props.js +0 -36
  333. package/build/dataviews-layouts/utils/get-clickable-item-props.js.map +0 -1
  334. package/build-module/components/dataviews-filters/filter-summary.js +0 -218
  335. package/build-module/components/dataviews-filters/filter-summary.js.map +0 -1
  336. package/build-module/dataviews-layouts/utils/get-clickable-item-props.js +0 -30
  337. package/build-module/dataviews-layouts/utils/get-clickable-item-props.js.map +0 -1
  338. package/build-types/components/dataviews-filters/filter-summary.d.ts +0 -14
  339. package/build-types/components/dataviews-filters/filter-summary.d.ts.map +0 -1
  340. package/build-types/dataviews-layouts/utils/get-clickable-item-props.d.ts +0 -19
  341. package/build-types/dataviews-layouts/utils/get-clickable-item-props.d.ts.map +0 -1
  342. package/src/components/dataviews-filters/filter-summary.tsx +0 -338
  343. package/src/dataviews-layouts/utils/get-clickable-item-props.ts +0 -39
@@ -45,26 +45,21 @@ import { useInstanceId } from '@wordpress/compose';
45
45
  */
46
46
  import { SORTING_DIRECTIONS, sortIcons, sortLabels } from '../../constants';
47
47
  import { VIEW_LAYOUTS } from '../../dataviews-layouts';
48
- import type { NormalizedField, SupportedLayouts, View } from '../../types';
48
+ import type { NormalizedField, View } from '../../types';
49
49
  import DataViewsContext from '../dataviews-context';
50
50
  import { unlock } from '../../lock-unlock';
51
51
 
52
52
  const { Menu } = unlock( componentsPrivateApis );
53
53
 
54
- interface ViewTypeMenuProps {
55
- defaultLayouts?: SupportedLayouts;
56
- }
57
-
58
54
  const DATAVIEWS_CONFIG_POPOVER_PROPS = {
59
55
  className: 'dataviews-config__popover',
60
56
  placement: 'bottom-end',
61
57
  offset: 9,
62
58
  };
63
59
 
64
- function ViewTypeMenu( {
65
- defaultLayouts = { list: {}, grid: {}, table: {} },
66
- }: ViewTypeMenuProps ) {
67
- const { view, onChangeView } = useContext( DataViewsContext );
60
+ export function ViewTypeMenu() {
61
+ const { view, onChangeView, defaultLayouts } =
62
+ useContext( DataViewsContext );
68
63
  const availableLayouts = Object.keys( defaultLayouts );
69
64
  if ( availableLayouts.length <= 1 ) {
70
65
  return null;
@@ -220,7 +215,8 @@ function SortDirectionControl() {
220
215
 
221
216
  const PAGE_SIZE_VALUES = [ 10, 20, 50, 100 ];
222
217
  function ItemsPerPageControl() {
223
- const { view, onChangeView } = useContext( DataViewsContext );
218
+ const { view, perPageSizes, onChangeView } = useContext( DataViewsContext );
219
+ const pageSizeValues = perPageSizes ?? PAGE_SIZE_VALUES;
224
220
  return (
225
221
  <ToggleGroupControl
226
222
  __nextHasNoMarginBottom
@@ -242,7 +238,7 @@ function ItemsPerPageControl() {
242
238
  } );
243
239
  } }
244
240
  >
245
- { PAGE_SIZE_VALUES.map( ( value ) => {
241
+ { pageSizeValues.map( ( value ) => {
246
242
  return (
247
243
  <ToggleGroupControlOption
248
244
  key={ value }
@@ -761,7 +757,7 @@ function SettingsSection( {
761
757
  );
762
758
  }
763
759
 
764
- function DataviewsViewConfigDropdown() {
760
+ export function DataviewsViewConfigDropdown() {
765
761
  const { view } = useContext( DataViewsContext );
766
762
  const popoverId = useInstanceId(
767
763
  _DataViewsViewConfig,
@@ -815,14 +811,10 @@ function DataviewsViewConfigDropdown() {
815
811
  );
816
812
  }
817
813
 
818
- function _DataViewsViewConfig( {
819
- defaultLayouts = { list: {}, grid: {}, table: {} },
820
- }: {
821
- defaultLayouts?: SupportedLayouts;
822
- } ) {
814
+ function _DataViewsViewConfig() {
823
815
  return (
824
816
  <>
825
- <ViewTypeMenu defaultLayouts={ defaultLayouts } />
817
+ <ViewTypeMenu />
826
818
  <DataviewsViewConfigDropdown />
827
819
  </>
828
820
  );
@@ -0,0 +1,372 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useState, useMemo } from '@wordpress/element';
5
+ import {
6
+ __experimentalHStack as HStack,
7
+ __experimentalVStack as VStack,
8
+ } from '@wordpress/components';
9
+
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+ import DataViews from '../dataviews/index';
14
+ import DataForm from '../dataform/index';
15
+ import {
16
+ actions,
17
+ data,
18
+ fields,
19
+ type SpaceObject,
20
+ } from '../dataviews/stories/fixtures';
21
+ import { filterSortAndPaginate } from '../../filter-and-sort-data-view';
22
+ import type { View, Form, Field } from '../../types';
23
+
24
+ const meta = {
25
+ title: 'DataViews/FieldTypes',
26
+ component: DataForm,
27
+ argTypes: {
28
+ type: {
29
+ control: { type: 'select' },
30
+ description:
31
+ 'Chooses the default layout of each field. "regular" is the default layout.',
32
+ options: [ 'default', 'regular', 'panel' ],
33
+ },
34
+ labelPosition: {
35
+ control: { type: 'select' },
36
+ description: 'Chooses the label position of the layout.',
37
+ options: [ 'default', 'top', 'side', 'none' ],
38
+ },
39
+ },
40
+ } as const;
41
+ export default meta;
42
+
43
+ const defaultLayouts = {
44
+ table: {},
45
+ grid: {},
46
+ list: {},
47
+ };
48
+
49
+ interface FieldTypeStoryProps {
50
+ fields: Field< SpaceObject >[];
51
+ titleField?: string;
52
+ descriptionField?: string;
53
+ mediaField?: string;
54
+ type?: 'default' | 'regular' | 'panel';
55
+ labelPosition?: 'default' | 'top' | 'side' | 'none';
56
+ }
57
+
58
+ const FieldTypeStory = ( {
59
+ fields: storyFields,
60
+ titleField,
61
+ descriptionField,
62
+ mediaField,
63
+ type = 'default',
64
+ labelPosition = 'default',
65
+ }: FieldTypeStoryProps ) => {
66
+ const form = useMemo(
67
+ () => ( {
68
+ type,
69
+ labelPosition,
70
+ fields: storyFields.map( ( field ) => field.id ),
71
+ } ),
72
+ [ type, labelPosition, storyFields ]
73
+ ) as Form;
74
+
75
+ const [ view, setView ] = useState< View >( {
76
+ type: 'table' as const,
77
+ search: '',
78
+ page: 1,
79
+ perPage: 10,
80
+ layout: {},
81
+ filters: [],
82
+ titleField,
83
+ descriptionField,
84
+ mediaField,
85
+ fields: storyFields
86
+ .filter(
87
+ ( field ) =>
88
+ ! [ titleField, descriptionField, mediaField ].includes(
89
+ field.id
90
+ )
91
+ )
92
+ .map( ( field ) => field.id ),
93
+ } );
94
+
95
+ const [ selectedIds, setSelectedIds ] = useState< number[] >( [] );
96
+ const [ modifiedData, setModifiedData ] = useState< SpaceObject[] >( data );
97
+
98
+ const { data: shownData, paginationInfo } = useMemo( () => {
99
+ return filterSortAndPaginate( modifiedData, view, storyFields );
100
+ }, [ modifiedData, view, storyFields ] );
101
+
102
+ const selectedItem =
103
+ ( selectedIds.length === 1 &&
104
+ shownData.find( ( item ) => item.id === selectedIds[ 0 ] ) ) ||
105
+ null;
106
+
107
+ return (
108
+ <HStack alignment="stretch">
109
+ <div style={ { flex: 2 } }>
110
+ <DataViews
111
+ getItemId={ ( item ) => item.id.toString() }
112
+ data={ shownData }
113
+ paginationInfo={ paginationInfo }
114
+ view={ view }
115
+ fields={ storyFields }
116
+ onChangeView={ setView }
117
+ actions={ actions }
118
+ defaultLayouts={ defaultLayouts }
119
+ selection={ selectedIds.map( ( id ) => id.toString() ) }
120
+ onChangeSelection={ ( newSelection ) =>
121
+ setSelectedIds(
122
+ newSelection.map( ( id ) => parseInt( id, 10 ) )
123
+ )
124
+ }
125
+ // eslint-disable-next-line no-alert
126
+ onClickItem={ ( item ) => alert( 'clicked ' + item.title ) }
127
+ />
128
+ </div>
129
+ { selectedItem ? (
130
+ <VStack alignment="top">
131
+ <DataForm
132
+ data={ selectedItem }
133
+ form={ form }
134
+ fields={ storyFields }
135
+ onChange={ ( updatedValues ) => {
136
+ const updatedItem = {
137
+ ...selectedItem,
138
+ ...updatedValues,
139
+ };
140
+
141
+ setModifiedData(
142
+ modifiedData.map( ( item ) =>
143
+ item.id === selectedItem.id
144
+ ? updatedItem
145
+ : item
146
+ )
147
+ );
148
+ } }
149
+ />
150
+ </VStack>
151
+ ) : (
152
+ <VStack alignment="center">
153
+ <span
154
+ style={ {
155
+ color: '#888',
156
+ } }
157
+ >
158
+ Please, select a single item.
159
+ </span>
160
+ </VStack>
161
+ ) }
162
+ </HStack>
163
+ );
164
+ };
165
+
166
+ export const All = ( {
167
+ type,
168
+ labelPosition,
169
+ }: {
170
+ type: 'default' | 'regular' | 'panel';
171
+ labelPosition: 'default' | 'top' | 'side' | 'none';
172
+ } ) => {
173
+ return (
174
+ <FieldTypeStory
175
+ fields={ fields }
176
+ titleField="title"
177
+ descriptionField="description"
178
+ mediaField="image"
179
+ type={ type }
180
+ labelPosition={ labelPosition }
181
+ />
182
+ );
183
+ };
184
+
185
+ export const Text = ( {
186
+ type,
187
+ labelPosition,
188
+ }: {
189
+ type: 'default' | 'regular' | 'panel';
190
+ labelPosition: 'default' | 'top' | 'side' | 'none';
191
+ } ) => {
192
+ const textFields = useMemo(
193
+ () => fields.filter( ( field ) => field.type === 'text' ),
194
+ []
195
+ );
196
+
197
+ return (
198
+ <FieldTypeStory
199
+ fields={ textFields }
200
+ type={ type }
201
+ labelPosition={ labelPosition }
202
+ />
203
+ );
204
+ };
205
+
206
+ export const Integer = ( {
207
+ type,
208
+ labelPosition,
209
+ }: {
210
+ type: 'default' | 'regular' | 'panel';
211
+ labelPosition: 'default' | 'top' | 'side' | 'none';
212
+ } ) => {
213
+ const integerFields = useMemo(
214
+ () => fields.filter( ( field ) => field.type === 'integer' ),
215
+ []
216
+ );
217
+
218
+ return (
219
+ <FieldTypeStory
220
+ fields={ integerFields }
221
+ type={ type }
222
+ labelPosition={ labelPosition }
223
+ />
224
+ );
225
+ };
226
+
227
+ export const Boolean = ( {
228
+ type,
229
+ labelPosition,
230
+ }: {
231
+ type: 'default' | 'regular' | 'panel';
232
+ labelPosition: 'default' | 'top' | 'side' | 'none';
233
+ } ) => {
234
+ const booleanFields = useMemo(
235
+ () => fields.filter( ( field ) => field.type === 'boolean' ),
236
+ []
237
+ );
238
+
239
+ return (
240
+ <FieldTypeStory
241
+ fields={ booleanFields }
242
+ type={ type }
243
+ labelPosition={ labelPosition }
244
+ />
245
+ );
246
+ };
247
+
248
+ export const DateTime = ( {
249
+ type,
250
+ labelPosition,
251
+ }: {
252
+ type: 'default' | 'regular' | 'panel';
253
+ labelPosition: 'default' | 'top' | 'side' | 'none';
254
+ } ) => {
255
+ const dateTimeFields = useMemo(
256
+ () => fields.filter( ( field ) => field.type === 'datetime' ),
257
+ []
258
+ );
259
+
260
+ return (
261
+ <FieldTypeStory
262
+ fields={ dateTimeFields }
263
+ type={ type }
264
+ labelPosition={ labelPosition }
265
+ />
266
+ );
267
+ };
268
+
269
+ export const Date = ( {
270
+ type,
271
+ labelPosition,
272
+ }: {
273
+ type: 'default' | 'regular' | 'panel';
274
+ labelPosition: 'default' | 'top' | 'side' | 'none';
275
+ } ) => {
276
+ const dateFields = useMemo(
277
+ () => fields.filter( ( field ) => field.type === 'date' ),
278
+ []
279
+ );
280
+
281
+ return (
282
+ <FieldTypeStory
283
+ fields={ dateFields }
284
+ type={ type }
285
+ labelPosition={ labelPosition }
286
+ />
287
+ );
288
+ };
289
+
290
+ export const Email = ( {
291
+ type,
292
+ labelPosition,
293
+ }: {
294
+ type: 'default' | 'regular' | 'panel';
295
+ labelPosition: 'default' | 'top' | 'side' | 'none';
296
+ } ) => {
297
+ const emailFields = useMemo(
298
+ () => fields.filter( ( field ) => field.type === 'email' ),
299
+ []
300
+ );
301
+
302
+ return (
303
+ <FieldTypeStory
304
+ fields={ emailFields }
305
+ type={ type }
306
+ labelPosition={ labelPosition }
307
+ />
308
+ );
309
+ };
310
+
311
+ export const Media = ( {
312
+ type,
313
+ labelPosition,
314
+ }: {
315
+ type: 'default' | 'regular' | 'panel';
316
+ labelPosition: 'default' | 'top' | 'side' | 'none';
317
+ } ) => {
318
+ const mediaFields = useMemo(
319
+ () => fields.filter( ( field ) => field.type === 'media' ),
320
+ []
321
+ );
322
+
323
+ return (
324
+ <FieldTypeStory
325
+ fields={ mediaFields }
326
+ type={ type }
327
+ labelPosition={ labelPosition }
328
+ />
329
+ );
330
+ };
331
+
332
+ export const Array = ( {
333
+ type,
334
+ labelPosition,
335
+ }: {
336
+ type: 'default' | 'regular' | 'panel';
337
+ labelPosition: 'default' | 'top' | 'side' | 'none';
338
+ } ) => {
339
+ const arrayTextFields = useMemo(
340
+ () => fields.filter( ( field ) => field.type === 'array' ),
341
+ []
342
+ );
343
+
344
+ return (
345
+ <FieldTypeStory
346
+ fields={ arrayTextFields }
347
+ type={ type }
348
+ labelPosition={ labelPosition }
349
+ />
350
+ );
351
+ };
352
+
353
+ export const NoType = ( {
354
+ type,
355
+ labelPosition,
356
+ }: {
357
+ type: 'default' | 'regular' | 'panel';
358
+ labelPosition: 'default' | 'top' | 'side' | 'none';
359
+ } ) => {
360
+ const noTypeFields = useMemo(
361
+ () => fields.filter( ( field ) => field.type === undefined ),
362
+ []
363
+ );
364
+
365
+ return (
366
+ <FieldTypeStory
367
+ fields={ noTypeFields }
368
+ type={ type }
369
+ labelPosition={ labelPosition }
370
+ />
371
+ );
372
+ };
package/src/constants.ts CHANGED
@@ -16,15 +16,66 @@ export const OPERATOR_IS_ANY = 'isAny';
16
16
  export const OPERATOR_IS_NONE = 'isNone';
17
17
  export const OPERATOR_IS_ALL = 'isAll';
18
18
  export const OPERATOR_IS_NOT_ALL = 'isNotAll';
19
+ export const OPERATOR_LESS_THAN = 'lessThan';
20
+ export const OPERATOR_GREATER_THAN = 'greaterThan';
21
+ export const OPERATOR_LESS_THAN_OR_EQUAL = 'lessThanOrEqual';
22
+ export const OPERATOR_GREATER_THAN_OR_EQUAL = 'greaterThanOrEqual';
23
+ export const OPERATOR_BEFORE = 'before';
24
+ export const OPERATOR_AFTER = 'after';
25
+ export const OPERATOR_BEFORE_INC = 'beforeInc';
26
+ export const OPERATOR_AFTER_INC = 'afterInc';
27
+ export const OPERATOR_CONTAINS = 'contains';
28
+ export const OPERATOR_NOT_CONTAINS = 'notContains';
29
+ export const OPERATOR_STARTS_WITH = 'startsWith';
30
+ export const OPERATOR_BETWEEN = 'between';
31
+ export const OPERATOR_ON = 'on';
32
+ export const OPERATOR_NOT_ON = 'notOn';
33
+ export const OPERATOR_IN_THE_PAST = 'inThePast';
34
+ export const OPERATOR_OVER = 'over';
19
35
 
20
- export const ALL_OPERATORS = [
36
+ export const ALL_OPERATORS: Operator[] = [
21
37
  OPERATOR_IS,
22
38
  OPERATOR_IS_NOT,
23
39
  OPERATOR_IS_ANY,
24
40
  OPERATOR_IS_NONE,
25
41
  OPERATOR_IS_ALL,
26
42
  OPERATOR_IS_NOT_ALL,
43
+ OPERATOR_LESS_THAN,
44
+ OPERATOR_GREATER_THAN,
45
+ OPERATOR_LESS_THAN_OR_EQUAL,
46
+ OPERATOR_GREATER_THAN_OR_EQUAL,
47
+ OPERATOR_BEFORE,
48
+ OPERATOR_AFTER,
49
+ OPERATOR_BEFORE_INC,
50
+ OPERATOR_AFTER_INC,
51
+ OPERATOR_CONTAINS,
52
+ OPERATOR_NOT_CONTAINS,
53
+ OPERATOR_STARTS_WITH,
54
+ OPERATOR_BETWEEN,
55
+ OPERATOR_ON,
56
+ OPERATOR_NOT_ON,
57
+ OPERATOR_IN_THE_PAST,
58
+ OPERATOR_OVER,
27
59
  ];
60
+
61
+ export const SINGLE_SELECTION_OPERATORS: Operator[] = [
62
+ OPERATOR_IS,
63
+ OPERATOR_IS_NOT,
64
+ OPERATOR_LESS_THAN,
65
+ OPERATOR_GREATER_THAN,
66
+ OPERATOR_LESS_THAN_OR_EQUAL,
67
+ OPERATOR_GREATER_THAN_OR_EQUAL,
68
+ OPERATOR_BEFORE,
69
+ OPERATOR_AFTER,
70
+ OPERATOR_BEFORE_INC,
71
+ OPERATOR_AFTER_INC,
72
+ OPERATOR_CONTAINS,
73
+ OPERATOR_NOT_CONTAINS,
74
+ OPERATOR_STARTS_WITH,
75
+ OPERATOR_ON,
76
+ OPERATOR_NOT_ON,
77
+ ];
78
+
28
79
  export const OPERATORS: Record< Operator, { key: string; label: string } > = {
29
80
  [ OPERATOR_IS ]: {
30
81
  key: 'is-filter',
@@ -50,6 +101,70 @@ export const OPERATORS: Record< Operator, { key: string; label: string } > = {
50
101
  key: 'is-not-all-filter',
51
102
  label: __( 'Is not all' ),
52
103
  },
104
+ [ OPERATOR_LESS_THAN ]: {
105
+ key: 'less-than-filter',
106
+ label: __( 'Less than' ),
107
+ },
108
+ [ OPERATOR_GREATER_THAN ]: {
109
+ key: 'greater-than-filter',
110
+ label: __( 'Greater than' ),
111
+ },
112
+ [ OPERATOR_LESS_THAN_OR_EQUAL ]: {
113
+ key: 'less-than-or-equal-filter',
114
+ label: __( 'Less than or equal' ),
115
+ },
116
+ [ OPERATOR_GREATER_THAN_OR_EQUAL ]: {
117
+ key: 'greater-than-or-equal-filter',
118
+ label: __( 'Greater than or equal' ),
119
+ },
120
+ [ OPERATOR_BEFORE ]: {
121
+ key: 'before-filter',
122
+ label: __( 'Before' ),
123
+ },
124
+ [ OPERATOR_AFTER ]: {
125
+ key: 'after-filter',
126
+ label: __( 'After' ),
127
+ },
128
+ [ OPERATOR_BEFORE_INC ]: {
129
+ key: 'before-inc-filter',
130
+ label: __( 'Before (inc)' ),
131
+ },
132
+ [ OPERATOR_AFTER_INC ]: {
133
+ key: 'after-inc-filter',
134
+ label: __( 'After (inc)' ),
135
+ },
136
+ [ OPERATOR_CONTAINS ]: {
137
+ key: 'contains-filter',
138
+ label: __( 'Contains' ),
139
+ },
140
+ [ OPERATOR_NOT_CONTAINS ]: {
141
+ key: 'not-contains-filter',
142
+ label: __( "Doesn't contain" ),
143
+ },
144
+ [ OPERATOR_STARTS_WITH ]: {
145
+ key: 'starts-with-filter',
146
+ label: __( 'Starts with' ),
147
+ },
148
+ [ OPERATOR_BETWEEN ]: {
149
+ key: 'between-filter',
150
+ label: __( 'Between (inc)' ),
151
+ },
152
+ [ OPERATOR_ON ]: {
153
+ key: 'on-filter',
154
+ label: __( 'On' ),
155
+ },
156
+ [ OPERATOR_NOT_ON ]: {
157
+ key: 'not-on-filter',
158
+ label: __( 'Not on' ),
159
+ },
160
+ [ OPERATOR_IN_THE_PAST ]: {
161
+ key: 'in-the-past-filter',
162
+ label: __( 'In the past' ),
163
+ },
164
+ [ OPERATOR_OVER ]: {
165
+ key: 'over-filter',
166
+ label: __( 'Over' ),
167
+ },
53
168
  };
54
169
 
55
170
  export const SORTING_DIRECTIONS = [ 'asc', 'desc' ] as const;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { ToggleControl } from '@wordpress/components';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import type { DataFormControlProps } from '../types';
10
+
11
+ export default function Boolean< Item >( {
12
+ field,
13
+ onChange,
14
+ data,
15
+ hideLabelFromVision,
16
+ }: DataFormControlProps< Item > ) {
17
+ const { id, getValue, label } = field;
18
+
19
+ return (
20
+ <ToggleControl
21
+ hidden={ hideLabelFromVision }
22
+ __nextHasNoMarginBottom
23
+ label={ label }
24
+ checked={ getValue( { item: data } ) }
25
+ onChange={ () =>
26
+ onChange( { [ id ]: ! getValue( { item: data } ) } )
27
+ }
28
+ />
29
+ );
30
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { CheckboxControl } from '@wordpress/components';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import type { DataFormControlProps } from '../types';
10
+
11
+ export default function Checkbox< Item >( {
12
+ field,
13
+ onChange,
14
+ data,
15
+ hideLabelFromVision,
16
+ }: DataFormControlProps< Item > ) {
17
+ const { id, getValue, label, description } = field;
18
+
19
+ return (
20
+ <CheckboxControl
21
+ __nextHasNoMarginBottom
22
+ hidden={ hideLabelFromVision }
23
+ label={ label }
24
+ help={ description }
25
+ checked={ getValue( { item: data } ) }
26
+ onChange={ () =>
27
+ onChange( { [ id ]: ! getValue( { item: data } ) } )
28
+ }
29
+ />
30
+ );
31
+ }