@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
@@ -6,10 +6,10 @@ import { useState, useMemo } from '@wordpress/element';
6
6
  /**
7
7
  * Internal dependencies
8
8
  */
9
- import { DataViews } from '../index';
9
+ import DataViews from '../index';
10
10
  import { DEFAULT_VIEW, actions, data, fields } from './fixtures';
11
- import { LAYOUT_GRID, LAYOUT_TABLE } from '../constants';
12
- import { filterSortAndPaginate } from '../filter-and-sort-data-view';
11
+ import { LAYOUT_GRID, LAYOUT_TABLE } from '../../../constants';
12
+ import { filterSortAndPaginate } from '../../../filter-and-sort-data-view';
13
13
 
14
14
  const meta = {
15
15
  title: 'DataViews/DataViews',
@@ -39,6 +39,20 @@ Default.args = {
39
39
  [ LAYOUT_TABLE ]: {
40
40
  layout: {
41
41
  primaryField: 'title',
42
+ styles: {
43
+ image: {
44
+ width: 50,
45
+ },
46
+ title: {
47
+ maxWidth: 400,
48
+ },
49
+ type: {
50
+ maxWidth: 400,
51
+ },
52
+ description: {
53
+ maxWidth: 200,
54
+ },
55
+ },
42
56
  },
43
57
  },
44
58
  [ LAYOUT_GRID ]: {
@@ -0,0 +1,100 @@
1
+ .dataviews-wrapper {
2
+ height: 100%;
3
+ overflow: auto;
4
+ box-sizing: border-box;
5
+ scroll-padding-bottom: $grid-unit-80;
6
+ /* stylelint-disable-next-line property-no-unknown -- '@container' not globally permitted */
7
+ container: dataviews-wrapper / inline-size;
8
+ display: flex;
9
+ flex-direction: column;
10
+ }
11
+
12
+ .dataviews__view-actions,
13
+ .dataviews-filters__container {
14
+ box-sizing: border-box;
15
+ padding: $grid-unit-20 $grid-unit-60;
16
+ flex-shrink: 0;
17
+ position: sticky;
18
+ left: 0;
19
+ transition: padding ease-out 0.1s;
20
+ @include reduce-motion("transition");
21
+
22
+ .components-search-control {
23
+ .components-base-control__field {
24
+ max-width: 240px;
25
+ }
26
+ }
27
+ }
28
+
29
+ .dataviews-view-list__primary-field,
30
+ .dataviews-view-grid__primary-field,
31
+ .dataviews-view-table__primary-field {
32
+ font-size: $default-font-size;
33
+ font-weight: 500;
34
+ color: $gray-700;
35
+ text-overflow: ellipsis;
36
+ white-space: nowrap;
37
+ width: 100%;
38
+
39
+ a {
40
+ text-decoration: none;
41
+ text-overflow: ellipsis;
42
+ white-space: nowrap;
43
+ overflow: hidden;
44
+ display: block;
45
+ flex-grow: 0;
46
+ color: $gray-900;
47
+
48
+ &:hover {
49
+ color: var(--wp-admin-theme-color);
50
+ }
51
+ @include link-reset();
52
+ }
53
+
54
+ button.components-button.is-link {
55
+ text-decoration: none;
56
+ font-weight: inherit;
57
+ text-overflow: ellipsis;
58
+ white-space: nowrap;
59
+ overflow: hidden;
60
+ display: block;
61
+ width: 100%;
62
+ color: $gray-900;
63
+ &:hover {
64
+ color: var(--wp-admin-theme-color);
65
+ }
66
+ }
67
+ }
68
+
69
+ .dataviews-no-results,
70
+ .dataviews-loading {
71
+ padding: 0 $grid-unit-60;
72
+ flex-grow: 1;
73
+ display: flex;
74
+ align-items: center;
75
+ justify-content: center;
76
+ transition: padding ease-out 0.1s;
77
+ @include reduce-motion("transition");
78
+ }
79
+
80
+ /* stylelint-disable-next-line scss/at-rule-no-unknown -- '@container' not globally permitted */
81
+ @container (max-width: 430px) {
82
+ .dataviews__view-actions,
83
+ .dataviews-filters__container {
84
+ padding: $grid-unit-15 $grid-unit-30;
85
+
86
+ .components-search-control {
87
+ .components-base-control__field {
88
+ max-width: 112px;
89
+ }
90
+ }
91
+ }
92
+
93
+ .dataviews-view-grid,
94
+ .dataviews-no-results,
95
+ .dataviews-loading {
96
+ padding-left: $grid-unit-30;
97
+ padding-right: $grid-unit-30;
98
+ }
99
+ }
100
+
@@ -7,15 +7,16 @@ import {
7
7
  Modal,
8
8
  } from '@wordpress/components';
9
9
  import { __, sprintf, _n } from '@wordpress/i18n';
10
- import { useMemo, useState, useCallback } from '@wordpress/element';
10
+ import { useMemo, useState, useCallback, useContext } from '@wordpress/element';
11
11
  import { useRegistry } from '@wordpress/data';
12
12
 
13
13
  /**
14
14
  * Internal dependencies
15
15
  */
16
- import { unlock } from './lock-unlock';
17
- import type { Action, ActionModal } from './types';
18
- import type { SetSelection } from './private-types';
16
+ import DataViewsContext from '../dataviews-context';
17
+ import { LAYOUT_TABLE, LAYOUT_GRID } from '../../constants';
18
+ import { unlock } from '../../lock-unlock';
19
+ import type { Action, ActionModal } from '../../types';
19
20
 
20
21
  const {
21
22
  DropdownMenuV2: DropdownMenu,
@@ -43,14 +44,6 @@ interface ActionsMenuGroupProps< Item > {
43
44
  setActionWithModal: ( action?: ActionModal< Item > ) => void;
44
45
  }
45
46
 
46
- interface BulkActionsProps< Item > {
47
- data: Item[];
48
- actions: Action< Item >[];
49
- selection: string[];
50
- onSelectionChange: SetSelection;
51
- getItemId: ( item: Item ) => string;
52
- }
53
-
54
47
  export function useHasAPossibleBulkAction< Item >(
55
48
  actions: Action< Item >[],
56
49
  item: Item
@@ -96,6 +89,11 @@ function ActionWithModal< Item >( {
96
89
  const onCloseModal = useCallback( () => {
97
90
  setActionWithModal( undefined );
98
91
  }, [ setActionWithModal ] );
92
+
93
+ if ( ! eligibleItems.length ) {
94
+ return null;
95
+ }
96
+
99
97
  const label =
100
98
  typeof action.label === 'string'
101
99
  ? action.label
@@ -105,7 +103,7 @@ function ActionWithModal< Item >( {
105
103
  title={ ! hideModalHeader ? label : undefined }
106
104
  __experimentalHideHeader={ !! hideModalHeader }
107
105
  onRequestClose={ onCloseModal }
108
- overlayClassName="dataviews-action-modal"
106
+ overlayClassName="dataviews-bulk-actions__modal"
109
107
  >
110
108
  <RenderModal
111
109
  items={ eligibleItems }
@@ -133,7 +131,6 @@ function BulkActionItem< Item >( {
133
131
  return (
134
132
  <DropdownMenuItem
135
133
  key={ action.id }
136
- disabled={ eligibleItems.length === 0 }
137
134
  hideOnClick={ ! shouldShowModal }
138
135
  onClick={ async () => {
139
136
  if ( shouldShowModal ) {
@@ -142,9 +139,7 @@ function BulkActionItem< Item >( {
142
139
  action.callback( eligibleItems, { registry } );
143
140
  }
144
141
  } }
145
- suffix={
146
- eligibleItems.length > 0 ? eligibleItems.length : undefined
147
- }
142
+ suffix={ eligibleItems.length }
148
143
  >
149
144
  { action.label }
150
145
  </DropdownMenuItem>
@@ -156,10 +151,20 @@ function ActionsMenuGroup< Item >( {
156
151
  selectedItems,
157
152
  setActionWithModal,
158
153
  }: ActionsMenuGroupProps< Item > ) {
154
+ const elligibleActions = useMemo( () => {
155
+ return actions.filter( ( action ) => {
156
+ return selectedItems.some(
157
+ ( item ) => ! action.isEligible || action.isEligible( item )
158
+ );
159
+ } );
160
+ }, [ actions, selectedItems ] );
161
+ if ( ! elligibleActions.length ) {
162
+ return null;
163
+ }
159
164
  return (
160
165
  <>
161
166
  <DropdownMenuGroup>
162
- { actions.map( ( action ) => (
167
+ { elligibleActions.map( ( action ) => (
163
168
  <BulkActionItem
164
169
  key={ action.id }
165
170
  action={ action }
@@ -173,20 +178,21 @@ function ActionsMenuGroup< Item >( {
173
178
  );
174
179
  }
175
180
 
176
- export default function BulkActions< Item >( {
177
- data,
178
- actions,
179
- selection,
180
- onSelectionChange,
181
- getItemId,
182
- }: BulkActionsProps< Item > ) {
181
+ function _BulkActions() {
182
+ const {
183
+ data,
184
+ actions = [],
185
+ selection,
186
+ onChangeSelection,
187
+ getItemId,
188
+ } = useContext( DataViewsContext );
183
189
  const bulkActions = useMemo(
184
190
  () => actions.filter( ( action ) => action.supportsBulk ),
185
191
  [ actions ]
186
192
  );
187
193
  const [ isMenuOpen, onMenuOpenChange ] = useState( false );
188
194
  const [ actionWithModal, setActionWithModal ] = useState<
189
- ActionModal< Item > | undefined
195
+ ActionModal< any > | undefined
190
196
  >();
191
197
  const selectableItems = useMemo( () => {
192
198
  return data.filter( ( item ) => {
@@ -220,7 +226,7 @@ export default function BulkActions< Item >( {
220
226
  style={ { minWidth: '240px' } }
221
227
  trigger={
222
228
  <Button
223
- className="dataviews-bulk-edit-button"
229
+ className="dataviews-bulk-actions__edit-button"
224
230
  __next40pxDefaultSize
225
231
  variant="tertiary"
226
232
  size="compact"
@@ -249,7 +255,7 @@ export default function BulkActions< Item >( {
249
255
  disabled={ areAllSelected }
250
256
  hideOnClick={ false }
251
257
  onClick={ () => {
252
- onSelectionChange(
258
+ onChangeSelection(
253
259
  selectableItems.map( ( item ) =>
254
260
  getItemId( item )
255
261
  )
@@ -263,7 +269,7 @@ export default function BulkActions< Item >( {
263
269
  disabled={ selection.length === 0 }
264
270
  hideOnClick={ false }
265
271
  onClick={ () => {
266
- onSelectionChange( [] );
272
+ onChangeSelection( [] );
267
273
  } }
268
274
  >
269
275
  { __( 'Deselect' ) }
@@ -281,3 +287,19 @@ export default function BulkActions< Item >( {
281
287
  </>
282
288
  );
283
289
  }
290
+
291
+ export default function BulkActions() {
292
+ const { data, actions = [], view } = useContext( DataViewsContext );
293
+ const hasPossibleBulkAction = useSomeItemHasAPossibleBulkAction(
294
+ actions,
295
+ data
296
+ );
297
+ if (
298
+ ! [ LAYOUT_TABLE, LAYOUT_GRID ].includes( view.type ) ||
299
+ ! hasPossibleBulkAction
300
+ ) {
301
+ return null;
302
+ }
303
+
304
+ return <_BulkActions />;
305
+ }
@@ -0,0 +1,7 @@
1
+ .dataviews-bulk-actions__modal {
2
+ z-index: z-index(".dataviews-bulk-actions__modal");
3
+ }
4
+
5
+ .dataviews-bulk-actions__edit-button.components-button {
6
+ flex-shrink: 0;
7
+ }
@@ -8,7 +8,7 @@ import {
8
8
  __unstableMotion as motion,
9
9
  __unstableAnimatePresence as AnimatePresence,
10
10
  } from '@wordpress/components';
11
- import { useMemo, useState, useRef } from '@wordpress/element';
11
+ import { useMemo, useState, useRef, useContext } from '@wordpress/element';
12
12
  import { _n, sprintf, __ } from '@wordpress/i18n';
13
13
  import { closeSmall } from '@wordpress/icons';
14
14
  import { useReducedMotion } from '@wordpress/compose';
@@ -17,10 +17,13 @@ import { useRegistry } from '@wordpress/data';
17
17
  /**
18
18
  * Internal dependencies
19
19
  */
20
- import { ActionWithModal } from './item-actions';
21
- import type { Action } from './types';
22
- import type { ActionTriggerProps } from './item-actions';
23
- import type { SetSelection } from './private-types';
20
+ import { useSomeItemHasAPossibleBulkAction } from '../dataviews-bulk-actions';
21
+ import DataViewsContext from '../dataviews-context';
22
+ import { ActionWithModal } from '../dataviews-item-actions';
23
+ import { LAYOUT_GRID, LAYOUT_TABLE } from '../../constants';
24
+ import type { Action } from '../../types';
25
+ import type { ActionTriggerProps } from '../dataviews-item-actions';
26
+ import type { SetSelection } from '../../private-types';
24
27
 
25
28
  interface ActionButtonProps< Item > {
26
29
  action: Action< Item >;
@@ -33,15 +36,7 @@ interface ToolbarContentProps< Item > {
33
36
  selection: string[];
34
37
  actionsToShow: Action< Item >[];
35
38
  selectedItems: Item[];
36
- onSelectionChange: SetSelection;
37
- }
38
-
39
- interface BulkActionsToolbarProps< Item > {
40
- data: Item[];
41
- selection: string[];
42
- actions: Action< Item >[];
43
- onSelectionChange: SetSelection;
44
- getItemId: ( item: Item ) => string;
39
+ onChangeSelection: SetSelection;
45
40
  }
46
41
 
47
42
  const SNACKBAR_VARIANTS = {
@@ -131,12 +126,12 @@ function renderToolbarContent< Item >(
131
126
  selectedItems: Item[],
132
127
  actionInProgress: string | null,
133
128
  setActionInProgress: ( actionId: string | null ) => void,
134
- onSelectionChange: SetSelection
129
+ onChangeSelection: SetSelection
135
130
  ) {
136
131
  return (
137
132
  <>
138
133
  <ToolbarGroup>
139
- <div className="dataviews-bulk-actions__selection-count">
134
+ <div className="dataviews-bulk-actions-toolbar__selection-count">
140
135
  { selection.length === 1
141
136
  ? __( '1 item selected' )
142
137
  : sprintf(
@@ -171,7 +166,7 @@ function renderToolbarContent< Item >(
171
166
  label={ __( 'Cancel' ) }
172
167
  disabled={ !! actionInProgress }
173
168
  onClick={ () => {
174
- onSelectionChange( EMPTY_ARRAY );
169
+ onChangeSelection( EMPTY_ARRAY );
175
170
  } }
176
171
  />
177
172
  </ToolbarGroup>
@@ -183,7 +178,7 @@ function ToolbarContent< Item >( {
183
178
  selection,
184
179
  actionsToShow,
185
180
  selectedItems,
186
- onSelectionChange,
181
+ onChangeSelection,
187
182
  }: ToolbarContentProps< Item > ) {
188
183
  const [ actionInProgress, setActionInProgress ] = useState< string | null >(
189
184
  null
@@ -199,7 +194,7 @@ function ToolbarContent< Item >( {
199
194
  selectedItems,
200
195
  actionInProgress,
201
196
  setActionInProgress,
202
- onSelectionChange
197
+ onChangeSelection
203
198
  );
204
199
  } else if ( ! buttons.current ) {
205
200
  buttons.current = renderToolbarContent(
@@ -208,19 +203,20 @@ function ToolbarContent< Item >( {
208
203
  selectedItems,
209
204
  actionInProgress,
210
205
  setActionInProgress,
211
- onSelectionChange
206
+ onChangeSelection
212
207
  );
213
208
  }
214
209
  return buttons.current;
215
210
  }
216
211
 
217
- export default function BulkActionsToolbar< Item >( {
218
- data,
219
- selection,
220
- actions = EMPTY_ARRAY,
221
- onSelectionChange,
222
- getItemId,
223
- }: BulkActionsToolbarProps< Item > ) {
212
+ function _BulkActionsToolbar() {
213
+ const {
214
+ data,
215
+ selection,
216
+ actions = EMPTY_ARRAY,
217
+ onChangeSelection,
218
+ getItemId,
219
+ } = useContext( DataViewsContext );
224
220
  const isReducedMotion = useReducedMotion();
225
221
  const selectedItems = useMemo( () => {
226
222
  return data.filter( ( item ) =>
@@ -258,15 +254,15 @@ export default function BulkActionsToolbar< Item >( {
258
254
  animate="open"
259
255
  exit="exit"
260
256
  variants={ isReducedMotion ? undefined : SNACKBAR_VARIANTS }
261
- className="dataviews-bulk-actions"
257
+ className="dataviews-bulk-actions-toolbar"
262
258
  >
263
259
  <Toolbar label={ __( 'Bulk actions' ) }>
264
- <div className="dataviews-bulk-actions-toolbar-wrapper">
260
+ <div className="dataviews-bulk-actions-toolbar__wrapper">
265
261
  <ToolbarContent
266
262
  selection={ selection }
267
263
  actionsToShow={ actionsToShow }
268
264
  selectedItems={ selectedItems }
269
- onSelectionChange={ onSelectionChange }
265
+ onChangeSelection={ onChangeSelection }
270
266
  />
271
267
  </div>
272
268
  </Toolbar>
@@ -274,3 +270,19 @@ export default function BulkActionsToolbar< Item >( {
274
270
  </AnimatePresence>
275
271
  );
276
272
  }
273
+
274
+ export default function BulkActionsToolbar() {
275
+ const { data, actions = [], view } = useContext( DataViewsContext );
276
+ const hasPossibleBulkAction = useSomeItemHasAPossibleBulkAction(
277
+ actions,
278
+ data
279
+ );
280
+ if (
281
+ ! [ LAYOUT_TABLE, LAYOUT_GRID ].includes( view.type ) ||
282
+ ! hasPossibleBulkAction
283
+ ) {
284
+ return null;
285
+ }
286
+
287
+ return <_BulkActionsToolbar />;
288
+ }
@@ -0,0 +1,45 @@
1
+ .dataviews-bulk-actions-toolbar {
2
+ position: sticky;
3
+ display: flex;
4
+ flex-direction: column;
5
+ align-content: center;
6
+ flex-wrap: wrap;
7
+ width: fit-content;
8
+ margin-left: auto;
9
+ margin-right: auto;
10
+ bottom: $grid-unit-30;
11
+ z-index: z-index(".dataviews-bulk-actions-toolbar");
12
+
13
+ .components-accessible-toolbar {
14
+ border-color: $gray-300;
15
+ box-shadow: $shadow-popover;
16
+
17
+ .components-toolbar-group {
18
+ border-color: $gray-200;
19
+
20
+ &:last-child {
21
+ border: 0;
22
+ }
23
+ }
24
+ }
25
+
26
+ .dataviews-bulk-actions-toolbar__selection-count {
27
+ display: flex;
28
+ align-items: center;
29
+ margin: 0 $grid-unit-10 0 $grid-unit-10;
30
+ }
31
+ }
32
+
33
+ .dataviews-bulk-actions-toolbar__wrapper {
34
+ display: flex;
35
+ flex-grow: 1;
36
+ width: 100%;
37
+
38
+ .components-toolbar-group {
39
+ align-items: center;
40
+ }
41
+
42
+ .components-button.is-busy {
43
+ max-height: $button-size;
44
+ }
45
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { createContext } from '@wordpress/element';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import type { View, Action, NormalizedField } from '../../types';
10
+ import type { SetSelection } from '../../private-types';
11
+ import { LAYOUT_TABLE } from '../../constants';
12
+
13
+ type DataViewsContextType< Item > = {
14
+ view: View;
15
+ onChangeView: ( view: View ) => void;
16
+ fields: NormalizedField< Item >[];
17
+ actions?: Action< Item >[];
18
+ data: Item[];
19
+ isLoading?: boolean;
20
+ paginationInfo: {
21
+ totalItems: number;
22
+ totalPages: number;
23
+ };
24
+ selection: string[];
25
+ onChangeSelection: SetSelection;
26
+ openedFilter: string | null;
27
+ setOpenedFilter: ( openedFilter: string | null ) => void;
28
+ getItemId: ( item: Item ) => string;
29
+ density: number;
30
+ };
31
+
32
+ const DataViewsContext = createContext< DataViewsContextType< any > >( {
33
+ view: { type: LAYOUT_TABLE },
34
+ onChangeView: () => {},
35
+ fields: [],
36
+ data: [],
37
+ paginationInfo: {
38
+ totalItems: 0,
39
+ totalPages: 0,
40
+ },
41
+ selection: [],
42
+ onChangeSelection: () => {},
43
+ setOpenedFilter: () => {},
44
+ openedFilter: null,
45
+ getItemId: ( item ) => item.id,
46
+ density: 0,
47
+ } );
48
+
49
+ export default DataViewsContext;
@@ -16,8 +16,8 @@ import { forwardRef } from '@wordpress/element';
16
16
  /**
17
17
  * Internal dependencies
18
18
  */
19
- import { unlock } from './lock-unlock';
20
- import type { NormalizedFilter, View } from './types';
19
+ import { unlock } from '../../lock-unlock';
20
+ import type { NormalizedFilter, View } from '../../types';
21
21
 
22
22
  const {
23
23
  DropdownMenuV2: DropdownMenu,
@@ -32,29 +32,18 @@ interface AddFilterProps {
32
32
  setOpenedFilter: ( filter: string | null ) => void;
33
33
  }
34
34
 
35
- function AddFilter(
36
- { filters, view, onChangeView, setOpenedFilter }: AddFilterProps,
37
- ref: Ref< HTMLButtonElement >
38
- ) {
39
- if ( ! filters.length || filters.every( ( { isPrimary } ) => isPrimary ) ) {
40
- return null;
41
- }
35
+ export function AddFilterDropdownMenu( {
36
+ filters,
37
+ view,
38
+ onChangeView,
39
+ setOpenedFilter,
40
+ trigger,
41
+ }: AddFilterProps & {
42
+ trigger: React.ReactNode;
43
+ } ) {
42
44
  const inactiveFilters = filters.filter( ( filter ) => ! filter.isVisible );
43
45
  return (
44
- <DropdownMenu
45
- trigger={
46
- <Button
47
- accessibleWhenDisabled
48
- size="compact"
49
- className="dataviews-filters-button"
50
- variant="tertiary"
51
- disabled={ ! inactiveFilters.length }
52
- ref={ ref }
53
- >
54
- { __( 'Add filter' ) }
55
- </Button>
56
- }
57
- >
46
+ <DropdownMenu trigger={ trigger }>
58
47
  { inactiveFilters.map( ( filter ) => {
59
48
  return (
60
49
  <DropdownMenuItem
@@ -85,4 +74,31 @@ function AddFilter(
85
74
  );
86
75
  }
87
76
 
77
+ function AddFilter(
78
+ { filters, view, onChangeView, setOpenedFilter }: AddFilterProps,
79
+ ref: Ref< HTMLButtonElement >
80
+ ) {
81
+ if ( ! filters.length || filters.every( ( { isPrimary } ) => isPrimary ) ) {
82
+ return null;
83
+ }
84
+ const inactiveFilters = filters.filter( ( filter ) => ! filter.isVisible );
85
+ return (
86
+ <AddFilterDropdownMenu
87
+ trigger={
88
+ <Button
89
+ accessibleWhenDisabled
90
+ size="compact"
91
+ className="dataviews-filters-button"
92
+ variant="tertiary"
93
+ disabled={ ! inactiveFilters.length }
94
+ ref={ ref }
95
+ >
96
+ { __( 'Add filter' ) }
97
+ </Button>
98
+ }
99
+ { ...{ filters, view, onChangeView, setOpenedFilter } }
100
+ />
101
+ );
102
+ }
103
+
88
104
  export default forwardRef( AddFilter );