@wordpress/dataviews 4.22.0 → 5.0.1-next.719a03cbe.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 (335) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +146 -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 +31 -25
  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/datetime.js +19 -1
  71. package/build/field-types/datetime.js.map +1 -1
  72. package/build/field-types/email.js +60 -0
  73. package/build/field-types/email.js.map +1 -0
  74. package/build/field-types/index.js +38 -1
  75. package/build/field-types/index.js.map +1 -1
  76. package/build/field-types/integer.js +23 -1
  77. package/build/field-types/integer.js.map +1 -1
  78. package/build/field-types/media.js +31 -0
  79. package/build/field-types/media.js.map +1 -0
  80. package/build/field-types/text.js +23 -1
  81. package/build/field-types/text.js.map +1 -1
  82. package/build/filter-and-sort-data-view.js +152 -1
  83. package/build/filter-and-sort-data-view.js.map +1 -1
  84. package/build/normalize-fields.js +72 -11
  85. package/build/normalize-fields.js.map +1 -1
  86. package/build/types.js.map +1 -1
  87. package/build/utils.js +11 -19
  88. package/build/utils.js.map +1 -1
  89. package/build-module/components/dataviews/index.js +74 -40
  90. package/build-module/components/dataviews/index.js.map +1 -1
  91. package/build-module/components/dataviews-context/index.js +16 -2
  92. package/build-module/components/dataviews-context/index.js.map +1 -1
  93. package/build-module/components/dataviews-filters/filter.js +309 -0
  94. package/build-module/components/dataviews-filters/filter.js.map +1 -0
  95. package/build-module/components/dataviews-filters/index.js +22 -21
  96. package/build-module/components/dataviews-filters/index.js.map +1 -1
  97. package/build-module/components/dataviews-filters/input-widget.js +69 -0
  98. package/build-module/components/dataviews-filters/input-widget.js.map +1 -0
  99. package/build-module/components/dataviews-filters/search-widget.js +31 -37
  100. package/build-module/components/dataviews-filters/search-widget.js.map +1 -1
  101. package/build-module/components/dataviews-filters/utils.js +18 -0
  102. package/build-module/components/dataviews-filters/utils.js.map +1 -0
  103. package/build-module/components/dataviews-item-actions/index.js +1 -1
  104. package/build-module/components/dataviews-item-actions/index.js.map +1 -1
  105. package/build-module/components/dataviews-layout/index.js +7 -2
  106. package/build-module/components/dataviews-layout/index.js.map +1 -1
  107. package/build-module/components/dataviews-pagination/index.js +4 -4
  108. package/build-module/components/dataviews-pagination/index.js.map +1 -1
  109. package/build-module/components/dataviews-selection-checkbox/index.js.map +1 -1
  110. package/build-module/components/dataviews-view-config/index.js +9 -20
  111. package/build-module/components/dataviews-view-config/index.js.map +1 -1
  112. package/build-module/constants.js +82 -1
  113. package/build-module/constants.js.map +1 -1
  114. package/build-module/dataform-controls/boolean.js +35 -0
  115. package/build-module/dataform-controls/boolean.js.map +1 -0
  116. package/build-module/dataform-controls/checkbox.js +37 -0
  117. package/build-module/dataform-controls/checkbox.js.map +1 -0
  118. package/build-module/dataform-controls/datetime.js +98 -3
  119. package/build-module/dataform-controls/datetime.js.map +1 -1
  120. package/build-module/dataform-controls/email.js +41 -0
  121. package/build-module/dataform-controls/email.js.map +1 -0
  122. package/build-module/dataform-controls/index.js +9 -1
  123. package/build-module/dataform-controls/index.js.map +1 -1
  124. package/build-module/dataform-controls/integer.js +51 -3
  125. package/build-module/dataform-controls/integer.js.map +1 -1
  126. package/build-module/dataform-controls/select.js +1 -0
  127. package/build-module/dataform-controls/select.js.map +1 -1
  128. package/build-module/dataform-controls/text.js +3 -1
  129. package/build-module/dataform-controls/text.js.map +1 -1
  130. package/build-module/dataform-controls/toggle-group.js +45 -0
  131. package/build-module/dataform-controls/toggle-group.js.map +1 -0
  132. package/build-module/dataforms-layouts/data-form-layout.js +1 -1
  133. package/build-module/dataforms-layouts/data-form-layout.js.map +1 -1
  134. package/build-module/dataforms-layouts/panel/index.js +14 -5
  135. package/build-module/dataforms-layouts/panel/index.js.map +1 -1
  136. package/build-module/dataforms-layouts/regular/index.js +23 -4
  137. package/build-module/dataforms-layouts/regular/index.js.map +1 -1
  138. package/build-module/dataviews-layouts/grid/index.js +31 -26
  139. package/build-module/dataviews-layouts/grid/index.js.map +1 -1
  140. package/build-module/dataviews-layouts/list/index.js +11 -6
  141. package/build-module/dataviews-layouts/list/index.js.map +1 -1
  142. package/build-module/dataviews-layouts/table/column-header-menu.js +9 -7
  143. package/build-module/dataviews-layouts/table/column-header-menu.js.map +1 -1
  144. package/build-module/dataviews-layouts/table/column-primary.js +18 -12
  145. package/build-module/dataviews-layouts/table/column-primary.js.map +1 -1
  146. package/build-module/dataviews-layouts/table/index.js +47 -16
  147. package/build-module/dataviews-layouts/table/index.js.map +1 -1
  148. package/build-module/dataviews-layouts/table/use-is-horizontal-scroll-end.js +58 -0
  149. package/build-module/dataviews-layouts/table/use-is-horizontal-scroll-end.js.map +1 -0
  150. package/build-module/dataviews-layouts/utils/item-click-wrapper.js +71 -0
  151. package/build-module/dataviews-layouts/utils/item-click-wrapper.js.map +1 -0
  152. package/build-module/field-types/array.js +57 -0
  153. package/build-module/field-types/array.js.map +1 -0
  154. package/build-module/field-types/boolean.js +65 -0
  155. package/build-module/field-types/boolean.js.map +1 -0
  156. package/build-module/field-types/datetime.js +19 -1
  157. package/build-module/field-types/datetime.js.map +1 -1
  158. package/build-module/field-types/email.js +54 -0
  159. package/build-module/field-types/email.js.map +1 -0
  160. package/build-module/field-types/index.js +38 -1
  161. package/build-module/field-types/index.js.map +1 -1
  162. package/build-module/field-types/integer.js +23 -1
  163. package/build-module/field-types/integer.js.map +1 -1
  164. package/build-module/field-types/media.js +25 -0
  165. package/build-module/field-types/media.js.map +1 -0
  166. package/build-module/field-types/text.js +23 -1
  167. package/build-module/field-types/text.js.map +1 -1
  168. package/build-module/filter-and-sort-data-view.js +153 -2
  169. package/build-module/filter-and-sort-data-view.js.map +1 -1
  170. package/build-module/normalize-fields.js +72 -11
  171. package/build-module/normalize-fields.js.map +1 -1
  172. package/build-module/types.js.map +1 -1
  173. package/build-module/utils.js +10 -17
  174. package/build-module/utils.js.map +1 -1
  175. package/build-style/style-rtl.css +307 -13
  176. package/build-style/style.css +307 -13
  177. package/build-types/components/dataform/stories/index.story.d.ts.map +1 -1
  178. package/build-types/components/dataviews/index.d.ts +24 -3
  179. package/build-types/components/dataviews/index.d.ts.map +1 -1
  180. package/build-types/components/dataviews/stories/fixtures.d.ts +9 -1
  181. package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -1
  182. package/build-types/components/dataviews/stories/index.story.d.ts +22 -4
  183. package/build-types/components/dataviews/stories/index.story.d.ts.map +1 -1
  184. package/build-types/components/dataviews-context/index.d.ts +14 -1
  185. package/build-types/components/dataviews-context/index.d.ts.map +1 -1
  186. package/build-types/components/dataviews-filters/filter.d.ts +15 -0
  187. package/build-types/components/dataviews-filters/filter.d.ts.map +1 -0
  188. package/build-types/components/dataviews-filters/index.d.ts +3 -8
  189. package/build-types/components/dataviews-filters/index.d.ts.map +1 -1
  190. package/build-types/components/dataviews-filters/input-widget.d.ts +13 -0
  191. package/build-types/components/dataviews-filters/input-widget.d.ts.map +1 -0
  192. package/build-types/components/dataviews-filters/search-widget.d.ts +4 -5
  193. package/build-types/components/dataviews-filters/search-widget.d.ts.map +1 -1
  194. package/build-types/components/dataviews-filters/utils.d.ts +6 -0
  195. package/build-types/components/dataviews-filters/utils.d.ts.map +1 -0
  196. package/build-types/components/dataviews-layout/index.d.ts +5 -1
  197. package/build-types/components/dataviews-layout/index.d.ts.map +1 -1
  198. package/build-types/components/dataviews-pagination/index.d.ts +1 -1
  199. package/build-types/components/dataviews-pagination/index.d.ts.map +1 -1
  200. package/build-types/components/dataviews-selection-checkbox/index.d.ts +2 -2
  201. package/build-types/components/dataviews-selection-checkbox/index.d.ts.map +1 -1
  202. package/build-types/components/dataviews-view-config/index.d.ts +3 -4
  203. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
  204. package/build-types/components/stories/index.story.d.ts +59 -0
  205. package/build-types/components/stories/index.story.d.ts.map +1 -0
  206. package/build-types/constants.d.ts +20 -3
  207. package/build-types/constants.d.ts.map +1 -1
  208. package/build-types/dataform-controls/boolean.d.ts +6 -0
  209. package/build-types/dataform-controls/boolean.d.ts.map +1 -0
  210. package/build-types/dataform-controls/checkbox.d.ts +6 -0
  211. package/build-types/dataform-controls/checkbox.d.ts.map +1 -0
  212. package/build-types/dataform-controls/datetime.d.ts +1 -1
  213. package/build-types/dataform-controls/datetime.d.ts.map +1 -1
  214. package/build-types/dataform-controls/email.d.ts +6 -0
  215. package/build-types/dataform-controls/email.d.ts.map +1 -0
  216. package/build-types/dataform-controls/index.d.ts +1 -1
  217. package/build-types/dataform-controls/index.d.ts.map +1 -1
  218. package/build-types/dataform-controls/integer.d.ts +1 -4
  219. package/build-types/dataform-controls/integer.d.ts.map +1 -1
  220. package/build-types/dataform-controls/select.d.ts.map +1 -1
  221. package/build-types/dataform-controls/text.d.ts.map +1 -1
  222. package/build-types/dataform-controls/toggle-group.d.ts +6 -0
  223. package/build-types/dataform-controls/toggle-group.d.ts.map +1 -0
  224. package/build-types/dataforms-layouts/panel/index.d.ts.map +1 -1
  225. package/build-types/dataforms-layouts/regular/index.d.ts.map +1 -1
  226. package/build-types/dataviews-layouts/grid/index.d.ts +2 -1
  227. package/build-types/dataviews-layouts/grid/index.d.ts.map +1 -1
  228. package/build-types/dataviews-layouts/index.d.ts +3 -3
  229. package/build-types/dataviews-layouts/list/index.d.ts.map +1 -1
  230. package/build-types/dataviews-layouts/table/column-header-menu.d.ts.map +1 -1
  231. package/build-types/dataviews-layouts/table/column-primary.d.ts +8 -1
  232. package/build-types/dataviews-layouts/table/column-primary.d.ts.map +1 -1
  233. package/build-types/dataviews-layouts/table/index.d.ts +1 -1
  234. package/build-types/dataviews-layouts/table/index.d.ts.map +1 -1
  235. package/build-types/dataviews-layouts/table/use-is-horizontal-scroll-end.d.ts +19 -0
  236. package/build-types/dataviews-layouts/table/use-is-horizontal-scroll-end.d.ts.map +1 -0
  237. package/build-types/dataviews-layouts/utils/item-click-wrapper.d.ts +15 -0
  238. package/build-types/dataviews-layouts/utils/item-click-wrapper.d.ts.map +1 -0
  239. package/build-types/field-types/array.d.ts +7 -0
  240. package/build-types/field-types/array.d.ts.map +1 -0
  241. package/build-types/field-types/boolean.d.ts +19 -0
  242. package/build-types/field-types/boolean.d.ts.map +1 -0
  243. package/build-types/field-types/datetime.d.ts +7 -1
  244. package/build-types/field-types/datetime.d.ts.map +1 -1
  245. package/build-types/field-types/email.d.ts +19 -0
  246. package/build-types/field-types/email.d.ts.map +1 -0
  247. package/build-types/field-types/index.d.ts +2 -10
  248. package/build-types/field-types/index.d.ts.map +1 -1
  249. package/build-types/field-types/integer.d.ts +7 -1
  250. package/build-types/field-types/integer.d.ts.map +1 -1
  251. package/build-types/field-types/media.d.ts +16 -0
  252. package/build-types/field-types/media.d.ts.map +1 -0
  253. package/build-types/field-types/text.d.ts +7 -1
  254. package/build-types/field-types/text.d.ts.map +1 -1
  255. package/build-types/filter-and-sort-data-view.d.ts.map +1 -1
  256. package/build-types/normalize-fields.d.ts.map +1 -1
  257. package/build-types/types.d.ts +70 -8
  258. package/build-types/types.d.ts.map +1 -1
  259. package/build-types/utils.d.ts +5 -2
  260. package/build-types/utils.d.ts.map +1 -1
  261. package/build-wp/index.js +2545 -994
  262. package/package.json +18 -12
  263. package/src/components/dataform/stories/index.story.tsx +41 -20
  264. package/src/components/dataviews/index.tsx +108 -43
  265. package/src/components/dataviews/stories/fixtures.tsx +58 -13
  266. package/src/components/dataviews/stories/index.story.tsx +228 -7
  267. package/src/components/dataviews/stories/style.css +24 -3
  268. package/src/components/dataviews/style.scss +27 -0
  269. package/src/components/dataviews-context/index.ts +30 -2
  270. package/src/components/dataviews-filters/filter.tsx +603 -0
  271. package/src/components/dataviews-filters/index.tsx +23 -29
  272. package/src/components/dataviews-filters/input-widget.tsx +91 -0
  273. package/src/components/dataviews-filters/search-widget.tsx +51 -48
  274. package/src/components/dataviews-filters/style.scss +117 -14
  275. package/src/components/dataviews-filters/utils.ts +25 -0
  276. package/src/components/dataviews-item-actions/index.tsx +1 -1
  277. package/src/components/dataviews-layout/index.tsx +8 -1
  278. package/src/components/dataviews-pagination/index.tsx +4 -4
  279. package/src/components/dataviews-selection-checkbox/index.tsx +2 -2
  280. package/src/components/dataviews-view-config/index.tsx +10 -18
  281. package/src/components/stories/index.story.tsx +351 -0
  282. package/src/constants.ts +116 -1
  283. package/src/dataform-controls/boolean.tsx +30 -0
  284. package/src/dataform-controls/checkbox.tsx +31 -0
  285. package/src/dataform-controls/datetime.tsx +106 -2
  286. package/src/dataform-controls/email.tsx +42 -0
  287. package/src/dataform-controls/index.tsx +8 -0
  288. package/src/dataform-controls/integer.tsx +75 -1
  289. package/src/dataform-controls/select.tsx +1 -0
  290. package/src/dataform-controls/style.scss +5 -0
  291. package/src/dataform-controls/text.tsx +2 -1
  292. package/src/dataform-controls/toggle-group.tsx +59 -0
  293. package/src/dataforms-layouts/data-form-layout.tsx +1 -1
  294. package/src/dataforms-layouts/panel/index.tsx +19 -7
  295. package/src/dataforms-layouts/panel/style.scss +8 -1
  296. package/src/dataforms-layouts/regular/index.tsx +50 -17
  297. package/src/dataforms-layouts/regular/style.scss +4 -1
  298. package/src/dataviews-layouts/grid/index.tsx +47 -26
  299. package/src/dataviews-layouts/list/index.tsx +12 -5
  300. package/src/dataviews-layouts/table/column-header-menu.tsx +10 -8
  301. package/src/dataviews-layouts/table/column-primary.tsx +26 -13
  302. package/src/dataviews-layouts/table/index.tsx +74 -10
  303. package/src/dataviews-layouts/table/style.scss +37 -1
  304. package/src/dataviews-layouts/table/use-is-horizontal-scroll-end.ts +82 -0
  305. package/src/dataviews-layouts/utils/item-click-wrapper.tsx +93 -0
  306. package/src/field-types/array.tsx +75 -0
  307. package/src/field-types/boolean.tsx +66 -0
  308. package/src/field-types/datetime.tsx +46 -2
  309. package/src/field-types/email.tsx +79 -0
  310. package/src/field-types/index.tsx +45 -3
  311. package/src/field-types/integer.tsx +53 -2
  312. package/src/field-types/media.tsx +28 -0
  313. package/src/field-types/text.tsx +41 -2
  314. package/src/filter-and-sort-data-view.ts +243 -1
  315. package/src/normalize-fields.ts +116 -13
  316. package/src/test/dataviews.tsx +20 -2
  317. package/src/test/filter-and-sort-data-view.js +507 -0
  318. package/src/test/normalize-fields.ts +155 -0
  319. package/src/types.ts +106 -9
  320. package/src/utils.ts +10 -33
  321. package/tsconfig.json +2 -0
  322. package/tsconfig.tsbuildinfo +1 -1
  323. package/build/components/dataviews-filters/filter-summary.js.map +0 -1
  324. package/build/dataviews-layouts/utils/get-clickable-item-props.js +0 -36
  325. package/build/dataviews-layouts/utils/get-clickable-item-props.js.map +0 -1
  326. package/build-module/components/dataviews-filters/filter-summary.js +0 -218
  327. package/build-module/components/dataviews-filters/filter-summary.js.map +0 -1
  328. package/build-module/dataviews-layouts/utils/get-clickable-item-props.js +0 -30
  329. package/build-module/dataviews-layouts/utils/get-clickable-item-props.js.map +0 -1
  330. package/build-types/components/dataviews-filters/filter-summary.d.ts +0 -14
  331. package/build-types/components/dataviews-filters/filter-summary.d.ts.map +0 -1
  332. package/build-types/dataviews-layouts/utils/get-clickable-item-props.d.ts +0 -19
  333. package/build-types/dataviews-layouts/utils/get-clickable-item-props.d.ts.map +0 -1
  334. package/src/components/dataviews-filters/filter-summary.tsx +0 -338
  335. package/src/dataviews-layouts/utils/get-clickable-item-props.ts +0 -39
@@ -0,0 +1,351 @@
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 Email = ( {
270
+ type,
271
+ labelPosition,
272
+ }: {
273
+ type: 'default' | 'regular' | 'panel';
274
+ labelPosition: 'default' | 'top' | 'side' | 'none';
275
+ } ) => {
276
+ const emailFields = useMemo(
277
+ () => fields.filter( ( field ) => field.type === 'email' ),
278
+ []
279
+ );
280
+
281
+ return (
282
+ <FieldTypeStory
283
+ fields={ emailFields }
284
+ type={ type }
285
+ labelPosition={ labelPosition }
286
+ />
287
+ );
288
+ };
289
+
290
+ export const Media = ( {
291
+ type,
292
+ labelPosition,
293
+ }: {
294
+ type: 'default' | 'regular' | 'panel';
295
+ labelPosition: 'default' | 'top' | 'side' | 'none';
296
+ } ) => {
297
+ const mediaFields = useMemo(
298
+ () => fields.filter( ( field ) => field.type === 'media' ),
299
+ []
300
+ );
301
+
302
+ return (
303
+ <FieldTypeStory
304
+ fields={ mediaFields }
305
+ type={ type }
306
+ labelPosition={ labelPosition }
307
+ />
308
+ );
309
+ };
310
+
311
+ export const Array = ( {
312
+ type,
313
+ labelPosition,
314
+ }: {
315
+ type: 'default' | 'regular' | 'panel';
316
+ labelPosition: 'default' | 'top' | 'side' | 'none';
317
+ } ) => {
318
+ const arrayTextFields = useMemo(
319
+ () => fields.filter( ( field ) => field.type === 'array' ),
320
+ []
321
+ );
322
+
323
+ return (
324
+ <FieldTypeStory
325
+ fields={ arrayTextFields }
326
+ type={ type }
327
+ labelPosition={ labelPosition }
328
+ />
329
+ );
330
+ };
331
+
332
+ export const NoType = ( {
333
+ type,
334
+ labelPosition,
335
+ }: {
336
+ type: 'default' | 'regular' | 'panel';
337
+ labelPosition: 'default' | 'top' | 'side' | 'none';
338
+ } ) => {
339
+ const noTypeFields = useMemo(
340
+ () => fields.filter( ( field ) => field.type === undefined ),
341
+ []
342
+ );
343
+
344
+ return (
345
+ <FieldTypeStory
346
+ fields={ noTypeFields }
347
+ type={ type }
348
+ labelPosition={ labelPosition }
349
+ />
350
+ );
351
+ };
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
+ }
@@ -1,19 +1,110 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { BaseControl, TimePicker, VisuallyHidden } from '@wordpress/components';
4
+ import {
5
+ BaseControl,
6
+ TimePicker,
7
+ VisuallyHidden,
8
+ SelectControl,
9
+ __experimentalNumberControl as NumberControl,
10
+ __experimentalHStack as HStack,
11
+ } from '@wordpress/components';
5
12
  import { useCallback } from '@wordpress/element';
13
+ import { __ } from '@wordpress/i18n';
6
14
 
7
15
  /**
8
16
  * Internal dependencies
9
17
  */
10
18
  import type { DataFormControlProps } from '../types';
19
+ import { OPERATOR_IN_THE_PAST, OPERATOR_OVER } from '../constants';
20
+
21
+ const TIME_UNITS_OPTIONS = {
22
+ [ OPERATOR_IN_THE_PAST ]: [
23
+ { value: 'days', label: __( 'Days' ) },
24
+ { value: 'weeks', label: __( 'Weeks' ) },
25
+ { value: 'months', label: __( 'Months' ) },
26
+ { value: 'years', label: __( 'Years' ) },
27
+ ],
28
+ [ OPERATOR_OVER ]: [
29
+ { value: 'days', label: __( 'Days ago' ) },
30
+ { value: 'weeks', label: __( 'Weeks ago' ) },
31
+ { value: 'months', label: __( 'Months ago' ) },
32
+ { value: 'years', label: __( 'Years ago' ) },
33
+ ],
34
+ };
35
+
36
+ function RelativeDateControls( {
37
+ id,
38
+ value,
39
+ onChange,
40
+ label,
41
+ hideLabelFromVision,
42
+ options,
43
+ }: {
44
+ id: string;
45
+ value: { value?: string | number; unit?: string };
46
+ onChange: ( value: any ) => void;
47
+ label: string;
48
+ hideLabelFromVision?: boolean;
49
+ options: { value: string; label: string }[];
50
+ } ) {
51
+ const { value: relValue = '', unit = options[ 0 ].value } = value;
52
+
53
+ const onChangeValue = useCallback(
54
+ ( newValue: string | undefined ) =>
55
+ onChange( {
56
+ [ id ]: { value: Number( newValue ), unit },
57
+ } ),
58
+ [ id, onChange, unit ]
59
+ );
60
+
61
+ const onChangeUnit = useCallback(
62
+ ( newUnit: string | undefined ) =>
63
+ onChange( {
64
+ [ id ]: { value: relValue, unit: newUnit },
65
+ } ),
66
+ [ id, onChange, relValue ]
67
+ );
68
+
69
+ return (
70
+ <BaseControl
71
+ id={ id }
72
+ __nextHasNoMarginBottom
73
+ className="dataviews-controls__datetime"
74
+ label={ label }
75
+ hideLabelFromVision={ hideLabelFromVision }
76
+ >
77
+ <HStack spacing={ 2.5 }>
78
+ <NumberControl
79
+ __next40pxDefaultSize
80
+ className="dataviews-controls__datetime-number"
81
+ spinControls="none"
82
+ min={ 1 }
83
+ step={ 1 }
84
+ value={ relValue }
85
+ onChange={ onChangeValue }
86
+ />
87
+ <SelectControl
88
+ className="dataviews-controls__datetime-unit"
89
+ __next40pxDefaultSize
90
+ __nextHasNoMarginBottom
91
+ label={ __( 'Unit' ) }
92
+ value={ unit }
93
+ options={ options }
94
+ onChange={ onChangeUnit }
95
+ hideLabelFromVision
96
+ />
97
+ </HStack>
98
+ </BaseControl>
99
+ );
100
+ }
11
101
 
12
102
  export default function DateTime< Item >( {
13
103
  data,
14
104
  field,
15
105
  onChange,
16
106
  hideLabelFromVision,
107
+ operator,
17
108
  }: DataFormControlProps< Item > ) {
18
109
  const { id, label } = field;
19
110
  const value = field.getValue( { item: data } );
@@ -23,6 +114,19 @@ export default function DateTime< Item >( {
23
114
  [ id, onChange ]
24
115
  );
25
116
 
117
+ if ( operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER ) {
118
+ return (
119
+ <RelativeDateControls
120
+ id={ id }
121
+ value={ value && typeof value === 'object' ? value : {} }
122
+ onChange={ onChange }
123
+ label={ label }
124
+ hideLabelFromVision={ hideLabelFromVision }
125
+ options={ TIME_UNITS_OPTIONS[ operator ] }
126
+ />
127
+ );
128
+ }
129
+
26
130
  return (
27
131
  <fieldset className="dataviews-controls__datetime">
28
132
  { ! hideLabelFromVision && (
@@ -34,7 +138,7 @@ export default function DateTime< Item >( {
34
138
  <VisuallyHidden as="legend">{ label }</VisuallyHidden>
35
139
  ) }
36
140
  <TimePicker
37
- currentTime={ value }
141
+ currentTime={ typeof value === 'string' ? value : undefined }
38
142
  onChange={ onChangeControl }
39
143
  hideLabelFromVision
40
144
  />