@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
@@ -29,121 +29,157 @@ export type SpaceObject = {
29
29
  description: string;
30
30
  image: string;
31
31
  type: string;
32
+ isPlanet: boolean;
32
33
  categories: string[];
33
34
  satellites: number;
34
35
  date: string;
36
+ datetime: string;
37
+ email: string;
35
38
  };
36
39
 
37
40
  export const data: SpaceObject[] = [
38
41
  {
39
42
  id: 1,
40
- title: 'Apollo',
41
- description: 'Apollo description',
42
- image: 'https://live.staticflickr.com/5725/21726228300_51333bd62c_b.jpg',
43
- type: 'Not a planet',
44
- categories: [ 'Space', 'NASA' ],
43
+ title: 'Moon',
44
+ description: "Earth's satellite",
45
+ image: 'https://live.staticflickr.com/7398/9458193857_e1256123e3_z.jpg',
46
+ type: 'Satellite',
47
+ isPlanet: false,
48
+ categories: [ 'Solar system', 'Satellite', 'Earth', 'Moon' ],
45
49
  satellites: 0,
46
- date: '2021-01-01T00:00:00Z',
50
+ date: '2021-01-01',
51
+ datetime: '2021-01-01T14:30:00Z',
52
+ email: 'moon@example.com',
47
53
  },
48
54
  {
49
55
  id: 2,
50
- title: 'Space',
51
- description: 'Space description',
52
- image: 'https://live.staticflickr.com/5678/21911065441_92e2d44708_b.jpg',
53
- type: 'Not a planet',
54
- categories: [ 'Space' ],
56
+ title: 'Io',
57
+ description: 'Moon of Jupiter',
58
+ image: 'https://live.staticflickr.com/5482/9460973502_07e8ab81fe_z.jpg',
59
+ type: 'Satellite',
60
+ isPlanet: false,
61
+ categories: [ 'Solar system', 'Satellite', 'Jupiter', 'Moon' ],
55
62
  satellites: 0,
56
- date: '2019-01-02T00:00:00Z',
63
+ date: '2019-01-02',
64
+ datetime: '2019-01-02T09:15:00Z',
65
+ email: 'io@example.com',
57
66
  },
58
67
  {
59
68
  id: 3,
60
- title: 'NASA',
61
- description: 'NASA photo',
62
- image: 'https://live.staticflickr.com/742/21712365770_8f70a2c91e_b.jpg',
63
- type: 'Not a planet',
64
- categories: [ 'NASA' ],
69
+ title: 'Europa',
70
+ description: 'Moon of Jupiter',
71
+ image: 'https://live.staticflickr.com/65535/31499273012_baf5f38cc1_z.jpg',
72
+ type: 'Satellite',
73
+ isPlanet: false,
74
+ categories: [ 'Solar system', 'Satellite', 'Jupiter', 'Moon' ],
65
75
  satellites: 0,
66
- date: '2025-01-03T00:00:00Z',
76
+ date: '2025-01-03',
77
+ datetime: '2025-01-03T16:45:30Z',
78
+ email: 'europa@example.com',
67
79
  },
68
80
  {
69
81
  id: 4,
70
82
  title: 'Neptune',
71
- description: 'Neptune description',
72
- image: 'https://live.staticflickr.com/5725/21726228300_51333bd62c_b.jpg',
83
+ description: 'Ice giant in the Solar system',
84
+ image: 'https://live.staticflickr.com/65535/29523683990_000ff4720c_z.jpg',
73
85
  type: 'Ice giant',
74
- categories: [ 'Space', 'Planet', 'Solar system' ],
75
- satellites: 14,
76
- date: '2020-01-01T00:00:00Z',
86
+ isPlanet: true,
87
+ categories: [ 'Ice giant', 'Planet', 'Solar system' ],
88
+ satellites: 16,
89
+ date: '2020-01-01',
90
+ datetime: '2020-01-01T11:22:15Z',
91
+ email: 'neptune@example.com',
77
92
  },
78
93
  {
79
94
  id: 5,
80
95
  title: 'Mercury',
81
- description: 'Mercury description',
82
- image: 'https://live.staticflickr.com/5725/21726228300_51333bd62c_b.jpg',
96
+ description: 'Terrestrial planet in the Solar system',
97
+ image: 'https://live.staticflickr.com/813/40199101735_e5e92ffd11_z.jpg',
83
98
  type: 'Terrestrial',
84
- categories: [ 'Space', 'Planet', 'Solar system' ],
99
+ isPlanet: true,
100
+ categories: [ 'Terrestrial', 'Planet', 'Solar system' ],
85
101
  satellites: 0,
86
- date: '2020-01-02T01:00:00Z',
102
+ date: '2020-01-02',
103
+ datetime: '2020-01-02T13:05:45Z',
104
+ email: 'mercury@example.com',
87
105
  },
88
106
  {
89
107
  id: 6,
90
108
  title: 'Venus',
91
109
  description: 'La planète Vénus',
92
- image: 'https://live.staticflickr.com/5725/21726228300_51333bd62c_b.jpg',
110
+ image: 'https://live.staticflickr.com/8025/7544560662_900e717727_z.jpg',
93
111
  type: 'Terrestrial',
94
- categories: [ 'Space', 'Planet', 'Solar system' ],
112
+ isPlanet: true,
113
+ categories: [ 'Terrestrial', 'Planet', 'Solar system' ],
95
114
  satellites: 0,
96
- date: '2020-01-02T00:00:00Z',
115
+ date: '2020-01-02',
116
+ datetime: '2020-01-02T08:30:12Z',
117
+ email: 'venus@example.com',
97
118
  },
98
119
  {
99
120
  id: 7,
100
121
  title: 'Earth',
101
- description: 'Earth description',
102
- image: 'https://live.staticflickr.com/5725/21726228300_51333bd62c_b.jpg',
122
+ description: 'Terrestrial planet in the Solar system',
123
+ image: 'https://live.staticflickr.com/3762/9460163562_964fe6af07_z.jpg',
103
124
  type: 'Terrestrial',
104
- categories: [ 'Space', 'Planet', 'Solar system' ],
125
+ isPlanet: true,
126
+ categories: [ 'Terrestrial', 'Planet', 'Solar system', 'Earth' ],
105
127
  satellites: 1,
106
- date: '2023-01-03T00:00:00Z',
128
+ date: '2023-01-03',
129
+ datetime: '2023-01-03T18:15:30Z',
130
+ email: 'earth@example.com',
107
131
  },
108
132
  {
109
133
  id: 8,
110
134
  title: 'Mars',
111
- description: 'Mars description',
112
- image: 'https://live.staticflickr.com/5725/21726228300_51333bd62c_b.jpg',
135
+ description: 'Terrestrial planet in the Solar system',
136
+ image: 'https://live.staticflickr.com/8151/7651156426_e047f4d219_z.jpg',
113
137
  type: 'Terrestrial',
114
- categories: [ 'Space', 'Planet', 'Solar system' ],
138
+ isPlanet: true,
139
+ categories: [ 'Terrestrial', 'Planet', 'Solar system' ],
115
140
  satellites: 2,
116
- date: '2020-01-01T00:00:00Z',
141
+ date: '2020-01-01',
142
+ datetime: '2020-01-01T20:45:00Z',
143
+ email: 'mars@example.com',
117
144
  },
118
145
  {
119
146
  id: 9,
120
147
  title: 'Jupiter',
121
- description: 'Jupiter description',
122
- image: 'https://live.staticflickr.com/5725/21726228300_51333bd62c_b.jpg',
148
+ description: 'Gas giant in the Solar system',
149
+ image: 'https://staging-jubilee.flickr.com/2853/9458010071_6e6fc41408_z.jpg',
123
150
  type: 'Gas giant',
124
- categories: [ 'Space', 'Planet', 'Solar system' ],
125
- satellites: 95,
126
- date: '2017-01-01T00:01:00Z',
151
+ isPlanet: true,
152
+ categories: [ 'Solar system', 'Planet', 'Gas giant' ],
153
+ satellites: 97,
154
+ date: '2017-01-01',
155
+ datetime: '2017-01-01T00:01:00Z',
156
+ email: 'jupiter@example.com',
127
157
  },
128
158
  {
129
159
  id: 10,
130
160
  title: 'Saturn',
131
- description: 'Saturn description',
132
- image: 'https://live.staticflickr.com/5725/21726228300_51333bd62c_b.jpg',
161
+ description: 'Gas giant in the Solar system',
162
+ image: 'https://live.staticflickr.com/5524/9464658509_fc2d83dff5_z.jpg',
133
163
  type: 'Gas giant',
134
- categories: [ 'Space', 'Planet', 'Solar system' ],
135
- satellites: 146,
136
- date: '2020-02-01T00:02:00Z',
164
+ isPlanet: true,
165
+ categories: [ 'Gas giant', 'Solar system', 'Planet' ],
166
+ satellites: 274,
167
+ date: '2020-02-01',
168
+ datetime: '2020-02-01T00:02:00Z',
169
+ email: 'saturn@example.com',
137
170
  },
138
171
  {
139
172
  id: 11,
140
173
  title: 'Uranus',
141
- description: 'Uranus description',
142
- image: 'https://live.staticflickr.com/5725/21726228300_51333bd62c_b.jpg',
174
+ description: 'Ice giant in the Solar system',
175
+ image: 'https://live.staticflickr.com/65535/5553350875_3072df91e2_c.jpg',
143
176
  type: 'Ice giant',
144
- categories: [ 'Space', 'Ice giant', 'Solar system' ],
177
+ isPlanet: true,
178
+ categories: [ 'Planet', 'Ice giant', 'Solar system' ],
145
179
  satellites: 28,
146
- date: '2020-03-01T00:00:00Z',
180
+ date: '2020-03-01',
181
+ datetime: '2020-03-01T10:15:20Z',
182
+ email: 'uranus@example.com',
147
183
  },
148
184
  ];
149
185
 
@@ -562,7 +598,7 @@ export const themeFields: Field< Theme >[] = [
562
598
  {
563
599
  id: 'tags',
564
600
  label: 'Tags',
565
- render: ( { item } ) => item.tags.join( ', ' ),
601
+ type: 'array',
566
602
  },
567
603
  ];
568
604
 
@@ -571,7 +607,13 @@ export const DEFAULT_VIEW = {
571
607
  search: '',
572
608
  page: 1,
573
609
  perPage: 10,
574
- layout: {},
610
+ layout: {
611
+ styles: {
612
+ satellites: {
613
+ align: 'end' as const,
614
+ },
615
+ },
616
+ },
575
617
  filters: [],
576
618
  };
577
619
 
@@ -583,6 +625,7 @@ export const actions: Action< SpaceObject >[] = [
583
625
  icon: trash,
584
626
  hideModalHeader: true,
585
627
  modalFocusOnMount: 'firstContentElement',
628
+ supportsBulk: true,
586
629
  RenderModal: ( { items, closeModal } ) => {
587
630
  return (
588
631
  <VStack spacing="5">
@@ -620,6 +663,7 @@ export const fields: Field< SpaceObject >[] = [
620
663
  {
621
664
  label: 'Image',
622
665
  id: 'image',
666
+ type: 'media',
623
667
  header: (
624
668
  <HStack spacing={ 1 } justify="start">
625
669
  <Icon icon={ image } />
@@ -631,17 +675,25 @@ export const fields: Field< SpaceObject >[] = [
631
675
  <img src={ item.image } alt="" style={ { width: '100%' } } />
632
676
  );
633
677
  },
634
- enableSorting: false,
635
678
  },
636
679
  {
637
680
  label: 'Title',
638
681
  id: 'title',
682
+ type: 'text',
639
683
  enableHiding: false,
640
684
  enableGlobalSearch: true,
685
+ filterBy: {
686
+ operators: [ 'contains', 'notContains', 'startsWith' ],
687
+ },
641
688
  },
642
689
  {
643
690
  id: 'date',
644
691
  label: 'Date',
692
+ type: 'date',
693
+ },
694
+ {
695
+ id: 'datetime',
696
+ label: 'Datetime',
645
697
  type: 'datetime',
646
698
  },
647
699
  {
@@ -649,11 +701,23 @@ export const fields: Field< SpaceObject >[] = [
649
701
  id: 'type',
650
702
  enableHiding: false,
651
703
  elements: [
652
- { value: 'Not a planet', label: 'Not a planet' },
704
+ { value: 'Satellite', label: 'Satellite' },
653
705
  { value: 'Ice giant', label: 'Ice giant' },
654
706
  { value: 'Terrestrial', label: 'Terrestrial' },
655
707
  { value: 'Gas giant', label: 'Gas giant' },
656
708
  ],
709
+ filterBy: {
710
+ operators: [ 'is', 'isNot' ],
711
+ },
712
+ },
713
+ {
714
+ id: 'isPlanet',
715
+ label: 'Is Planet',
716
+ type: 'boolean',
717
+ elements: [
718
+ { value: true, label: 'True' },
719
+ { value: false, label: 'False' },
720
+ ],
657
721
  },
658
722
  {
659
723
  label: 'Satellites',
@@ -664,8 +728,15 @@ export const fields: Field< SpaceObject >[] = [
664
728
  {
665
729
  label: 'Description',
666
730
  id: 'description',
731
+ type: 'text',
667
732
  enableSorting: false,
668
733
  enableGlobalSearch: true,
734
+ filterBy: false,
735
+ },
736
+ {
737
+ label: 'Email',
738
+ id: 'email',
739
+ type: 'email',
669
740
  },
670
741
  {
671
742
  label: 'Categories',
@@ -677,21 +748,16 @@ export const fields: Field< SpaceObject >[] = [
677
748
  </HStack>
678
749
  ),
679
750
  elements: [
680
- { value: 'Space', label: 'Space' },
681
- { value: 'NASA', label: 'NASA' },
682
- { value: 'Planet', label: 'Planet' },
683
751
  { value: 'Solar system', label: 'Solar system' },
752
+ { value: 'Satellite', label: 'Satellite' },
753
+ { value: 'Moon', label: 'Moon' },
754
+ { value: 'Earth', label: 'Earth' },
755
+ { value: 'Jupiter', label: 'Jupiter' },
756
+ { value: 'Planet', label: 'Planet' },
684
757
  { value: 'Ice giant', label: 'Ice giant' },
758
+ { value: 'Terrestrial', label: 'Terrestrial' },
759
+ { value: 'Gas giant', label: 'Gas giant' },
685
760
  ],
686
- filterBy: {
687
- operators: [ 'isAny', 'isNone', 'isAll', 'isNotAll' ],
688
- },
689
- getValue: ( { item } ) => {
690
- return item.categories;
691
- },
692
- render: ( { item } ) => {
693
- return item.categories.join( ',' );
694
- },
695
- enableSorting: false,
761
+ type: 'array',
696
762
  },
697
763
  ];
@@ -1,13 +1,39 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { Meta } from '@storybook/react';
5
+
1
6
  /**
2
7
  * WordPress dependencies
3
8
  */
4
- import { useState, useMemo } from '@wordpress/element';
9
+ import {
10
+ useState,
11
+ useMemo,
12
+ createInterpolateElement,
13
+ } from '@wordpress/element';
14
+ import {
15
+ Card,
16
+ CardHeader,
17
+ CardBody,
18
+ __experimentalGrid as Grid,
19
+ __experimentalHeading as Heading,
20
+ __experimentalText as Text,
21
+ __experimentalHStack as HStack,
22
+ __experimentalVStack as VStack,
23
+ } from '@wordpress/components';
24
+ import { __, _n } from '@wordpress/i18n';
5
25
 
6
26
  /**
7
27
  * Internal dependencies
8
28
  */
9
29
  import DataViews from '../index';
10
- import { DEFAULT_VIEW, actions, data, fields } from './fixtures';
30
+ import {
31
+ DEFAULT_VIEW,
32
+ actions,
33
+ data,
34
+ fields,
35
+ type SpaceObject,
36
+ } from './fixtures';
11
37
  import { LAYOUT_GRID, LAYOUT_LIST, LAYOUT_TABLE } from '../../../constants';
12
38
  import { filterSortAndPaginate } from '../../../filter-and-sort-data-view';
13
39
  import type { View } from '../../../types';
@@ -17,7 +43,8 @@ import './style.css';
17
43
  const meta = {
18
44
  title: 'DataViews/DataViews',
19
45
  component: DataViews,
20
- };
46
+ } as Meta< typeof DataViews >;
47
+
21
48
  export default meta;
22
49
 
23
50
  const defaultLayouts = {
@@ -46,10 +73,17 @@ export const Default = () => {
46
73
  fields={ fields }
47
74
  onChangeView={ setView }
48
75
  actions={ actions }
49
- onClickItem={ ( item ) => {
50
- // eslint-disable-next-line no-alert
51
- alert( 'Clicked: ' + item.title );
52
- } }
76
+ renderItemLink={ ( { item, ...props }: { item: SpaceObject } ) => (
77
+ <button
78
+ style={ { background: 'none', border: 'none', padding: 0 } }
79
+ onClick={ ( e ) => {
80
+ e.stopPropagation();
81
+ // eslint-disable-next-line no-alert
82
+ alert( 'Clicked: ' + item.title );
83
+ } }
84
+ { ...props }
85
+ />
86
+ ) }
53
87
  isItemClickable={ () => true }
54
88
  defaultLayouts={ defaultLayouts }
55
89
  />
@@ -105,3 +139,227 @@ export const FieldsNoSortableNoHidable = () => {
105
139
  />
106
140
  );
107
141
  };
142
+
143
+ /**
144
+ * Custom composition example
145
+ */
146
+ function PlanetOverview( { planets }: { planets: SpaceObject[] } ) {
147
+ const moons = planets.reduce( ( sum, item ) => sum + item.satellites, 0 );
148
+
149
+ return (
150
+ <>
151
+ <Heading className="free-composition-heading" level={ 2 }>
152
+ { __( 'Solar System numbers' ) }
153
+ </Heading>
154
+ <Grid
155
+ templateColumns="repeat(auto-fit, minmax(330px, 1fr))"
156
+ align="flex-start"
157
+ className="free-composition-header"
158
+ >
159
+ <Card variant="secondary">
160
+ <CardBody>
161
+ <VStack>
162
+ <Text size={ 18 } as="p">
163
+ { createInterpolateElement(
164
+ _n(
165
+ '<PlanetsNumber /> planet',
166
+ '<PlanetsNumber /> planets',
167
+ planets.length
168
+ ),
169
+ {
170
+ PlanetsNumber: (
171
+ <strong>{ planets.length } </strong>
172
+ ),
173
+ }
174
+ ) }
175
+ </Text>
176
+
177
+ <Text size={ 18 } as="p">
178
+ { createInterpolateElement(
179
+ _n(
180
+ '<SatellitesNumber /> moon',
181
+ '<SatellitesNumber /> moons',
182
+ moons
183
+ ),
184
+ {
185
+ SatellitesNumber: (
186
+ <strong>{ moons } </strong>
187
+ ),
188
+ }
189
+ ) }
190
+ </Text>
191
+ </VStack>
192
+ </CardBody>
193
+ </Card>
194
+
195
+ <VStack>
196
+ <HStack justify="start">
197
+ <DataViews.FiltersToggle />
198
+ <DataViews.Search label={ __( 'moons by planet' ) } />
199
+ </HStack>
200
+ <DataViews.Filters />
201
+ </VStack>
202
+
203
+ <VStack>
204
+ <HStack justify="end">
205
+ <DataViews.Pagination />
206
+ <DataViews.ViewConfig />
207
+ <DataViews.LayoutSwitcher />
208
+ </HStack>
209
+
210
+ <DataViews.BulkActionToolbar />
211
+ </VStack>
212
+ </Grid>
213
+
214
+ <DataViews.Layout className="free-composition-dataviews-layout" />
215
+ </>
216
+ );
217
+ }
218
+
219
+ /**
220
+ * This is a basic example of using the DataViews component in
221
+ * a free composition mode.
222
+ *
223
+ * Unlike the default usage where DataViews renders its own UI,
224
+ * here we use it purely to provide context and handle data-related logic.
225
+ *
226
+ * The UI is fully custom and composed externally via the
227
+ * `PlanetOverview` component.
228
+ *
229
+ * In future iterations, this story will showcase more advanced compositions
230
+ * using built-in subcomponents like <Search />, filters,
231
+ * or pagination controls.
232
+ */
233
+ export const FreeComposition = () => {
234
+ const [ view, setView ] = useState< View >( {
235
+ ...DEFAULT_VIEW,
236
+ fields: [ 'categories' ],
237
+ titleField: 'title',
238
+ descriptionField: 'description',
239
+ mediaField: 'image',
240
+ } );
241
+
242
+ const { data: processedData, paginationInfo } = useMemo( () => {
243
+ return filterSortAndPaginate( data, view, fields );
244
+ }, [ view ] );
245
+
246
+ const planets = processedData.filter( ( item ) =>
247
+ item.categories.includes( 'Planet' )
248
+ );
249
+
250
+ return (
251
+ <div className="free-composition">
252
+ <DataViews
253
+ getItemId={ ( item ) => item.id.toString() }
254
+ paginationInfo={ paginationInfo }
255
+ data={ processedData }
256
+ view={ view }
257
+ fields={ fields }
258
+ actions={ actions }
259
+ onChangeView={ setView }
260
+ defaultLayouts={ {
261
+ table: {},
262
+ grid: {},
263
+ } }
264
+ >
265
+ <PlanetOverview planets={ planets } />
266
+ </DataViews>
267
+ </div>
268
+ );
269
+ };
270
+
271
+ export const WithCard = () => {
272
+ const [ view, setView ] = useState< View >( {
273
+ ...DEFAULT_VIEW,
274
+ fields: [ 'categories' ],
275
+ titleField: 'title',
276
+ descriptionField: 'description',
277
+ mediaField: 'image',
278
+ } );
279
+ const { data: shownData, paginationInfo } = useMemo( () => {
280
+ return filterSortAndPaginate( data, view, fields );
281
+ }, [ view ] );
282
+ return (
283
+ <Card>
284
+ <CardHeader>Header</CardHeader>
285
+ <CardBody>
286
+ <DataViews
287
+ getItemId={ ( item ) => item.id.toString() }
288
+ paginationInfo={ paginationInfo }
289
+ data={ shownData }
290
+ view={ view }
291
+ fields={ fields }
292
+ onChangeView={ setView }
293
+ actions={ actions.filter(
294
+ ( action ) => ! action.supportsBulk
295
+ ) }
296
+ defaultLayouts={ defaultLayouts }
297
+ />
298
+ </CardBody>
299
+ </Card>
300
+ );
301
+ };
302
+
303
+ export const CustomPerPageSizes = () => {
304
+ const [ view, setView ] = useState< View >( {
305
+ ...DEFAULT_VIEW,
306
+ fields: [ 'categories' ],
307
+ titleField: 'title',
308
+ descriptionField: 'description',
309
+ mediaField: 'image',
310
+ perPage: 3,
311
+ } );
312
+ const { data: shownData, paginationInfo } = useMemo( () => {
313
+ return filterSortAndPaginate( data, view, fields );
314
+ }, [ view ] );
315
+ return (
316
+ <DataViews
317
+ getItemId={ ( item ) => item.id.toString() }
318
+ paginationInfo={ paginationInfo }
319
+ data={ shownData }
320
+ view={ view }
321
+ fields={ fields }
322
+ onChangeView={ setView }
323
+ actions={ actions.filter( ( action ) => ! action.supportsBulk ) }
324
+ defaultLayouts={ defaultLayouts }
325
+ perPageSizes={ [ 3, 6, 12, 24 ] }
326
+ />
327
+ );
328
+ };
329
+
330
+ export const GroupedGridLayout = () => {
331
+ const [ view, setView ] = useState< View >( {
332
+ type: LAYOUT_GRID,
333
+ search: '',
334
+ page: 1,
335
+ perPage: 20,
336
+ filters: [],
337
+ fields: [ 'satellites' ],
338
+ titleField: 'title',
339
+ descriptionField: 'description',
340
+ mediaField: 'image',
341
+ groupByField: 'type',
342
+ layout: {
343
+ badgeFields: [ 'satellites' ],
344
+ },
345
+ } );
346
+ const { data: shownData, paginationInfo } = useMemo( () => {
347
+ return filterSortAndPaginate( data, view, fields );
348
+ }, [ view ] );
349
+ return (
350
+ <DataViews
351
+ getItemId={ ( item ) => item.id.toString() }
352
+ paginationInfo={ paginationInfo }
353
+ data={ shownData }
354
+ view={ view }
355
+ fields={ fields }
356
+ onChangeView={ setView }
357
+ actions={ actions }
358
+ defaultLayouts={ {
359
+ [ LAYOUT_GRID ]: {},
360
+ [ LAYOUT_LIST ]: {},
361
+ [ LAYOUT_TABLE ]: {},
362
+ } }
363
+ />
364
+ );
365
+ };
@@ -1,4 +1,25 @@
1
1
  .theme-field-description {
2
- text-wrap: balance;
3
- text-wrap: pretty;
4
- }
2
+ text-wrap: balance;
3
+ text-wrap: pretty;
4
+ }
5
+
6
+ .free-composition {
7
+ height: 600px;
8
+ overflow: auto;
9
+ }
10
+
11
+ .free-composition-heading,
12
+ .free-composition-header {
13
+ padding: 16px 48px;
14
+ }
15
+
16
+ .free-composition-heading {
17
+ position: sticky;
18
+ top: 0;
19
+ z-index: 2;
20
+ background-color: #fff;
21
+ }
22
+
23
+ .free-composition-dataviews-layout thead {
24
+ inset-block-start: 67px;
25
+ }