@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
@@ -0,0 +1,51 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { ComponentType } from 'react';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { useContext } from '@wordpress/element';
10
+
11
+ /**
12
+ * Internal dependencies
13
+ */
14
+ import DataViewsContext from '../dataviews-context';
15
+ import { VIEW_LAYOUTS } from '../../dataviews-layouts';
16
+ import type { ViewBaseProps } from '../../types';
17
+
18
+ export default function DataViewsLayout() {
19
+ const {
20
+ actions = [],
21
+ data,
22
+ fields,
23
+ getItemId,
24
+ isLoading,
25
+ view,
26
+ onChangeView,
27
+ selection,
28
+ onChangeSelection,
29
+ setOpenedFilter,
30
+ density,
31
+ } = useContext( DataViewsContext );
32
+
33
+ const ViewComponent = VIEW_LAYOUTS.find( ( v ) => v.type === view.type )
34
+ ?.component as ComponentType< ViewBaseProps< any > >;
35
+
36
+ return (
37
+ <ViewComponent
38
+ actions={ actions }
39
+ data={ data }
40
+ fields={ fields }
41
+ getItemId={ getItemId }
42
+ isLoading={ isLoading }
43
+ onChangeView={ onChangeView }
44
+ onChangeSelection={ onChangeSelection }
45
+ selection={ selection }
46
+ setOpenedFilter={ setOpenedFilter }
47
+ view={ view }
48
+ density={ density }
49
+ />
50
+ );
51
+ }
@@ -6,29 +6,21 @@ import {
6
6
  __experimentalHStack as HStack,
7
7
  SelectControl,
8
8
  } from '@wordpress/components';
9
- import { createInterpolateElement, memo } from '@wordpress/element';
9
+ import { createInterpolateElement, memo, useContext } from '@wordpress/element';
10
10
  import { sprintf, __, _x } from '@wordpress/i18n';
11
- import { chevronRight, chevronLeft } from '@wordpress/icons';
11
+ import { next, previous } from '@wordpress/icons';
12
12
 
13
13
  /**
14
14
  * Internal dependencies
15
15
  */
16
- import type { View } from './types';
16
+ import DataViewsContext from '../dataviews-context';
17
17
 
18
- interface PaginationProps {
19
- view: View;
20
- onChangeView: ( view: View ) => void;
21
- paginationInfo: {
22
- totalItems: number;
23
- totalPages: number;
24
- };
25
- }
26
-
27
- const Pagination = memo( function Pagination( {
28
- view,
29
- onChangeView,
30
- paginationInfo: { totalItems = 0, totalPages },
31
- }: PaginationProps ) {
18
+ function DataViewsPagination() {
19
+ const {
20
+ view,
21
+ onChangeView,
22
+ paginationInfo: { totalItems = 0, totalPages },
23
+ } = useContext( DataViewsContext );
32
24
  if ( ! totalItems || ! totalPages ) {
33
25
  return null;
34
26
  }
@@ -92,7 +84,7 @@ const Pagination = memo( function Pagination( {
92
84
  disabled={ currentPage === 1 }
93
85
  accessibleWhenDisabled
94
86
  label={ __( 'Previous page' ) }
95
- icon={ chevronLeft }
87
+ icon={ previous }
96
88
  showTooltip
97
89
  size="compact"
98
90
  tooltipPosition="top"
@@ -104,7 +96,7 @@ const Pagination = memo( function Pagination( {
104
96
  disabled={ currentPage >= totalPages }
105
97
  accessibleWhenDisabled
106
98
  label={ __( 'Next page' ) }
107
- icon={ chevronRight }
99
+ icon={ next }
108
100
  showTooltip
109
101
  size="compact"
110
102
  tooltipPosition="top"
@@ -113,6 +105,6 @@ const Pagination = memo( function Pagination( {
113
105
  </HStack>
114
106
  )
115
107
  );
116
- } );
108
+ }
117
109
 
118
- export default Pagination;
110
+ export default memo( DataViewsPagination );
@@ -0,0 +1,26 @@
1
+ .dataviews-pagination {
2
+ position: sticky;
3
+ bottom: 0;
4
+ left: 0;
5
+ background-color: $white;
6
+ padding: $grid-unit-15 $grid-unit-60;
7
+ border-top: $border-width solid $gray-100;
8
+ color: $gray-700;
9
+ flex-shrink: 0;
10
+ transition: padding ease-out 0.1s;
11
+ @include reduce-motion("transition");
12
+ }
13
+
14
+ .dataviews-pagination__page-selection {
15
+ font-size: 11px;
16
+ text-transform: uppercase;
17
+ font-weight: 500;
18
+ color: $gray-900;
19
+ }
20
+
21
+ /* stylelint-disable-next-line scss/at-rule-no-unknown -- '@container' not globally permitted */
22
+ @container (max-width: 430px) {
23
+ .dataviews-pagination {
24
+ padding: $grid-unit-15 $grid-unit-30;
25
+ }
26
+ }
@@ -2,26 +2,21 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
- import { useEffect, useRef, memo } from '@wordpress/element';
5
+ import { useEffect, useRef, memo, useContext } from '@wordpress/element';
6
6
  import { SearchControl } from '@wordpress/components';
7
7
  import { useDebouncedInput } from '@wordpress/compose';
8
8
 
9
9
  /**
10
10
  * Internal dependencies
11
11
  */
12
- import type { View } from './types';
12
+ import DataViewsContext from '../dataviews-context';
13
13
 
14
14
  interface SearchProps {
15
15
  label?: string;
16
- view: View;
17
- onChangeView: ( view: View ) => void;
18
16
  }
19
17
 
20
- const Search = memo( function Search( {
21
- label,
22
- view,
23
- onChangeView,
24
- }: SearchProps ) {
18
+ const DataViewsSearch = memo( function Search( { label }: SearchProps ) {
19
+ const { view, onChangeView } = useContext( DataViewsContext );
25
20
  const [ search, setSearch, debouncedSearch ] = useDebouncedInput(
26
21
  view.search
27
22
  );
@@ -35,15 +30,18 @@ const Search = memo( function Search( {
35
30
  viewRef.current = view;
36
31
  }, [ onChangeView, view ] );
37
32
  useEffect( () => {
38
- onChangeViewRef.current( {
39
- ...viewRef.current,
40
- page: 1,
41
- search: debouncedSearch,
42
- } );
33
+ if ( debouncedSearch !== viewRef.current?.search ) {
34
+ onChangeViewRef.current( {
35
+ ...viewRef.current,
36
+ page: 1,
37
+ search: debouncedSearch,
38
+ } );
39
+ }
43
40
  }, [ debouncedSearch ] );
44
41
  const searchLabel = label || __( 'Search' );
45
42
  return (
46
43
  <SearchControl
44
+ className="dataviews-search"
47
45
  __nextHasNoMarginBottom
48
46
  onChange={ setSearch }
49
47
  value={ search }
@@ -54,4 +52,4 @@ const Search = memo( function Search( {
54
52
  );
55
53
  } );
56
54
 
57
- export default Search;
55
+ export default DataViewsSearch;
@@ -7,26 +7,26 @@ import { CheckboxControl } from '@wordpress/components';
7
7
  /**
8
8
  * Internal dependencies
9
9
  */
10
- import type { Field } from './types';
11
- import type { SetSelection } from './private-types';
10
+ import type { Field } from '../../types';
11
+ import type { SetSelection } from '../../private-types';
12
12
 
13
- interface SingleSelectionCheckboxProps< Item > {
13
+ interface DataViewsSelectionCheckboxProps< Item > {
14
14
  selection: string[];
15
- onSelectionChange: SetSelection;
15
+ onChangeSelection: SetSelection;
16
16
  item: Item;
17
17
  getItemId: ( item: Item ) => string;
18
18
  primaryField?: Field< Item >;
19
19
  disabled: boolean;
20
20
  }
21
21
 
22
- export default function SingleSelectionCheckbox< Item >( {
22
+ export default function DataViewsSelectionCheckbox< Item >( {
23
23
  selection,
24
- onSelectionChange,
24
+ onChangeSelection,
25
25
  item,
26
26
  getItemId,
27
27
  primaryField,
28
28
  disabled,
29
- }: SingleSelectionCheckboxProps< Item > ) {
29
+ }: DataViewsSelectionCheckboxProps< Item > ) {
30
30
  const id = getItemId( item );
31
31
  const checked = ! disabled && selection.includes( id );
32
32
  let selectionLabel;
@@ -44,7 +44,7 @@ export default function SingleSelectionCheckbox< Item >( {
44
44
  }
45
45
  return (
46
46
  <CheckboxControl
47
- className="dataviews-view-table-selection-checkbox"
47
+ className="dataviews-selection-checkbox"
48
48
  __nextHasNoMarginBottom
49
49
  aria-label={ selectionLabel }
50
50
  aria-disabled={ disabled }
@@ -54,7 +54,7 @@ export default function SingleSelectionCheckbox< Item >( {
54
54
  return;
55
55
  }
56
56
 
57
- onSelectionChange(
57
+ onChangeSelection(
58
58
  selection.includes( id )
59
59
  ? selection.filter( ( itemId ) => id !== itemId )
60
60
  : [ ...selection, id ]
@@ -0,0 +1,14 @@
1
+ .dataviews-selection-checkbox {
2
+ // Experimental override for CheckboxControl size (fragile)
3
+ --checkbox-input-size: 24px;
4
+ @include break-small() {
5
+ --checkbox-input-size: 16px;
6
+ }
7
+
8
+ line-height: 0;
9
+ flex-shrink: 0;
10
+
11
+ .components-checkbox-control__input-container {
12
+ margin: 0;
13
+ }
14
+ }
@@ -0,0 +1,358 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import type { ChangeEvent } from 'react';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import {
10
+ Button,
11
+ Popover,
12
+ __experimentalToggleGroupControl as ToggleGroupControl,
13
+ __experimentalToggleGroupControlOption as ToggleGroupControlOption,
14
+ __experimentalToggleGroupControlOptionIcon as ToggleGroupControlOptionIcon,
15
+ SelectControl,
16
+ __experimentalItemGroup as ItemGroup,
17
+ __experimentalItem as Item,
18
+ __experimentalGrid as Grid,
19
+ __experimentalVStack as VStack,
20
+ __experimentalHStack as HStack,
21
+ __experimentalHeading as Heading,
22
+ __experimentalText as Text,
23
+ privateApis as componentsPrivateApis,
24
+ } from '@wordpress/components';
25
+ import { __, _x } from '@wordpress/i18n';
26
+ import { memo, useContext, useState, useMemo } from '@wordpress/element';
27
+ import { cog, seen, unseen } from '@wordpress/icons';
28
+ import warning from '@wordpress/warning';
29
+
30
+ /**
31
+ * Internal dependencies
32
+ */
33
+ import { SORTING_DIRECTIONS, sortIcons, sortLabels } from '../../constants';
34
+ import { VIEW_LAYOUTS, getMandatoryFields } from '../../dataviews-layouts';
35
+ import type { SupportedLayouts } from '../../types';
36
+ import DataViewsContext from '../dataviews-context';
37
+ import { unlock } from '../../lock-unlock';
38
+
39
+ const {
40
+ DropdownMenuV2: DropdownMenu,
41
+ DropdownMenuRadioItemV2: DropdownMenuRadioItem,
42
+ DropdownMenuItemLabelV2: DropdownMenuItemLabel,
43
+ } = unlock( componentsPrivateApis );
44
+
45
+ interface ViewTypeMenuProps {
46
+ defaultLayouts?: SupportedLayouts;
47
+ }
48
+
49
+ function ViewTypeMenu( {
50
+ defaultLayouts = { list: {}, grid: {}, table: {} },
51
+ }: ViewTypeMenuProps ) {
52
+ const { view, onChangeView } = useContext( DataViewsContext );
53
+ const availableLayouts = Object.keys( defaultLayouts );
54
+ if ( availableLayouts.length <= 1 ) {
55
+ return null;
56
+ }
57
+ const activeView = VIEW_LAYOUTS.find( ( v ) => view.type === v.type );
58
+ return (
59
+ <DropdownMenu
60
+ trigger={
61
+ <Button
62
+ size="compact"
63
+ icon={ activeView?.icon }
64
+ label={ __( 'Layout' ) }
65
+ />
66
+ }
67
+ >
68
+ { availableLayouts.map( ( layout ) => {
69
+ const config = VIEW_LAYOUTS.find( ( v ) => v.type === layout );
70
+ if ( ! config ) {
71
+ return null;
72
+ }
73
+ return (
74
+ <DropdownMenuRadioItem
75
+ key={ layout }
76
+ value={ layout }
77
+ name="view-actions-available-view"
78
+ checked={ layout === view.type }
79
+ hideOnClick
80
+ onChange={ ( e: ChangeEvent< HTMLInputElement > ) => {
81
+ switch ( e.target.value ) {
82
+ case 'list':
83
+ case 'grid':
84
+ case 'table':
85
+ return onChangeView( {
86
+ ...view,
87
+ type: e.target.value,
88
+ ...defaultLayouts[ e.target.value ],
89
+ } );
90
+ }
91
+ warning( 'Invalid dataview' );
92
+ } }
93
+ >
94
+ <DropdownMenuItemLabel>
95
+ { config.label }
96
+ </DropdownMenuItemLabel>
97
+ </DropdownMenuRadioItem>
98
+ );
99
+ } ) }
100
+ </DropdownMenu>
101
+ );
102
+ }
103
+
104
+ interface ViewActionsProps {
105
+ defaultLayouts?: SupportedLayouts;
106
+ }
107
+
108
+ function SortFieldControl() {
109
+ const { view, fields, onChangeView } = useContext( DataViewsContext );
110
+ const orderOptions = useMemo( () => {
111
+ const sortableFields = fields.filter(
112
+ ( field ) => field.enableSorting !== false
113
+ );
114
+ return sortableFields.map( ( field ) => {
115
+ return {
116
+ label: field.label,
117
+ value: field.id,
118
+ };
119
+ } );
120
+ }, [ fields ] );
121
+
122
+ return (
123
+ <SelectControl
124
+ __nextHasNoMarginBottom
125
+ __next40pxDefaultSize
126
+ label={ __( 'Sort by' ) }
127
+ value={ view.sort?.field }
128
+ options={ orderOptions }
129
+ onChange={ ( value: string ) => {
130
+ onChangeView( {
131
+ ...view,
132
+ sort: {
133
+ direction: view?.sort?.direction || 'desc',
134
+ field: value,
135
+ },
136
+ } );
137
+ } }
138
+ />
139
+ );
140
+ }
141
+
142
+ function SortDirectionControl() {
143
+ const { view, onChangeView } = useContext( DataViewsContext );
144
+ return (
145
+ <ToggleGroupControl
146
+ className="dataviews-view-config__sort-direction"
147
+ __nextHasNoMarginBottom
148
+ __next40pxDefaultSize
149
+ isBlock
150
+ label={ __( 'Order' ) }
151
+ value={ view.sort?.direction || 'desc' }
152
+ disabled={ ! view?.sort?.field }
153
+ onChange={ ( newDirection ) => {
154
+ if ( ! view?.sort?.field ) {
155
+ return;
156
+ }
157
+ if ( newDirection === 'asc' || newDirection === 'desc' ) {
158
+ onChangeView( {
159
+ ...view,
160
+ sort: {
161
+ direction: newDirection,
162
+ field: view.sort.field,
163
+ },
164
+ } );
165
+ return;
166
+ }
167
+ warning( 'Invalid direction' );
168
+ } }
169
+ >
170
+ { SORTING_DIRECTIONS.map( ( direction ) => {
171
+ return (
172
+ <ToggleGroupControlOptionIcon
173
+ key={ direction }
174
+ value={ direction }
175
+ icon={ sortIcons[ direction ] }
176
+ label={ sortLabels[ direction ] }
177
+ />
178
+ );
179
+ } ) }
180
+ </ToggleGroupControl>
181
+ );
182
+ }
183
+
184
+ const PAGE_SIZE_VALUES = [ 10, 20, 50, 100 ];
185
+ function ItemsPerPageControl() {
186
+ const { view, onChangeView } = useContext( DataViewsContext );
187
+ return (
188
+ <ToggleGroupControl
189
+ __nextHasNoMarginBottom
190
+ __next40pxDefaultSize
191
+ isBlock
192
+ label={ __( 'Items per page' ) }
193
+ value={ view.perPage || 10 }
194
+ disabled={ ! view?.sort?.field }
195
+ onChange={ ( newItemsPerPage ) => {
196
+ const newItemsPerPageNumber =
197
+ typeof newItemsPerPage === 'number' ||
198
+ newItemsPerPage === undefined
199
+ ? newItemsPerPage
200
+ : parseInt( newItemsPerPage, 10 );
201
+ onChangeView( {
202
+ ...view,
203
+ perPage: newItemsPerPageNumber,
204
+ page: 1,
205
+ } );
206
+ } }
207
+ >
208
+ { PAGE_SIZE_VALUES.map( ( value ) => {
209
+ return (
210
+ <ToggleGroupControlOption
211
+ key={ value }
212
+ value={ value }
213
+ label={ value.toString() }
214
+ />
215
+ );
216
+ } ) }
217
+ </ToggleGroupControl>
218
+ );
219
+ }
220
+
221
+ function FieldControl() {
222
+ const { view, fields, onChangeView } = useContext( DataViewsContext );
223
+ const mandatoryFields = getMandatoryFields( view );
224
+ const hidableFields = fields.filter(
225
+ ( field ) =>
226
+ field.enableHiding !== false &&
227
+ ! mandatoryFields.includes( field.id )
228
+ );
229
+ const viewFields = view.fields || fields.map( ( field ) => field.id );
230
+ if ( ! hidableFields?.length ) {
231
+ return null;
232
+ }
233
+ return (
234
+ <ItemGroup isBordered isSeparated>
235
+ { hidableFields?.map( ( field ) => {
236
+ const isVisible = viewFields.includes( field.id );
237
+ return (
238
+ <Item key={ field.id }>
239
+ <HStack expanded>
240
+ <span>{ field.label }</span>
241
+ <Button
242
+ className="'dataviews-view-config__field-control-button"
243
+ size="compact"
244
+ onClick={ () =>
245
+ onChangeView( {
246
+ ...view,
247
+ fields: isVisible
248
+ ? viewFields.filter(
249
+ ( id ) => id !== field.id
250
+ )
251
+ : [ ...viewFields, field.id ],
252
+ } )
253
+ }
254
+ icon={ isVisible ? seen : unseen }
255
+ label={
256
+ isVisible
257
+ ? __( 'Hide field' )
258
+ : __( 'Show field' )
259
+ }
260
+ />
261
+ </HStack>
262
+ </Item>
263
+ );
264
+ } ) }
265
+ </ItemGroup>
266
+ );
267
+ }
268
+
269
+ function SettingsSection( {
270
+ title,
271
+ description,
272
+ children,
273
+ }: {
274
+ title: string;
275
+ description?: string;
276
+ children: React.ReactNode;
277
+ } ) {
278
+ return (
279
+ <Grid columns={ 12 } className="dataviews-settings-section" gap={ 4 }>
280
+ <div className="dataviews-settings-section__sidebar">
281
+ <Heading
282
+ level={ 2 }
283
+ className="dataviews-settings-section__title"
284
+ >
285
+ { title }
286
+ </Heading>
287
+ { description && (
288
+ <Text
289
+ variant="muted"
290
+ className="dataviews-settings-section__description"
291
+ >
292
+ { description }
293
+ </Text>
294
+ ) }
295
+ </div>
296
+ <Grid
297
+ columns={ 8 }
298
+ gap={ 4 }
299
+ className="dataviews-settings-section__content"
300
+ >
301
+ { children }
302
+ </Grid>
303
+ </Grid>
304
+ );
305
+ }
306
+
307
+ function DataviewsViewConfigContent() {
308
+ return (
309
+ <VStack className="dataviews-view-config" spacing={ 6 }>
310
+ <SettingsSection title={ __( 'Appearance' ) }>
311
+ <HStack expanded className="is-divided-in-two">
312
+ <SortFieldControl />
313
+ <SortDirectionControl />
314
+ </HStack>
315
+ <ItemsPerPageControl />
316
+ </SettingsSection>
317
+ <SettingsSection title={ __( 'Properties' ) }>
318
+ <FieldControl />
319
+ </SettingsSection>
320
+ </VStack>
321
+ );
322
+ }
323
+
324
+ function _DataViewsViewConfig( {
325
+ defaultLayouts = { list: {}, grid: {}, table: {} },
326
+ }: ViewActionsProps ) {
327
+ const [ isShowingViewPopover, setIsShowingViewPopover ] =
328
+ useState< boolean >( false );
329
+
330
+ return (
331
+ <>
332
+ <ViewTypeMenu defaultLayouts={ defaultLayouts } />
333
+ <div>
334
+ <Button
335
+ size="compact"
336
+ icon={ cog }
337
+ label={ _x( 'View options', 'View is used as a noun' ) }
338
+ onClick={ () => setIsShowingViewPopover( true ) }
339
+ />
340
+ { isShowingViewPopover && (
341
+ <Popover
342
+ placement="bottom-end"
343
+ onClose={ () => {
344
+ setIsShowingViewPopover( false );
345
+ } }
346
+ focusOnMount
347
+ >
348
+ <DataviewsViewConfigContent />
349
+ </Popover>
350
+ ) }
351
+ </div>
352
+ </>
353
+ );
354
+ }
355
+
356
+ const DataViewsViewConfig = memo( _DataViewsViewConfig );
357
+
358
+ export default DataViewsViewConfig;
@@ -0,0 +1,44 @@
1
+ .dataviews-view-config {
2
+ width: 320px;
3
+ /* stylelint-disable-next-line property-no-unknown -- the linter needs to be updated to accepted the container-type property */
4
+ container-type: inline-size;
5
+ padding: $grid-unit-20;
6
+ }
7
+ .dataviews-view-config__sort-direction .components-toggle-group-control-option-base {
8
+ text-transform: uppercase;
9
+ }
10
+
11
+ .dataviews-settings-section__title.dataviews-settings-section__title {
12
+ line-height: $grid-unit-30;
13
+ font-size: 15px;
14
+ }
15
+
16
+ .dataviews-settings-section__sidebar {
17
+ grid-column: span 4;
18
+ }
19
+
20
+ .dataviews-settings-section__content,
21
+ .dataviews-settings-section__content > * {
22
+ grid-column: span 8;
23
+ }
24
+
25
+ .dataviews-settings-section__content .is-divided-in-two {
26
+ display: contents;
27
+ & > * {
28
+ grid-column: span 4;
29
+ }
30
+ }
31
+
32
+ /* stylelint-disable-next-line scss/at-rule-no-unknown -- '@container' not globally permitted */
33
+ @container (max-width: 500px) {
34
+ .dataviews-settings-section.dataviews-settings-section {
35
+ grid-template-columns: repeat(2, 1fr);
36
+ .dataviews-settings-section__sidebar {
37
+ grid-column: span 2;
38
+ }
39
+
40
+ .dataviews-settings-section__content {
41
+ grid-column: span 2;
42
+ }
43
+ }
44
+ }
package/src/constants.ts CHANGED
@@ -2,6 +2,7 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
+ import { arrowDown, arrowUp } from '@wordpress/icons';
5
6
 
6
7
  /**
7
8
  * Internal dependencies
@@ -58,6 +59,10 @@ export const sortLabels = {
58
59
  asc: __( 'Sort ascending' ),
59
60
  desc: __( 'Sort descending' ),
60
61
  };
62
+ export const sortIcons = {
63
+ asc: arrowUp,
64
+ desc: arrowDown,
65
+ };
61
66
 
62
67
  // View layouts.
63
68
  export const LAYOUT_TABLE = 'table';