@wordpress/dataviews 3.0.0 → 4.1.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 (352) hide show
  1. package/CHANGELOG.md +21 -3
  2. package/README.md +19 -4
  3. package/build/components/dataform/index.js +27 -0
  4. package/build/components/dataform/index.js.map +1 -0
  5. package/build/components/dataviews/index.js +126 -0
  6. package/build/components/dataviews/index.js.map +1 -0
  7. package/build/{bulk-actions.js → components/dataviews-bulk-actions/index.js} +42 -16
  8. package/build/components/dataviews-bulk-actions/index.js.map +1 -0
  9. package/build/{bulk-actions-toolbar.js → components/dataviews-bulk-actions-toolbar/index.js} +36 -19
  10. package/build/components/dataviews-bulk-actions-toolbar/index.js.map +1 -0
  11. package/build/components/dataviews-context/index.js +36 -0
  12. package/build/components/dataviews-context/index.js.map +1 -0
  13. package/build/{add-filter.js → components/dataviews-filters/add-filter.js} +35 -18
  14. package/build/components/dataviews-filters/add-filter.js.map +1 -0
  15. package/build/{filter-summary.js → components/dataviews-filters/filter-summary.js} +9 -9
  16. package/build/components/dataviews-filters/filter-summary.js.map +1 -0
  17. package/build/components/dataviews-filters/index.js +164 -0
  18. package/build/components/dataviews-filters/index.js.map +1 -0
  19. package/build/components/dataviews-filters/reset-filters.js.map +1 -0
  20. package/build/{search-widget.js → components/dataviews-filters/search-widget.js} +13 -13
  21. package/build/components/dataviews-filters/search-widget.js.map +1 -0
  22. package/build/{item-actions.js → components/dataviews-item-actions/index.js} +2 -2
  23. package/build/components/dataviews-item-actions/index.js.map +1 -0
  24. package/build/components/dataviews-layout/index.js +53 -0
  25. package/build/components/dataviews-layout/index.js.map +1 -0
  26. package/build/{pagination.js → components/dataviews-pagination/index.js} +16 -13
  27. package/build/components/dataviews-pagination/index.js.map +1 -0
  28. package/build/{search.js → components/dataviews-search/index.js} +18 -11
  29. package/build/components/dataviews-search/index.js.map +1 -0
  30. package/build/{single-selection-checkbox.js → components/dataviews-selection-checkbox/index.js} +6 -6
  31. package/build/components/dataviews-selection-checkbox/index.js.map +1 -0
  32. package/build/components/dataviews-view-config/index.js +298 -0
  33. package/build/components/dataviews-view-config/index.js.map +1 -0
  34. package/build/constants.js +6 -1
  35. package/build/constants.js.map +1 -1
  36. package/build/dataforms-layouts/index.js +24 -0
  37. package/build/dataforms-layouts/index.js.map +1 -0
  38. package/build/dataforms-layouts/panel/index.js +129 -0
  39. package/build/dataforms-layouts/panel/index.js.map +1 -0
  40. package/build/dataforms-layouts/regular/index.js +39 -0
  41. package/build/dataforms-layouts/regular/index.js.map +1 -0
  42. package/build/dataviews-layouts/grid/density-picker.js +143 -0
  43. package/build/dataviews-layouts/grid/density-picker.js.map +1 -0
  44. package/build/{view-grid.js → dataviews-layouts/grid/index.js} +40 -41
  45. package/build/dataviews-layouts/grid/index.js.map +1 -0
  46. package/build/dataviews-layouts/index.js +52 -0
  47. package/build/dataviews-layouts/index.js.map +1 -0
  48. package/build/{view-list.js → dataviews-layouts/list/index.js} +26 -23
  49. package/build/dataviews-layouts/list/index.js.map +1 -0
  50. package/build/dataviews-layouts/table/column-header-menu.js +196 -0
  51. package/build/dataviews-layouts/table/column-header-menu.js.map +1 -0
  52. package/build/dataviews-layouts/table/index.js +350 -0
  53. package/build/dataviews-layouts/table/index.js.map +1 -0
  54. package/build/field-types/index.js +46 -0
  55. package/build/field-types/index.js.map +1 -0
  56. package/build/field-types/integer.js +94 -0
  57. package/build/field-types/integer.js.map +1 -0
  58. package/build/field-types/text.js +87 -0
  59. package/build/field-types/text.js.map +1 -0
  60. package/build/filter-and-sort-data-view.js +2 -11
  61. package/build/filter-and-sort-data-view.js.map +1 -1
  62. package/build/index.js +11 -4
  63. package/build/index.js.map +1 -1
  64. package/build/normalize-fields.js +36 -2
  65. package/build/normalize-fields.js.map +1 -1
  66. package/build/types.js.map +1 -1
  67. package/build/validation.js +22 -0
  68. package/build/validation.js.map +1 -0
  69. package/build-module/components/dataform/index.js +21 -0
  70. package/build-module/components/dataform/index.js.map +1 -0
  71. package/build-module/components/dataviews/index.js +117 -0
  72. package/build-module/components/dataviews/index.js.map +1 -0
  73. package/build-module/{bulk-actions.js → components/dataviews-bulk-actions/index.js} +42 -17
  74. package/build-module/components/dataviews-bulk-actions/index.js.map +1 -0
  75. package/build-module/{bulk-actions-toolbar.js → components/dataviews-bulk-actions-toolbar/index.js} +35 -19
  76. package/build-module/components/dataviews-bulk-actions-toolbar/index.js.map +1 -0
  77. package/build-module/components/dataviews-context/index.js +30 -0
  78. package/build-module/components/dataviews-context/index.js.map +1 -0
  79. package/build-module/{add-filter.js → components/dataviews-filters/add-filter.js} +34 -18
  80. package/build-module/components/dataviews-filters/add-filter.js.map +1 -0
  81. package/build-module/{filter-summary.js → components/dataviews-filters/filter-summary.js} +9 -9
  82. package/build-module/components/dataviews-filters/filter-summary.js.map +1 -0
  83. package/build-module/components/dataviews-filters/index.js +153 -0
  84. package/build-module/components/dataviews-filters/index.js.map +1 -0
  85. package/build-module/components/dataviews-filters/reset-filters.js.map +1 -0
  86. package/build-module/{search-widget.js → components/dataviews-filters/search-widget.js} +13 -13
  87. package/build-module/components/dataviews-filters/search-widget.js.map +1 -0
  88. package/build-module/{item-actions.js → components/dataviews-item-actions/index.js} +2 -2
  89. package/build-module/components/dataviews-item-actions/index.js.map +1 -0
  90. package/build-module/components/dataviews-layout/index.js +45 -0
  91. package/build-module/components/dataviews-layout/index.js.map +1 -0
  92. package/build-module/{pagination.js → components/dataviews-pagination/index.js} +17 -15
  93. package/build-module/components/dataviews-pagination/index.js.map +1 -0
  94. package/build-module/{search.js → components/dataviews-search/index.js} +18 -12
  95. package/build-module/components/dataviews-search/index.js.map +1 -0
  96. package/build-module/{single-selection-checkbox.js → components/dataviews-selection-checkbox/index.js} +5 -5
  97. package/build-module/components/dataviews-selection-checkbox/index.js.map +1 -0
  98. package/build-module/components/dataviews-view-config/index.js +292 -0
  99. package/build-module/components/dataviews-view-config/index.js.map +1 -0
  100. package/build-module/constants.js +5 -0
  101. package/build-module/constants.js.map +1 -1
  102. package/build-module/dataforms-layouts/index.js +16 -0
  103. package/build-module/dataforms-layouts/index.js.map +1 -0
  104. package/build-module/dataforms-layouts/panel/index.js +124 -0
  105. package/build-module/dataforms-layouts/panel/index.js.map +1 -0
  106. package/build-module/dataforms-layouts/regular/index.js +32 -0
  107. package/build-module/dataforms-layouts/regular/index.js.map +1 -0
  108. package/build-module/dataviews-layouts/grid/density-picker.js +138 -0
  109. package/build-module/dataviews-layouts/grid/density-picker.js.map +1 -0
  110. package/build-module/{view-grid.js → dataviews-layouts/grid/index.js} +38 -39
  111. package/build-module/dataviews-layouts/grid/index.js.map +1 -0
  112. package/build-module/dataviews-layouts/index.js +43 -0
  113. package/build-module/dataviews-layouts/index.js.map +1 -0
  114. package/build-module/{view-list.js → dataviews-layouts/list/index.js} +24 -21
  115. package/build-module/dataviews-layouts/list/index.js.map +1 -0
  116. package/build-module/dataviews-layouts/table/column-header-menu.js +190 -0
  117. package/build-module/dataviews-layouts/table/column-header-menu.js.map +1 -0
  118. package/build-module/dataviews-layouts/table/index.js +344 -0
  119. package/build-module/dataviews-layouts/table/index.js.map +1 -0
  120. package/build-module/field-types/index.js +40 -0
  121. package/build-module/field-types/index.js.map +1 -0
  122. package/build-module/field-types/integer.js +87 -0
  123. package/build-module/field-types/integer.js.map +1 -0
  124. package/build-module/field-types/text.js +80 -0
  125. package/build-module/field-types/text.js.map +1 -0
  126. package/build-module/filter-and-sort-data-view.js +2 -11
  127. package/build-module/filter-and-sort-data-view.js.map +1 -1
  128. package/build-module/index.js +4 -3
  129. package/build-module/index.js.map +1 -1
  130. package/build-module/normalize-fields.js +35 -3
  131. package/build-module/normalize-fields.js.map +1 -1
  132. package/build-module/types.js.map +1 -1
  133. package/build-module/validation.js +15 -0
  134. package/build-module/validation.js.map +1 -0
  135. package/build-style/style-rtl.css +763 -532
  136. package/build-style/style.css +763 -532
  137. package/build-types/components/dataform/index.d.ts +6 -0
  138. package/build-types/components/dataform/index.d.ts.map +1 -0
  139. package/build-types/components/dataform/stories/index.story.d.ts +22 -0
  140. package/build-types/components/dataform/stories/index.story.d.ts.map +1 -0
  141. package/build-types/{dataviews.d.ts → components/dataviews/index.d.ts} +9 -7
  142. package/build-types/components/dataviews/index.d.ts.map +1 -0
  143. package/build-types/{stories → components/dataviews/stories}/fixtures.d.ts +13 -19
  144. package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -0
  145. package/build-types/components/dataviews/stories/index.story.d.ts +46 -0
  146. package/build-types/components/dataviews/stories/index.story.d.ts.map +1 -0
  147. package/build-types/components/dataviews-bulk-actions/index.d.ts +5 -0
  148. package/build-types/components/dataviews-bulk-actions/index.d.ts.map +1 -0
  149. package/build-types/components/dataviews-bulk-actions-toolbar/index.d.ts +2 -0
  150. package/build-types/components/dataviews-bulk-actions-toolbar/index.d.ts.map +1 -0
  151. package/build-types/components/dataviews-context/index.d.ts +26 -0
  152. package/build-types/components/dataviews-context/index.d.ts.map +1 -0
  153. package/build-types/{add-filter.d.ts → components/dataviews-filters/add-filter.d.ts} +4 -2
  154. package/build-types/components/dataviews-filters/add-filter.d.ts.map +1 -0
  155. package/build-types/{filter-summary.d.ts → components/dataviews-filters/filter-summary.d.ts} +1 -1
  156. package/build-types/components/dataviews-filters/filter-summary.d.ts.map +1 -0
  157. package/build-types/components/dataviews-filters/index.d.ts +14 -0
  158. package/build-types/components/dataviews-filters/index.d.ts.map +1 -0
  159. package/build-types/{reset-filters.d.ts → components/dataviews-filters/reset-filters.d.ts} +1 -2
  160. package/build-types/components/dataviews-filters/reset-filters.d.ts.map +1 -0
  161. package/build-types/{search-widget.d.ts → components/dataviews-filters/search-widget.d.ts} +1 -2
  162. package/build-types/components/dataviews-filters/search-widget.d.ts.map +1 -0
  163. package/build-types/{item-actions.d.ts → components/dataviews-item-actions/index.d.ts} +2 -2
  164. package/build-types/components/dataviews-item-actions/index.d.ts.map +1 -0
  165. package/build-types/components/dataviews-layout/index.d.ts +2 -0
  166. package/build-types/components/dataviews-layout/index.d.ts.map +1 -0
  167. package/build-types/components/dataviews-pagination/index.d.ts +4 -0
  168. package/build-types/components/dataviews-pagination/index.d.ts.map +1 -0
  169. package/build-types/components/dataviews-search/index.d.ts +6 -0
  170. package/build-types/components/dataviews-search/index.d.ts.map +1 -0
  171. package/build-types/components/dataviews-selection-checkbox/index.d.ts +16 -0
  172. package/build-types/components/dataviews-selection-checkbox/index.d.ts.map +1 -0
  173. package/build-types/components/dataviews-view-config/index.d.ts +8 -0
  174. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -0
  175. package/build-types/constants.d.ts +4 -0
  176. package/build-types/constants.d.ts.map +1 -1
  177. package/build-types/dataforms-layouts/index.d.ts +9 -0
  178. package/build-types/dataforms-layouts/index.d.ts.map +1 -0
  179. package/build-types/dataforms-layouts/panel/index.d.ts +3 -0
  180. package/build-types/dataforms-layouts/panel/index.d.ts.map +1 -0
  181. package/build-types/dataforms-layouts/regular/index.d.ts +3 -0
  182. package/build-types/dataforms-layouts/regular/index.d.ts.map +1 -0
  183. package/build-types/dataviews-layouts/grid/density-picker.d.ts +5 -0
  184. package/build-types/dataviews-layouts/grid/density-picker.d.ts.map +1 -0
  185. package/build-types/dataviews-layouts/grid/index.d.ts +3 -0
  186. package/build-types/dataviews-layouts/grid/index.d.ts.map +1 -0
  187. package/build-types/{layouts.d.ts → dataviews-layouts/index.d.ts} +6 -5
  188. package/build-types/dataviews-layouts/index.d.ts.map +1 -0
  189. package/build-types/dataviews-layouts/list/index.d.ts +3 -0
  190. package/build-types/dataviews-layouts/list/index.d.ts.map +1 -0
  191. package/build-types/dataviews-layouts/table/column-header-menu.d.ts +17 -0
  192. package/build-types/dataviews-layouts/table/column-header-menu.d.ts.map +1 -0
  193. package/build-types/dataviews-layouts/table/index.d.ts +4 -0
  194. package/build-types/dataviews-layouts/table/index.d.ts.map +1 -0
  195. package/build-types/field-types/index.d.ts +20 -0
  196. package/build-types/field-types/index.d.ts.map +1 -0
  197. package/build-types/field-types/integer.d.ts +14 -0
  198. package/build-types/field-types/integer.d.ts.map +1 -0
  199. package/build-types/field-types/text.d.ts +14 -0
  200. package/build-types/field-types/text.d.ts.map +1 -0
  201. package/build-types/filter-and-sort-data-view.d.ts.map +1 -1
  202. package/build-types/index.d.ts +4 -3
  203. package/build-types/index.d.ts.map +1 -1
  204. package/build-types/normalize-fields.d.ts +0 -3
  205. package/build-types/normalize-fields.d.ts.map +1 -1
  206. package/build-types/types.d.ts +73 -19
  207. package/build-types/types.d.ts.map +1 -1
  208. package/build-types/validation.d.ts +3 -0
  209. package/build-types/validation.d.ts.map +1 -0
  210. package/package.json +12 -11
  211. package/src/components/dataform/index.tsx +17 -0
  212. package/src/components/dataform/stories/index.story.tsx +79 -0
  213. package/src/components/dataviews/index.tsx +161 -0
  214. package/src/{stories → components/dataviews/stories}/fixtures.js +8 -11
  215. package/src/{stories → components/dataviews/stories}/index.story.js +17 -3
  216. package/src/components/dataviews/style.scss +100 -0
  217. package/src/{bulk-actions.tsx → components/dataviews-bulk-actions/index.tsx} +51 -29
  218. package/src/components/dataviews-bulk-actions/style.scss +7 -0
  219. package/src/{bulk-actions-toolbar.tsx → components/dataviews-bulk-actions-toolbar/index.tsx} +42 -30
  220. package/src/components/dataviews-bulk-actions-toolbar/style.scss +45 -0
  221. package/src/components/dataviews-context/index.ts +49 -0
  222. package/src/{add-filter.tsx → components/dataviews-filters/add-filter.tsx} +39 -23
  223. package/src/{filter-summary.tsx → components/dataviews-filters/filter-summary.tsx} +18 -10
  224. package/src/components/dataviews-filters/index.tsx +199 -0
  225. package/src/{reset-filters.tsx → components/dataviews-filters/reset-filters.tsx} +1 -1
  226. package/src/{search-widget.tsx → components/dataviews-filters/search-widget.tsx} +14 -14
  227. package/src/components/dataviews-filters/style.scss +282 -0
  228. package/src/{item-actions.tsx → components/dataviews-item-actions/index.tsx} +2 -2
  229. package/src/components/dataviews-item-actions/style.scss +3 -0
  230. package/src/components/dataviews-layout/index.tsx +51 -0
  231. package/src/{pagination.tsx → components/dataviews-pagination/index.tsx} +13 -21
  232. package/src/components/dataviews-pagination/style.scss +26 -0
  233. package/src/{search.tsx → components/dataviews-search/index.tsx} +13 -15
  234. package/src/{single-selection-checkbox.tsx → components/dataviews-selection-checkbox/index.tsx} +9 -9
  235. package/src/components/dataviews-selection-checkbox/style.scss +14 -0
  236. package/src/components/dataviews-view-config/index.tsx +358 -0
  237. package/src/components/dataviews-view-config/style.scss +44 -0
  238. package/src/constants.ts +5 -0
  239. package/src/dataforms-layouts/index.tsx +20 -0
  240. package/src/dataforms-layouts/panel/index.tsx +164 -0
  241. package/src/dataforms-layouts/panel/style.scss +59 -0
  242. package/src/dataforms-layouts/regular/index.tsx +41 -0
  243. package/src/dataviews-layouts/grid/density-picker.tsx +136 -0
  244. package/src/{view-grid.tsx → dataviews-layouts/grid/index.tsx} +35 -36
  245. package/src/dataviews-layouts/grid/style.scss +169 -0
  246. package/src/dataviews-layouts/index.ts +66 -0
  247. package/src/{view-list.tsx → dataviews-layouts/list/index.tsx} +30 -17
  248. package/src/dataviews-layouts/list/style.scss +192 -0
  249. package/src/dataviews-layouts/table/column-header-menu.tsx +268 -0
  250. package/src/dataviews-layouts/table/index.tsx +471 -0
  251. package/src/dataviews-layouts/table/style.scss +201 -0
  252. package/src/field-types/index.tsx +45 -0
  253. package/src/field-types/integer.tsx +103 -0
  254. package/src/field-types/text.tsx +95 -0
  255. package/src/filter-and-sort-data-view.ts +1 -15
  256. package/src/index.ts +4 -3
  257. package/src/normalize-fields.ts +45 -4
  258. package/src/style.scss +14 -907
  259. package/src/test/filter-and-sort-data-view.js +47 -4
  260. package/src/test/validation.ts +131 -0
  261. package/src/types.ts +88 -17
  262. package/src/validation.ts +18 -0
  263. package/tsconfig.json +2 -1
  264. package/tsconfig.tsbuildinfo +1 -1
  265. package/build/add-filter.js.map +0 -1
  266. package/build/bulk-actions-toolbar.js.map +0 -1
  267. package/build/bulk-actions.js.map +0 -1
  268. package/build/dataform.js +0 -78
  269. package/build/dataform.js.map +0 -1
  270. package/build/dataviews.js +0 -125
  271. package/build/dataviews.js.map +0 -1
  272. package/build/filter-summary.js.map +0 -1
  273. package/build/filters.js +0 -102
  274. package/build/filters.js.map +0 -1
  275. package/build/item-actions.js.map +0 -1
  276. package/build/layouts.js +0 -38
  277. package/build/layouts.js.map +0 -1
  278. package/build/pagination.js.map +0 -1
  279. package/build/reset-filters.js.map +0 -1
  280. package/build/search-widget.js.map +0 -1
  281. package/build/search.js.map +0 -1
  282. package/build/single-selection-checkbox.js.map +0 -1
  283. package/build/view-actions.js +0 -260
  284. package/build/view-actions.js.map +0 -1
  285. package/build/view-grid.js.map +0 -1
  286. package/build/view-list.js.map +0 -1
  287. package/build/view-table.js +0 -400
  288. package/build/view-table.js.map +0 -1
  289. package/build-module/add-filter.js.map +0 -1
  290. package/build-module/bulk-actions-toolbar.js.map +0 -1
  291. package/build-module/bulk-actions.js.map +0 -1
  292. package/build-module/dataform.js +0 -72
  293. package/build-module/dataform.js.map +0 -1
  294. package/build-module/dataviews.js +0 -116
  295. package/build-module/dataviews.js.map +0 -1
  296. package/build-module/filter-summary.js.map +0 -1
  297. package/build-module/filters.js +0 -94
  298. package/build-module/filters.js.map +0 -1
  299. package/build-module/item-actions.js.map +0 -1
  300. package/build-module/layouts.js +0 -30
  301. package/build-module/layouts.js.map +0 -1
  302. package/build-module/pagination.js.map +0 -1
  303. package/build-module/reset-filters.js.map +0 -1
  304. package/build-module/search-widget.js.map +0 -1
  305. package/build-module/search.js.map +0 -1
  306. package/build-module/single-selection-checkbox.js.map +0 -1
  307. package/build-module/view-actions.js +0 -255
  308. package/build-module/view-actions.js.map +0 -1
  309. package/build-module/view-grid.js.map +0 -1
  310. package/build-module/view-list.js.map +0 -1
  311. package/build-module/view-table.js +0 -393
  312. package/build-module/view-table.js.map +0 -1
  313. package/build-types/add-filter.d.ts.map +0 -1
  314. package/build-types/bulk-actions-toolbar.d.ts +0 -13
  315. package/build-types/bulk-actions-toolbar.d.ts.map +0 -1
  316. package/build-types/bulk-actions.d.ts +0 -15
  317. package/build-types/bulk-actions.d.ts.map +0 -1
  318. package/build-types/dataform.d.ts +0 -17
  319. package/build-types/dataform.d.ts.map +0 -1
  320. package/build-types/dataviews.d.ts.map +0 -1
  321. package/build-types/filter-summary.d.ts.map +0 -1
  322. package/build-types/filters.d.ts +0 -13
  323. package/build-types/filters.d.ts.map +0 -1
  324. package/build-types/item-actions.d.ts.map +0 -1
  325. package/build-types/layouts.d.ts.map +0 -1
  326. package/build-types/pagination.d.ts +0 -16
  327. package/build-types/pagination.d.ts.map +0 -1
  328. package/build-types/reset-filters.d.ts.map +0 -1
  329. package/build-types/search-widget.d.ts.map +0 -1
  330. package/build-types/search.d.ts +0 -13
  331. package/build-types/search.d.ts.map +0 -1
  332. package/build-types/single-selection-checkbox.d.ts +0 -17
  333. package/build-types/single-selection-checkbox.d.ts.map +0 -1
  334. package/build-types/stories/fixtures.d.ts.map +0 -1
  335. package/build-types/stories/index.story.d.ts +0 -29
  336. package/build-types/stories/index.story.d.ts.map +0 -1
  337. package/build-types/view-actions.d.ts +0 -12
  338. package/build-types/view-actions.d.ts.map +0 -1
  339. package/build-types/view-grid.d.ts +0 -4
  340. package/build-types/view-grid.d.ts.map +0 -1
  341. package/build-types/view-list.d.ts +0 -4
  342. package/build-types/view-list.d.ts.map +0 -1
  343. package/build-types/view-table.d.ts +0 -5
  344. package/build-types/view-table.d.ts.map +0 -1
  345. package/src/dataform.tsx +0 -106
  346. package/src/dataviews.tsx +0 -183
  347. package/src/filters.tsx +0 -125
  348. package/src/layouts.ts +0 -39
  349. package/src/view-actions.tsx +0 -350
  350. package/src/view-table.tsx +0 -592
  351. /package/build/{reset-filters.js → components/dataviews-filters/reset-filters.js} +0 -0
  352. /package/build-module/{reset-filters.js → components/dataviews-filters/reset-filters.js} +0 -0
@@ -2,7 +2,7 @@
2
2
  * Internal dependencies
3
3
  */
4
4
  import { filterSortAndPaginate } from '../filter-and-sort-data-view';
5
- import { data, fields } from '../stories/fixtures';
5
+ import { data, fields } from '../components/dataviews/stories/fixtures';
6
6
 
7
7
  describe( 'filters', () => {
8
8
  it( 'should return empty if the data is empty', () => {
@@ -233,7 +233,22 @@ describe( 'filters', () => {
233
233
  } );
234
234
 
235
235
  describe( 'sorting', () => {
236
- it( 'should sort by string', () => {
236
+ it( 'should sort integer field types', () => {
237
+ const { data: result } = filterSortAndPaginate(
238
+ data,
239
+ {
240
+ sort: { field: 'satellites', direction: 'desc' },
241
+ },
242
+ fields
243
+ );
244
+
245
+ expect( result ).toHaveLength( 11 );
246
+ expect( result[ 0 ].title ).toBe( 'Saturn' );
247
+ expect( result[ 1 ].title ).toBe( 'Jupiter' );
248
+ expect( result[ 2 ].title ).toBe( 'Uranus' );
249
+ } );
250
+
251
+ it( 'should sort text field types', () => {
237
252
  const { data: result } = filterSortAndPaginate(
238
253
  data,
239
254
  {
@@ -253,13 +268,18 @@ describe( 'sorting', () => {
253
268
  expect( result[ 1 ].title ).toBe( 'Neptune' );
254
269
  } );
255
270
 
256
- it( 'should sort by number', () => {
271
+ it( 'should sort untyped fields if the value is a number', () => {
257
272
  const { data: result } = filterSortAndPaginate(
258
273
  data,
259
274
  {
260
275
  sort: { field: 'satellites', direction: 'desc' },
261
276
  },
262
- fields
277
+ // Remove type information for satellites field to test sorting untyped fields.
278
+ fields.map( ( field ) =>
279
+ field.id === 'satellites'
280
+ ? { ...field, type: undefined }
281
+ : field
282
+ )
263
283
  );
264
284
 
265
285
  expect( result ).toHaveLength( 11 );
@@ -267,6 +287,29 @@ describe( 'sorting', () => {
267
287
  expect( result[ 1 ].title ).toBe( 'Jupiter' );
268
288
  expect( result[ 2 ].title ).toBe( 'Uranus' );
269
289
  } );
290
+
291
+ it( 'should sort untyped fields if the value is string', () => {
292
+ const { data: result } = filterSortAndPaginate(
293
+ data,
294
+ {
295
+ sort: { field: 'title', direction: 'desc' },
296
+ filters: [
297
+ {
298
+ field: 'type',
299
+ operator: 'isAny',
300
+ value: [ 'Ice giant' ],
301
+ },
302
+ ],
303
+ },
304
+ // Remove type information for the title field to test sorting untyped fields.
305
+ fields.map( ( field ) =>
306
+ field.id === 'title' ? { ...field, type: undefined } : field
307
+ )
308
+ );
309
+ expect( result ).toHaveLength( 2 );
310
+ expect( result[ 0 ].title ).toBe( 'Uranus' );
311
+ expect( result[ 1 ].title ).toBe( 'Neptune' );
312
+ } );
270
313
  } );
271
314
 
272
315
  describe( 'pagination', () => {
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import { isItemValid } from '../validation';
5
+ import type { Field } from '../types';
6
+
7
+ describe( 'validation', () => {
8
+ it( 'fields not visible in form are not validated', () => {
9
+ const item = { id: 1, valid_order: 2, invalid_order: 'd' };
10
+ const fields: Field< {} >[] = [
11
+ {
12
+ id: 'valid_order',
13
+ type: 'integer',
14
+ },
15
+ {
16
+ id: 'invalid_order',
17
+ type: 'integer',
18
+ },
19
+ ];
20
+ const form = { fields: [ 'valid_order' ] };
21
+ const result = isItemValid( item, fields, form );
22
+ expect( result ).toBe( true );
23
+ } );
24
+
25
+ it( 'integer field is valid if value is integer', () => {
26
+ const item = { id: 1, order: 2, title: 'hi' };
27
+ const fields: Field< {} >[] = [
28
+ {
29
+ type: 'integer',
30
+ id: 'order',
31
+ },
32
+ ];
33
+ const form = { fields: [ 'order' ] };
34
+ const result = isItemValid( item, fields, form );
35
+ expect( result ).toBe( true );
36
+ } );
37
+
38
+ it( 'integer field is invalid if value is not integer', () => {
39
+ const item = { id: 1, order: 'd' };
40
+ const fields: Field< {} >[] = [
41
+ {
42
+ id: 'order',
43
+ type: 'integer',
44
+ },
45
+ ];
46
+ const form = { fields: [ 'order' ] };
47
+ const result = isItemValid( item, fields, form );
48
+ expect( result ).toBe( false );
49
+ } );
50
+
51
+ it( 'integer field is invalid if value is empty', () => {
52
+ const item = { id: 1, order: '' };
53
+ const fields: Field< {} >[] = [
54
+ {
55
+ id: 'order',
56
+ type: 'integer',
57
+ },
58
+ ];
59
+ const form = { fields: [ 'order' ] };
60
+ const result = isItemValid( item, fields, form );
61
+ expect( result ).toBe( false );
62
+ } );
63
+
64
+ it( 'integer field is invalid if value is not one of the elements', () => {
65
+ const item = { id: 1, author: 3 };
66
+ const fields: Field< {} >[] = [
67
+ {
68
+ id: 'author',
69
+ type: 'integer',
70
+ elements: [
71
+ { value: 1, label: 'Jane' },
72
+ { value: 2, label: 'John' },
73
+ ],
74
+ },
75
+ ];
76
+ const form = { fields: [ 'author' ] };
77
+ const result = isItemValid( item, fields, form );
78
+ expect( result ).toBe( false );
79
+ } );
80
+
81
+ it( 'text field is invalid if value is not one of the elements', () => {
82
+ const item = { id: 1, author: 'not-in-elements' };
83
+ const fields: Field< {} >[] = [
84
+ {
85
+ id: 'author',
86
+ type: 'text',
87
+ elements: [
88
+ { value: 'jane', label: 'Jane' },
89
+ { value: 'john', label: 'John' },
90
+ ],
91
+ },
92
+ ];
93
+ const form = { fields: [ 'author' ] };
94
+ const result = isItemValid( item, fields, form );
95
+ expect( result ).toBe( false );
96
+ } );
97
+
98
+ it( 'untyped field is invalid if value is not one of the elements', () => {
99
+ const item = { id: 1, author: 'not-in-elements' };
100
+ const fields: Field< {} >[] = [
101
+ {
102
+ id: 'author',
103
+ elements: [
104
+ { value: 'jane', label: 'Jane' },
105
+ { value: 'john', label: 'John' },
106
+ ],
107
+ },
108
+ ];
109
+ const form = { fields: [ 'author' ] };
110
+ const result = isItemValid( item, fields, form );
111
+ expect( result ).toBe( false );
112
+ } );
113
+
114
+ it( 'fields can provide its own isValid function', () => {
115
+ const item = { id: 1, order: 'd' };
116
+ const fields: Field< {} >[] = [
117
+ {
118
+ id: 'order',
119
+ type: 'integer',
120
+ elements: [
121
+ { value: 'a', label: 'A' },
122
+ { value: 'b', label: 'B' },
123
+ ],
124
+ isValid: () => true, // Overrides the validation provided for integer types.
125
+ },
126
+ ];
127
+ const form = { fields: [ 'order' ] };
128
+ const result = isItemValid( item, fields, form );
129
+ expect( result ).toBe( true );
130
+ } );
131
+ } );
package/src/types.ts CHANGED
@@ -1,7 +1,12 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import type { ReactElement, ReactNode } from 'react';
4
+ import type {
5
+ ReactElement,
6
+ ComponentType,
7
+ Dispatch,
8
+ SetStateAction,
9
+ } from 'react';
5
10
 
6
11
  /**
7
12
  * Internal dependencies
@@ -44,7 +49,11 @@ export type Operator =
44
49
 
45
50
  export type ItemRecord = Record< string, unknown >;
46
51
 
47
- export type FieldType = 'text';
52
+ export type FieldType = 'text' | 'integer';
53
+
54
+ export type ValidationContext = {
55
+ elements?: Option[];
56
+ };
48
57
 
49
58
  /**
50
59
  * A dataview field for a specific property of a data type.
@@ -63,7 +72,12 @@ export type Field< Item > = {
63
72
  /**
64
73
  * The label of the field. Defaults to the id.
65
74
  */
66
- header?: string;
75
+ label?: string;
76
+
77
+ /**
78
+ * A description of the field.
79
+ */
80
+ description?: string;
67
81
 
68
82
  /**
69
83
  * Placeholder for the field.
@@ -73,22 +87,22 @@ export type Field< Item > = {
73
87
  /**
74
88
  * Callback used to render the field. Defaults to `field.getValue`.
75
89
  */
76
- render?: ( args: { item: Item } ) => ReactNode;
90
+ render?: ComponentType< { item: Item } >;
77
91
 
78
92
  /**
79
- * The width of the field column.
93
+ * Callback used to render an edit control for the field.
80
94
  */
81
- width?: string | number;
95
+ Edit?: ComponentType< DataFormControlProps< Item > >;
82
96
 
83
97
  /**
84
- * The minimum width of the field column.
98
+ * Callback used to sort the field.
85
99
  */
86
- maxWidth?: string | number;
100
+ sort?: ( a: Item, b: Item, direction: SortDirection ) => number;
87
101
 
88
102
  /**
89
- * The maximum width of the field column.
103
+ * Callback used to validate the field.
90
104
  */
91
- minWidth?: string | number;
105
+ isValid?: ( item: Item, context?: ValidationContext ) => boolean;
92
106
 
93
107
  /**
94
108
  * Whether the field is sortable.
@@ -131,9 +145,12 @@ export type Field< Item > = {
131
145
  } );
132
146
 
133
147
  export type NormalizedField< Item > = Field< Item > & {
134
- header: string;
148
+ label: string;
135
149
  getValue: ( args: { item: Item } ) => any;
136
- render: ( args: { item: Item } ) => ReactNode;
150
+ render: ComponentType< { item: Item } >;
151
+ Edit: ComponentType< DataFormControlProps< Item > >;
152
+ sort: ( a: Item, b: Item, direction: SortDirection ) => number;
153
+ isValid: ( item: Item, context?: ValidationContext ) => boolean;
137
154
  };
138
155
 
139
156
  /**
@@ -147,7 +164,15 @@ export type Data< Item > = Item[];
147
164
  * The form configuration.
148
165
  */
149
166
  export type Form = {
150
- visibleFields?: string[];
167
+ type?: 'regular' | 'panel';
168
+ fields?: string[];
169
+ };
170
+
171
+ export type DataFormControlProps< Item > = {
172
+ data: Item;
173
+ field: NormalizedField< Item >;
174
+ onChange: Dispatch< SetStateAction< Item > >;
175
+ hideLabelFromVision?: boolean;
151
176
  };
152
177
 
153
178
  /**
@@ -249,11 +274,44 @@ interface ViewBase {
249
274
  perPage?: number;
250
275
 
251
276
  /**
252
- * The hidden fields.
277
+ * The fields to render
253
278
  */
254
279
  fields?: string[];
255
280
  }
256
281
 
282
+ export interface CombinedField {
283
+ id: string;
284
+
285
+ label: string;
286
+
287
+ /**
288
+ * The fields to use as columns.
289
+ */
290
+ children: string[];
291
+
292
+ /**
293
+ * The direction of the stack.
294
+ */
295
+ direction: 'horizontal' | 'vertical';
296
+ }
297
+
298
+ export interface ColumnStyle {
299
+ /**
300
+ * The width of the field column.
301
+ */
302
+ width?: string | number;
303
+
304
+ /**
305
+ * The minimum width of the field column.
306
+ */
307
+ maxWidth?: string | number;
308
+
309
+ /**
310
+ * The maximum width of the field column.
311
+ */
312
+ minWidth?: string | number;
313
+ }
314
+
257
315
  export interface ViewTable extends ViewBase {
258
316
  type: 'table';
259
317
 
@@ -264,9 +322,14 @@ export interface ViewTable extends ViewBase {
264
322
  primaryField?: string;
265
323
 
266
324
  /**
267
- * The field to use as the media field.
325
+ * The fields to use as columns.
268
326
  */
269
- mediaField?: string;
327
+ combinedFields?: CombinedField[];
328
+
329
+ /**
330
+ * The styles for the columns.
331
+ */
332
+ styles?: Record< string, ColumnStyle >;
270
333
  };
271
334
  }
272
335
 
@@ -407,10 +470,11 @@ export interface ViewBaseProps< Item > {
407
470
  getItemId: ( item: Item ) => string;
408
471
  isLoading?: boolean;
409
472
  onChangeView: ( view: View ) => void;
410
- onSelectionChange: SetSelection;
473
+ onChangeSelection: SetSelection;
411
474
  selection: string[];
412
475
  setOpenedFilter: ( fieldId: string ) => void;
413
476
  view: View;
477
+ density: number;
414
478
  }
415
479
 
416
480
  export interface ViewTableProps< Item > extends ViewBaseProps< Item > {
@@ -435,3 +499,10 @@ export interface SupportedLayouts {
435
499
  grid?: Omit< ViewGrid, 'type' >;
436
500
  table?: Omit< ViewTable, 'type' >;
437
501
  }
502
+
503
+ export interface DataFormProps< Item > {
504
+ data: Item;
505
+ fields: Field< Item >[];
506
+ form: Form;
507
+ onChange: Dispatch< SetStateAction< Item > >;
508
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import { normalizeFields } from './normalize-fields';
5
+ import type { Field, Form } from './types';
6
+
7
+ export function isItemValid< Item >(
8
+ item: Item,
9
+ fields: Field< Item >[],
10
+ form: Form
11
+ ): boolean {
12
+ const _fields = normalizeFields(
13
+ fields.filter( ( { id } ) => !! form.fields?.includes( id ) )
14
+ );
15
+ return _fields.every( ( field ) => {
16
+ return field.isValid( item, { elements: field.elements } );
17
+ } );
18
+ }
package/tsconfig.json CHANGED
@@ -14,7 +14,8 @@
14
14
  { "path": "../i18n" },
15
15
  { "path": "../icons" },
16
16
  { "path": "../primitives" },
17
- { "path": "../private-apis" }
17
+ { "path": "../private-apis" },
18
+ { "path": "../warning" }
18
19
  ],
19
20
  "include": [ "src" ]
20
21
  }