@wordpress/dataviews 4.21.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +147 -32
  3. package/build/components/dataviews/index.js +71 -37
  4. package/build/components/dataviews/index.js.map +1 -1
  5. package/build/components/dataviews-context/index.js +15 -1
  6. package/build/components/dataviews-context/index.js.map +1 -1
  7. package/build/components/dataviews-filters/{filter-summary.js → filter.js} +108 -17
  8. package/build/components/dataviews-filters/filter.js.map +1 -0
  9. package/build/components/dataviews-filters/index.js +21 -20
  10. package/build/components/dataviews-filters/index.js.map +1 -1
  11. package/build/components/dataviews-filters/input-widget.js +76 -0
  12. package/build/components/dataviews-filters/input-widget.js.map +1 -0
  13. package/build/components/dataviews-filters/search-widget.js +33 -39
  14. package/build/components/dataviews-filters/search-widget.js.map +1 -1
  15. package/build/components/dataviews-filters/utils.js +25 -0
  16. package/build/components/dataviews-filters/utils.js.map +1 -0
  17. package/build/components/dataviews-item-actions/index.js +1 -1
  18. package/build/components/dataviews-item-actions/index.js.map +1 -1
  19. package/build/components/dataviews-layout/index.js +7 -2
  20. package/build/components/dataviews-layout/index.js.map +1 -1
  21. package/build/components/dataviews-pagination/index.js +4 -3
  22. package/build/components/dataviews-pagination/index.js.map +1 -1
  23. package/build/components/dataviews-selection-checkbox/index.js.map +1 -1
  24. package/build/components/dataviews-view-config/index.js +10 -19
  25. package/build/components/dataviews-view-config/index.js.map +1 -1
  26. package/build/constants.js +83 -2
  27. package/build/constants.js.map +1 -1
  28. package/build/dataform-controls/boolean.js +42 -0
  29. package/build/dataform-controls/boolean.js.map +1 -0
  30. package/build/dataform-controls/checkbox.js +44 -0
  31. package/build/dataform-controls/checkbox.js.map +1 -0
  32. package/build/dataform-controls/datetime.js +96 -2
  33. package/build/dataform-controls/datetime.js.map +1 -1
  34. package/build/dataform-controls/email.js +48 -0
  35. package/build/dataform-controls/email.js.map +1 -0
  36. package/build/dataform-controls/index.js +9 -1
  37. package/build/dataform-controls/index.js.map +1 -1
  38. package/build/dataform-controls/integer.js +49 -1
  39. package/build/dataform-controls/integer.js.map +1 -1
  40. package/build/dataform-controls/select.js +1 -0
  41. package/build/dataform-controls/select.js.map +1 -1
  42. package/build/dataform-controls/text.js +3 -1
  43. package/build/dataform-controls/text.js.map +1 -1
  44. package/build/dataform-controls/toggle-group.js +52 -0
  45. package/build/dataform-controls/toggle-group.js.map +1 -0
  46. package/build/dataforms-layouts/data-form-layout.js +1 -1
  47. package/build/dataforms-layouts/data-form-layout.js.map +1 -1
  48. package/build/dataforms-layouts/panel/index.js +14 -5
  49. package/build/dataforms-layouts/panel/index.js.map +1 -1
  50. package/build/dataforms-layouts/regular/index.js +23 -4
  51. package/build/dataforms-layouts/regular/index.js.map +1 -1
  52. package/build/dataviews-layouts/grid/index.js +89 -27
  53. package/build/dataviews-layouts/grid/index.js.map +1 -1
  54. package/build/dataviews-layouts/list/index.js +11 -6
  55. package/build/dataviews-layouts/list/index.js.map +1 -1
  56. package/build/dataviews-layouts/table/column-header-menu.js +9 -7
  57. package/build/dataviews-layouts/table/column-header-menu.js.map +1 -1
  58. package/build/dataviews-layouts/table/column-primary.js +18 -13
  59. package/build/dataviews-layouts/table/column-primary.js.map +1 -1
  60. package/build/dataviews-layouts/table/index.js +46 -14
  61. package/build/dataviews-layouts/table/index.js.map +1 -1
  62. package/build/dataviews-layouts/table/use-is-horizontal-scroll-end.js +65 -0
  63. package/build/dataviews-layouts/table/use-is-horizontal-scroll-end.js.map +1 -0
  64. package/build/dataviews-layouts/utils/item-click-wrapper.js +77 -0
  65. package/build/dataviews-layouts/utils/item-click-wrapper.js.map +1 -0
  66. package/build/field-types/array.js +62 -0
  67. package/build/field-types/array.js.map +1 -0
  68. package/build/field-types/boolean.js +71 -0
  69. package/build/field-types/boolean.js.map +1 -0
  70. package/build/field-types/date.js +57 -0
  71. package/build/field-types/date.js.map +1 -0
  72. package/build/field-types/datetime.js +19 -1
  73. package/build/field-types/datetime.js.map +1 -1
  74. package/build/field-types/email.js +60 -0
  75. package/build/field-types/email.js.map +1 -0
  76. package/build/field-types/index.js +42 -1
  77. package/build/field-types/index.js.map +1 -1
  78. package/build/field-types/integer.js +23 -1
  79. package/build/field-types/integer.js.map +1 -1
  80. package/build/field-types/media.js +31 -0
  81. package/build/field-types/media.js.map +1 -0
  82. package/build/field-types/text.js +23 -1
  83. package/build/field-types/text.js.map +1 -1
  84. package/build/filter-and-sort-data-view.js +174 -11
  85. package/build/filter-and-sort-data-view.js.map +1 -1
  86. package/build/normalize-fields.js +72 -11
  87. package/build/normalize-fields.js.map +1 -1
  88. package/build/types.js.map +1 -1
  89. package/build/utils.js +11 -19
  90. package/build/utils.js.map +1 -1
  91. package/build-module/components/dataviews/index.js +74 -40
  92. package/build-module/components/dataviews/index.js.map +1 -1
  93. package/build-module/components/dataviews-context/index.js +16 -2
  94. package/build-module/components/dataviews-context/index.js.map +1 -1
  95. package/build-module/components/dataviews-filters/filter.js +309 -0
  96. package/build-module/components/dataviews-filters/filter.js.map +1 -0
  97. package/build-module/components/dataviews-filters/index.js +22 -21
  98. package/build-module/components/dataviews-filters/index.js.map +1 -1
  99. package/build-module/components/dataviews-filters/input-widget.js +69 -0
  100. package/build-module/components/dataviews-filters/input-widget.js.map +1 -0
  101. package/build-module/components/dataviews-filters/search-widget.js +31 -37
  102. package/build-module/components/dataviews-filters/search-widget.js.map +1 -1
  103. package/build-module/components/dataviews-filters/utils.js +18 -0
  104. package/build-module/components/dataviews-filters/utils.js.map +1 -0
  105. package/build-module/components/dataviews-item-actions/index.js +1 -1
  106. package/build-module/components/dataviews-item-actions/index.js.map +1 -1
  107. package/build-module/components/dataviews-layout/index.js +7 -2
  108. package/build-module/components/dataviews-layout/index.js.map +1 -1
  109. package/build-module/components/dataviews-pagination/index.js +4 -4
  110. package/build-module/components/dataviews-pagination/index.js.map +1 -1
  111. package/build-module/components/dataviews-selection-checkbox/index.js.map +1 -1
  112. package/build-module/components/dataviews-view-config/index.js +9 -20
  113. package/build-module/components/dataviews-view-config/index.js.map +1 -1
  114. package/build-module/constants.js +82 -1
  115. package/build-module/constants.js.map +1 -1
  116. package/build-module/dataform-controls/boolean.js +35 -0
  117. package/build-module/dataform-controls/boolean.js.map +1 -0
  118. package/build-module/dataform-controls/checkbox.js +37 -0
  119. package/build-module/dataform-controls/checkbox.js.map +1 -0
  120. package/build-module/dataform-controls/datetime.js +98 -3
  121. package/build-module/dataform-controls/datetime.js.map +1 -1
  122. package/build-module/dataform-controls/email.js +41 -0
  123. package/build-module/dataform-controls/email.js.map +1 -0
  124. package/build-module/dataform-controls/index.js +9 -1
  125. package/build-module/dataform-controls/index.js.map +1 -1
  126. package/build-module/dataform-controls/integer.js +51 -3
  127. package/build-module/dataform-controls/integer.js.map +1 -1
  128. package/build-module/dataform-controls/select.js +1 -0
  129. package/build-module/dataform-controls/select.js.map +1 -1
  130. package/build-module/dataform-controls/text.js +3 -1
  131. package/build-module/dataform-controls/text.js.map +1 -1
  132. package/build-module/dataform-controls/toggle-group.js +45 -0
  133. package/build-module/dataform-controls/toggle-group.js.map +1 -0
  134. package/build-module/dataforms-layouts/data-form-layout.js +1 -1
  135. package/build-module/dataforms-layouts/data-form-layout.js.map +1 -1
  136. package/build-module/dataforms-layouts/panel/index.js +14 -5
  137. package/build-module/dataforms-layouts/panel/index.js.map +1 -1
  138. package/build-module/dataforms-layouts/regular/index.js +23 -4
  139. package/build-module/dataforms-layouts/regular/index.js.map +1 -1
  140. package/build-module/dataviews-layouts/grid/index.js +90 -29
  141. package/build-module/dataviews-layouts/grid/index.js.map +1 -1
  142. package/build-module/dataviews-layouts/list/index.js +11 -6
  143. package/build-module/dataviews-layouts/list/index.js.map +1 -1
  144. package/build-module/dataviews-layouts/table/column-header-menu.js +9 -7
  145. package/build-module/dataviews-layouts/table/column-header-menu.js.map +1 -1
  146. package/build-module/dataviews-layouts/table/column-primary.js +18 -12
  147. package/build-module/dataviews-layouts/table/column-primary.js.map +1 -1
  148. package/build-module/dataviews-layouts/table/index.js +47 -16
  149. package/build-module/dataviews-layouts/table/index.js.map +1 -1
  150. package/build-module/dataviews-layouts/table/use-is-horizontal-scroll-end.js +58 -0
  151. package/build-module/dataviews-layouts/table/use-is-horizontal-scroll-end.js.map +1 -0
  152. package/build-module/dataviews-layouts/utils/item-click-wrapper.js +71 -0
  153. package/build-module/dataviews-layouts/utils/item-click-wrapper.js.map +1 -0
  154. package/build-module/field-types/array.js +57 -0
  155. package/build-module/field-types/array.js.map +1 -0
  156. package/build-module/field-types/boolean.js +65 -0
  157. package/build-module/field-types/boolean.js.map +1 -0
  158. package/build-module/field-types/date.js +51 -0
  159. package/build-module/field-types/date.js.map +1 -0
  160. package/build-module/field-types/datetime.js +19 -1
  161. package/build-module/field-types/datetime.js.map +1 -1
  162. package/build-module/field-types/email.js +54 -0
  163. package/build-module/field-types/email.js.map +1 -0
  164. package/build-module/field-types/index.js +42 -1
  165. package/build-module/field-types/index.js.map +1 -1
  166. package/build-module/field-types/integer.js +23 -1
  167. package/build-module/field-types/integer.js.map +1 -1
  168. package/build-module/field-types/media.js +25 -0
  169. package/build-module/field-types/media.js.map +1 -0
  170. package/build-module/field-types/text.js +23 -1
  171. package/build-module/field-types/text.js.map +1 -1
  172. package/build-module/filter-and-sort-data-view.js +175 -12
  173. package/build-module/filter-and-sort-data-view.js.map +1 -1
  174. package/build-module/normalize-fields.js +72 -11
  175. package/build-module/normalize-fields.js.map +1 -1
  176. package/build-module/types.js.map +1 -1
  177. package/build-module/utils.js +10 -17
  178. package/build-module/utils.js.map +1 -1
  179. package/build-style/style-rtl.css +317 -15
  180. package/build-style/style.css +317 -15
  181. package/build-types/components/dataform/stories/index.story.d.ts.map +1 -1
  182. package/build-types/components/dataviews/index.d.ts +24 -3
  183. package/build-types/components/dataviews/index.d.ts.map +1 -1
  184. package/build-types/components/dataviews/stories/fixtures.d.ts +10 -1
  185. package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -1
  186. package/build-types/components/dataviews/stories/index.story.d.ts +23 -4
  187. package/build-types/components/dataviews/stories/index.story.d.ts.map +1 -1
  188. package/build-types/components/dataviews-context/index.d.ts +14 -1
  189. package/build-types/components/dataviews-context/index.d.ts.map +1 -1
  190. package/build-types/components/dataviews-filters/filter.d.ts +15 -0
  191. package/build-types/components/dataviews-filters/filter.d.ts.map +1 -0
  192. package/build-types/components/dataviews-filters/index.d.ts +3 -8
  193. package/build-types/components/dataviews-filters/index.d.ts.map +1 -1
  194. package/build-types/components/dataviews-filters/input-widget.d.ts +13 -0
  195. package/build-types/components/dataviews-filters/input-widget.d.ts.map +1 -0
  196. package/build-types/components/dataviews-filters/search-widget.d.ts +4 -5
  197. package/build-types/components/dataviews-filters/search-widget.d.ts.map +1 -1
  198. package/build-types/components/dataviews-filters/utils.d.ts +6 -0
  199. package/build-types/components/dataviews-filters/utils.d.ts.map +1 -0
  200. package/build-types/components/dataviews-layout/index.d.ts +5 -1
  201. package/build-types/components/dataviews-layout/index.d.ts.map +1 -1
  202. package/build-types/components/dataviews-pagination/index.d.ts +1 -1
  203. package/build-types/components/dataviews-pagination/index.d.ts.map +1 -1
  204. package/build-types/components/dataviews-selection-checkbox/index.d.ts +2 -2
  205. package/build-types/components/dataviews-selection-checkbox/index.d.ts.map +1 -1
  206. package/build-types/components/dataviews-view-config/index.d.ts +3 -4
  207. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
  208. package/build-types/components/stories/index.story.d.ts +63 -0
  209. package/build-types/components/stories/index.story.d.ts.map +1 -0
  210. package/build-types/constants.d.ts +20 -3
  211. package/build-types/constants.d.ts.map +1 -1
  212. package/build-types/dataform-controls/boolean.d.ts +6 -0
  213. package/build-types/dataform-controls/boolean.d.ts.map +1 -0
  214. package/build-types/dataform-controls/checkbox.d.ts +6 -0
  215. package/build-types/dataform-controls/checkbox.d.ts.map +1 -0
  216. package/build-types/dataform-controls/datetime.d.ts +1 -1
  217. package/build-types/dataform-controls/datetime.d.ts.map +1 -1
  218. package/build-types/dataform-controls/email.d.ts +6 -0
  219. package/build-types/dataform-controls/email.d.ts.map +1 -0
  220. package/build-types/dataform-controls/index.d.ts +1 -1
  221. package/build-types/dataform-controls/index.d.ts.map +1 -1
  222. package/build-types/dataform-controls/integer.d.ts +1 -4
  223. package/build-types/dataform-controls/integer.d.ts.map +1 -1
  224. package/build-types/dataform-controls/select.d.ts.map +1 -1
  225. package/build-types/dataform-controls/text.d.ts.map +1 -1
  226. package/build-types/dataform-controls/toggle-group.d.ts +6 -0
  227. package/build-types/dataform-controls/toggle-group.d.ts.map +1 -0
  228. package/build-types/dataforms-layouts/panel/index.d.ts.map +1 -1
  229. package/build-types/dataforms-layouts/regular/index.d.ts.map +1 -1
  230. package/build-types/dataviews-layouts/grid/index.d.ts +2 -1
  231. package/build-types/dataviews-layouts/grid/index.d.ts.map +1 -1
  232. package/build-types/dataviews-layouts/index.d.ts +3 -3
  233. package/build-types/dataviews-layouts/list/index.d.ts.map +1 -1
  234. package/build-types/dataviews-layouts/table/column-header-menu.d.ts.map +1 -1
  235. package/build-types/dataviews-layouts/table/column-primary.d.ts +8 -1
  236. package/build-types/dataviews-layouts/table/column-primary.d.ts.map +1 -1
  237. package/build-types/dataviews-layouts/table/index.d.ts +1 -1
  238. package/build-types/dataviews-layouts/table/index.d.ts.map +1 -1
  239. package/build-types/dataviews-layouts/table/use-is-horizontal-scroll-end.d.ts +19 -0
  240. package/build-types/dataviews-layouts/table/use-is-horizontal-scroll-end.d.ts.map +1 -0
  241. package/build-types/dataviews-layouts/utils/item-click-wrapper.d.ts +15 -0
  242. package/build-types/dataviews-layouts/utils/item-click-wrapper.d.ts.map +1 -0
  243. package/build-types/field-types/array.d.ts +7 -0
  244. package/build-types/field-types/array.d.ts.map +1 -0
  245. package/build-types/field-types/boolean.d.ts +19 -0
  246. package/build-types/field-types/boolean.d.ts.map +1 -0
  247. package/build-types/field-types/date.d.ts +16 -0
  248. package/build-types/field-types/date.d.ts.map +1 -0
  249. package/build-types/field-types/datetime.d.ts +7 -1
  250. package/build-types/field-types/datetime.d.ts.map +1 -1
  251. package/build-types/field-types/email.d.ts +19 -0
  252. package/build-types/field-types/email.d.ts.map +1 -0
  253. package/build-types/field-types/index.d.ts +2 -10
  254. package/build-types/field-types/index.d.ts.map +1 -1
  255. package/build-types/field-types/integer.d.ts +7 -1
  256. package/build-types/field-types/integer.d.ts.map +1 -1
  257. package/build-types/field-types/media.d.ts +16 -0
  258. package/build-types/field-types/media.d.ts.map +1 -0
  259. package/build-types/field-types/text.d.ts +7 -1
  260. package/build-types/field-types/text.d.ts.map +1 -1
  261. package/build-types/filter-and-sort-data-view.d.ts.map +1 -1
  262. package/build-types/normalize-fields.d.ts.map +1 -1
  263. package/build-types/types.d.ts +74 -8
  264. package/build-types/types.d.ts.map +1 -1
  265. package/build-types/utils.d.ts +5 -2
  266. package/build-types/utils.d.ts.map +1 -1
  267. package/build-wp/index.js +3299 -1182
  268. package/package.json +18 -12
  269. package/src/components/dataform/stories/index.story.tsx +41 -20
  270. package/src/components/dataviews/index.tsx +108 -43
  271. package/src/components/dataviews/stories/fixtures.tsx +135 -69
  272. package/src/components/dataviews/stories/index.story.tsx +265 -7
  273. package/src/components/dataviews/stories/style.css +24 -3
  274. package/src/components/dataviews/style.scss +27 -0
  275. package/src/components/dataviews-context/index.ts +30 -2
  276. package/src/components/dataviews-filters/filter.tsx +603 -0
  277. package/src/components/dataviews-filters/index.tsx +23 -29
  278. package/src/components/dataviews-filters/input-widget.tsx +91 -0
  279. package/src/components/dataviews-filters/search-widget.tsx +51 -48
  280. package/src/components/dataviews-filters/style.scss +117 -14
  281. package/src/components/dataviews-filters/utils.ts +25 -0
  282. package/src/components/dataviews-item-actions/index.tsx +1 -1
  283. package/src/components/dataviews-layout/index.tsx +8 -1
  284. package/src/components/dataviews-pagination/index.tsx +4 -4
  285. package/src/components/dataviews-selection-checkbox/index.tsx +2 -2
  286. package/src/components/dataviews-view-config/index.tsx +10 -18
  287. package/src/components/stories/index.story.tsx +372 -0
  288. package/src/constants.ts +116 -1
  289. package/src/dataform-controls/boolean.tsx +30 -0
  290. package/src/dataform-controls/checkbox.tsx +31 -0
  291. package/src/dataform-controls/datetime.tsx +106 -2
  292. package/src/dataform-controls/email.tsx +42 -0
  293. package/src/dataform-controls/index.tsx +8 -0
  294. package/src/dataform-controls/integer.tsx +75 -1
  295. package/src/dataform-controls/select.tsx +1 -0
  296. package/src/dataform-controls/style.scss +5 -0
  297. package/src/dataform-controls/text.tsx +2 -1
  298. package/src/dataform-controls/toggle-group.tsx +59 -0
  299. package/src/dataforms-layouts/data-form-layout.tsx +1 -1
  300. package/src/dataforms-layouts/panel/index.tsx +19 -7
  301. package/src/dataforms-layouts/panel/style.scss +8 -1
  302. package/src/dataforms-layouts/regular/index.tsx +50 -17
  303. package/src/dataforms-layouts/regular/style.scss +4 -1
  304. package/src/dataviews-layouts/grid/index.tsx +180 -68
  305. package/src/dataviews-layouts/grid/style.scss +8 -0
  306. package/src/dataviews-layouts/list/index.tsx +12 -5
  307. package/src/dataviews-layouts/table/column-header-menu.tsx +10 -8
  308. package/src/dataviews-layouts/table/column-primary.tsx +26 -13
  309. package/src/dataviews-layouts/table/index.tsx +74 -10
  310. package/src/dataviews-layouts/table/style.scss +37 -1
  311. package/src/dataviews-layouts/table/use-is-horizontal-scroll-end.ts +82 -0
  312. package/src/dataviews-layouts/utils/item-click-wrapper.tsx +93 -0
  313. package/src/field-types/array.tsx +75 -0
  314. package/src/field-types/boolean.tsx +66 -0
  315. package/src/field-types/date.ts +56 -0
  316. package/src/field-types/datetime.tsx +46 -2
  317. package/src/field-types/email.tsx +79 -0
  318. package/src/field-types/index.tsx +50 -3
  319. package/src/field-types/integer.tsx +53 -2
  320. package/src/field-types/media.tsx +28 -0
  321. package/src/field-types/text.tsx +41 -2
  322. package/src/filter-and-sort-data-view.ts +270 -10
  323. package/src/normalize-fields.ts +116 -13
  324. package/src/test/dataviews.tsx +20 -2
  325. package/src/test/filter-and-sort-data-view.js +601 -25
  326. package/src/test/normalize-fields.ts +155 -0
  327. package/src/types.ts +112 -9
  328. package/src/utils.ts +10 -33
  329. package/tsconfig.json +2 -0
  330. package/tsconfig.tsbuildinfo +1 -1
  331. package/build/components/dataviews-filters/filter-summary.js.map +0 -1
  332. package/build/dataviews-layouts/utils/get-clickable-item-props.js +0 -36
  333. package/build/dataviews-layouts/utils/get-clickable-item-props.js.map +0 -1
  334. package/build-module/components/dataviews-filters/filter-summary.js +0 -218
  335. package/build-module/components/dataviews-filters/filter-summary.js.map +0 -1
  336. package/build-module/dataviews-layouts/utils/get-clickable-item-props.js +0 -30
  337. package/build-module/dataviews-layouts/utils/get-clickable-item-props.js.map +0 -1
  338. package/build-types/components/dataviews-filters/filter-summary.d.ts +0 -14
  339. package/build-types/components/dataviews-filters/filter-summary.d.ts.map +0 -1
  340. package/build-types/dataviews-layouts/utils/get-clickable-item-props.d.ts +0 -19
  341. package/build-types/dataviews-layouts/utils/get-clickable-item-props.d.ts.map +0 -1
  342. package/src/components/dataviews-filters/filter-summary.tsx +0 -338
  343. package/src/dataviews-layouts/utils/get-clickable-item-props.ts +0 -39
@@ -6,8 +6,8 @@
6
6
  * WordPress dependencies
7
7
  */
8
8
  import { __experimentalHStack as HStack } from '@wordpress/components';
9
- import { useMemo, useState } from '@wordpress/element';
10
- import { useResizeObserver } from '@wordpress/compose';
9
+ import { useContext, useMemo, useRef, useState } from '@wordpress/element';
10
+ import { useMergeRefs, useResizeObserver } from '@wordpress/compose';
11
11
 
12
12
  /**
13
13
  * Internal dependencies
@@ -17,13 +17,49 @@ import { default as DataViewsFilters, useFilters, FiltersToggle } from '../datav
17
17
  import DataViewsLayout from '../dataviews-layout';
18
18
  import DataViewsFooter from '../dataviews-footer';
19
19
  import DataViewsSearch from '../dataviews-search';
20
- import DataViewsViewConfig from '../dataviews-view-config';
20
+ import { BulkActionsFooter } from '../dataviews-bulk-actions';
21
+ import { DataViewsPagination } from '../dataviews-pagination';
22
+ import DataViewsViewConfig, { DataviewsViewConfigDropdown, ViewTypeMenu } from '../dataviews-view-config';
21
23
  import { normalizeFields } from '../../normalize-fields';
22
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
24
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
23
25
  const defaultGetItemId = item => item.id;
24
26
  const defaultIsItemClickable = () => true;
25
27
  const EMPTY_ARRAY = [];
26
- export default function DataViews({
28
+ function DefaultUI({
29
+ header,
30
+ search = true,
31
+ searchLabel = undefined
32
+ }) {
33
+ const {
34
+ isShowingFilter
35
+ } = useContext(DataViewsContext);
36
+ return /*#__PURE__*/_jsxs(_Fragment, {
37
+ children: [/*#__PURE__*/_jsxs(HStack, {
38
+ alignment: "top",
39
+ justify: "space-between",
40
+ className: "dataviews__view-actions",
41
+ spacing: 1,
42
+ children: [/*#__PURE__*/_jsxs(HStack, {
43
+ justify: "start",
44
+ expanded: false,
45
+ className: "dataviews__search",
46
+ children: [search && /*#__PURE__*/_jsx(DataViewsSearch, {
47
+ label: searchLabel
48
+ }), /*#__PURE__*/_jsx(FiltersToggle, {})]
49
+ }), /*#__PURE__*/_jsxs(HStack, {
50
+ spacing: 1,
51
+ expanded: false,
52
+ style: {
53
+ flexShrink: 0
54
+ },
55
+ children: [/*#__PURE__*/_jsx(DataViewsViewConfig, {}), header]
56
+ })]
57
+ }), isShowingFilter && /*#__PURE__*/_jsx(DataViewsFilters, {
58
+ className: "dataviews-filters__container"
59
+ }), /*#__PURE__*/_jsx(DataViewsLayout, {}), /*#__PURE__*/_jsx(DataViewsFooter, {})]
60
+ });
61
+ }
62
+ function DataViews({
27
63
  view,
28
64
  onChangeView,
29
65
  fields,
@@ -39,11 +75,15 @@ export default function DataViews({
39
75
  selection: selectionProperty,
40
76
  onChangeSelection,
41
77
  onClickItem,
78
+ renderItemLink,
42
79
  isItemClickable = defaultIsItemClickable,
43
- header
80
+ header,
81
+ children,
82
+ perPageSizes
44
83
  }) {
84
+ const containerRef = useRef(null);
45
85
  const [containerWidth, setContainerWidth] = useState(0);
46
- const containerRef = useResizeObserver(resizeObserverEntries => {
86
+ const resizeObserverRef = useResizeObserver(resizeObserverEntries => {
47
87
  setContainerWidth(resizeObserverEntries[0].borderBoxSize[0].inlineSize);
48
88
  }, {
49
89
  box: 'border-box'
@@ -84,42 +124,36 @@ export default function DataViews({
84
124
  getItemLevel,
85
125
  isItemClickable,
86
126
  onClickItem,
87
- containerWidth
127
+ renderItemLink,
128
+ containerWidth,
129
+ containerRef,
130
+ defaultLayouts,
131
+ filters,
132
+ isShowingFilter,
133
+ setIsShowingFilter,
134
+ perPageSizes
88
135
  },
89
- children: /*#__PURE__*/_jsxs("div", {
136
+ children: /*#__PURE__*/_jsx("div", {
90
137
  className: "dataviews-wrapper",
91
- ref: containerRef,
92
- children: [/*#__PURE__*/_jsxs(HStack, {
93
- alignment: "top",
94
- justify: "space-between",
95
- className: "dataviews__view-actions",
96
- spacing: 1,
97
- children: [/*#__PURE__*/_jsxs(HStack, {
98
- justify: "start",
99
- expanded: false,
100
- className: "dataviews__search",
101
- children: [search && /*#__PURE__*/_jsx(DataViewsSearch, {
102
- label: searchLabel
103
- }), /*#__PURE__*/_jsx(FiltersToggle, {
104
- filters: filters,
105
- view: view,
106
- onChangeView: onChangeView,
107
- setOpenedFilter: setOpenedFilter,
108
- setIsShowingFilter: setIsShowingFilter,
109
- isShowingFilter: isShowingFilter
110
- })]
111
- }), /*#__PURE__*/_jsxs(HStack, {
112
- spacing: 1,
113
- expanded: false,
114
- style: {
115
- flexShrink: 0
116
- },
117
- children: [/*#__PURE__*/_jsx(DataViewsViewConfig, {
118
- defaultLayouts: defaultLayouts
119
- }), header]
120
- })]
121
- }), isShowingFilter && /*#__PURE__*/_jsx(DataViewsFilters, {}), /*#__PURE__*/_jsx(DataViewsLayout, {}), /*#__PURE__*/_jsx(DataViewsFooter, {})]
138
+ ref: useMergeRefs([containerRef, resizeObserverRef]),
139
+ children: children !== null && children !== void 0 ? children : /*#__PURE__*/_jsx(DefaultUI, {
140
+ header: header,
141
+ search: search,
142
+ searchLabel: searchLabel
143
+ })
122
144
  })
123
145
  });
124
146
  }
147
+
148
+ // Populate the DataViews sub components
149
+ const DataViewsSubComponents = DataViews;
150
+ DataViewsSubComponents.BulkActionToolbar = BulkActionsFooter;
151
+ DataViewsSubComponents.Filters = DataViewsFilters;
152
+ DataViewsSubComponents.FiltersToggle = FiltersToggle;
153
+ DataViewsSubComponents.Layout = DataViewsLayout;
154
+ DataViewsSubComponents.LayoutSwitcher = ViewTypeMenu;
155
+ DataViewsSubComponents.Pagination = DataViewsPagination;
156
+ DataViewsSubComponents.Search = DataViewsSearch;
157
+ DataViewsSubComponents.ViewConfig = DataviewsViewConfigDropdown;
158
+ export default DataViewsSubComponents;
125
159
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["__experimentalHStack","HStack","useMemo","useState","useResizeObserver","DataViewsContext","default","DataViewsFilters","useFilters","FiltersToggle","DataViewsLayout","DataViewsFooter","DataViewsSearch","DataViewsViewConfig","normalizeFields","jsx","_jsx","jsxs","_jsxs","defaultGetItemId","item","id","defaultIsItemClickable","EMPTY_ARRAY","DataViews","view","onChangeView","fields","search","searchLabel","undefined","actions","data","getItemId","getItemLevel","isLoading","paginationInfo","defaultLayouts","selection","selectionProperty","onChangeSelection","onClickItem","isItemClickable","header","containerWidth","setContainerWidth","containerRef","resizeObserverEntries","borderBoxSize","inlineSize","box","selectionState","setSelectionState","isUncontrolled","openedFilter","setOpenedFilter","setSelectionWithChange","value","newValue","_fields","_selection","filter","some","filters","isShowingFilter","setIsShowingFilter","isPrimary","Provider","children","className","ref","alignment","justify","spacing","expanded","label","style","flexShrink"],"sources":["@wordpress/dataviews/src/components/dataviews/index.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport type { ReactNode } from 'react';\n\n/**\n * WordPress dependencies\n */\nimport { __experimentalHStack as HStack } from '@wordpress/components';\nimport { useMemo, useState } from '@wordpress/element';\nimport { useResizeObserver } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport DataViewsContext from '../dataviews-context';\nimport {\n\tdefault as DataViewsFilters,\n\tuseFilters,\n\tFiltersToggle,\n} from '../dataviews-filters';\nimport DataViewsLayout from '../dataviews-layout';\nimport DataViewsFooter from '../dataviews-footer';\nimport DataViewsSearch from '../dataviews-search';\nimport DataViewsViewConfig from '../dataviews-view-config';\nimport { normalizeFields } from '../../normalize-fields';\nimport type { Action, Field, View, SupportedLayouts } from '../../types';\nimport type { SelectionOrUpdater } from '../../private-types';\n\ntype ItemWithId = { id: string };\n\ntype DataViewsProps< Item > = {\n\tview: View;\n\tonChangeView: ( view: View ) => void;\n\tfields: Field< Item >[];\n\tsearch?: boolean;\n\tsearchLabel?: string;\n\tactions?: Action< Item >[];\n\tdata: Item[];\n\tisLoading?: boolean;\n\tpaginationInfo: {\n\t\ttotalItems: number;\n\t\ttotalPages: number;\n\t};\n\tdefaultLayouts: SupportedLayouts;\n\tselection?: string[];\n\tonChangeSelection?: ( items: string[] ) => void;\n\tonClickItem?: ( item: Item ) => void;\n\tisItemClickable?: ( item: Item ) => boolean;\n\theader?: ReactNode;\n\tgetItemLevel?: ( item: Item ) => number;\n} & ( Item extends ItemWithId\n\t? { getItemId?: ( item: Item ) => string }\n\t: { getItemId: ( item: Item ) => string } );\n\nconst defaultGetItemId = ( item: ItemWithId ) => item.id;\nconst defaultIsItemClickable = () => true;\nconst EMPTY_ARRAY: any[] = [];\n\nexport default function DataViews< Item >( {\n\tview,\n\tonChangeView,\n\tfields,\n\tsearch = true,\n\tsearchLabel = undefined,\n\tactions = EMPTY_ARRAY,\n\tdata,\n\tgetItemId = defaultGetItemId,\n\tgetItemLevel,\n\tisLoading = false,\n\tpaginationInfo,\n\tdefaultLayouts,\n\tselection: selectionProperty,\n\tonChangeSelection,\n\tonClickItem,\n\tisItemClickable = defaultIsItemClickable,\n\theader,\n}: DataViewsProps< Item > ) {\n\tconst [ containerWidth, setContainerWidth ] = useState( 0 );\n\tconst containerRef = useResizeObserver(\n\t\t( resizeObserverEntries: any ) => {\n\t\t\tsetContainerWidth(\n\t\t\t\tresizeObserverEntries[ 0 ].borderBoxSize[ 0 ].inlineSize\n\t\t\t);\n\t\t},\n\t\t{ box: 'border-box' }\n\t);\n\tconst [ selectionState, setSelectionState ] = useState< string[] >( [] );\n\tconst isUncontrolled =\n\t\tselectionProperty === undefined || onChangeSelection === undefined;\n\tconst selection = isUncontrolled ? selectionState : selectionProperty;\n\tconst [ openedFilter, setOpenedFilter ] = useState< string | null >( null );\n\tfunction setSelectionWithChange( value: SelectionOrUpdater ) {\n\t\tconst newValue =\n\t\t\ttypeof value === 'function' ? value( selection ) : value;\n\t\tif ( isUncontrolled ) {\n\t\t\tsetSelectionState( newValue );\n\t\t}\n\t\tif ( onChangeSelection ) {\n\t\t\tonChangeSelection( newValue );\n\t\t}\n\t}\n\tconst _fields = useMemo( () => normalizeFields( fields ), [ fields ] );\n\tconst _selection = useMemo( () => {\n\t\treturn selection.filter( ( id ) =>\n\t\t\tdata.some( ( item ) => getItemId( item ) === id )\n\t\t);\n\t}, [ selection, data, getItemId ] );\n\n\tconst filters = useFilters( _fields, view );\n\tconst [ isShowingFilter, setIsShowingFilter ] = useState< boolean >( () =>\n\t\t( filters || [] ).some( ( filter ) => filter.isPrimary )\n\t);\n\n\treturn (\n\t\t<DataViewsContext.Provider\n\t\t\tvalue={ {\n\t\t\t\tview,\n\t\t\t\tonChangeView,\n\t\t\t\tfields: _fields,\n\t\t\t\tactions,\n\t\t\t\tdata,\n\t\t\t\tisLoading,\n\t\t\t\tpaginationInfo,\n\t\t\t\tselection: _selection,\n\t\t\t\tonChangeSelection: setSelectionWithChange,\n\t\t\t\topenedFilter,\n\t\t\t\tsetOpenedFilter,\n\t\t\t\tgetItemId,\n\t\t\t\tgetItemLevel,\n\t\t\t\tisItemClickable,\n\t\t\t\tonClickItem,\n\t\t\t\tcontainerWidth,\n\t\t\t} }\n\t\t>\n\t\t\t<div className=\"dataviews-wrapper\" ref={ containerRef }>\n\t\t\t\t<HStack\n\t\t\t\t\talignment=\"top\"\n\t\t\t\t\tjustify=\"space-between\"\n\t\t\t\t\tclassName=\"dataviews__view-actions\"\n\t\t\t\t\tspacing={ 1 }\n\t\t\t\t>\n\t\t\t\t\t<HStack\n\t\t\t\t\t\tjustify=\"start\"\n\t\t\t\t\t\texpanded={ false }\n\t\t\t\t\t\tclassName=\"dataviews__search\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ search && <DataViewsSearch label={ searchLabel } /> }\n\t\t\t\t\t\t<FiltersToggle\n\t\t\t\t\t\t\tfilters={ filters }\n\t\t\t\t\t\t\tview={ view }\n\t\t\t\t\t\t\tonChangeView={ onChangeView }\n\t\t\t\t\t\t\tsetOpenedFilter={ setOpenedFilter }\n\t\t\t\t\t\t\tsetIsShowingFilter={ setIsShowingFilter }\n\t\t\t\t\t\t\tisShowingFilter={ isShowingFilter }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</HStack>\n\t\t\t\t\t<HStack\n\t\t\t\t\t\tspacing={ 1 }\n\t\t\t\t\t\texpanded={ false }\n\t\t\t\t\t\tstyle={ { flexShrink: 0 } }\n\t\t\t\t\t>\n\t\t\t\t\t\t<DataViewsViewConfig\n\t\t\t\t\t\t\tdefaultLayouts={ defaultLayouts }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{ header }\n\t\t\t\t\t</HStack>\n\t\t\t\t</HStack>\n\t\t\t\t{ isShowingFilter && <DataViewsFilters /> }\n\t\t\t\t<DataViewsLayout />\n\t\t\t\t<DataViewsFooter />\n\t\t\t</div>\n\t\t</DataViewsContext.Provider>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["__experimentalHStack","HStack","useContext","useMemo","useRef","useState","useMergeRefs","useResizeObserver","DataViewsContext","default","DataViewsFilters","useFilters","FiltersToggle","DataViewsLayout","DataViewsFooter","DataViewsSearch","BulkActionsFooter","DataViewsPagination","DataViewsViewConfig","DataviewsViewConfigDropdown","ViewTypeMenu","normalizeFields","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","defaultGetItemId","item","id","defaultIsItemClickable","EMPTY_ARRAY","DefaultUI","header","search","searchLabel","undefined","isShowingFilter","children","alignment","justify","className","spacing","expanded","label","style","flexShrink","DataViews","view","onChangeView","fields","actions","data","getItemId","getItemLevel","isLoading","paginationInfo","defaultLayouts","selection","selectionProperty","onChangeSelection","onClickItem","renderItemLink","isItemClickable","perPageSizes","containerRef","containerWidth","setContainerWidth","resizeObserverRef","resizeObserverEntries","borderBoxSize","inlineSize","box","selectionState","setSelectionState","isUncontrolled","openedFilter","setOpenedFilter","setSelectionWithChange","value","newValue","_fields","_selection","filter","some","filters","setIsShowingFilter","isPrimary","Provider","ref","DataViewsSubComponents","BulkActionToolbar","Filters","Layout","LayoutSwitcher","Pagination","Search","ViewConfig"],"sources":["@wordpress/dataviews/src/components/dataviews/index.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport type { ReactNode, ComponentProps, ReactElement } from 'react';\n\n/**\n * WordPress dependencies\n */\nimport { __experimentalHStack as HStack } from '@wordpress/components';\nimport { useContext, useMemo, useRef, useState } from '@wordpress/element';\nimport { useMergeRefs, useResizeObserver } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport DataViewsContext from '../dataviews-context';\nimport {\n\tdefault as DataViewsFilters,\n\tuseFilters,\n\tFiltersToggle,\n} from '../dataviews-filters';\nimport DataViewsLayout from '../dataviews-layout';\nimport DataViewsFooter from '../dataviews-footer';\nimport DataViewsSearch from '../dataviews-search';\nimport { BulkActionsFooter } from '../dataviews-bulk-actions';\nimport { DataViewsPagination } from '../dataviews-pagination';\nimport DataViewsViewConfig, {\n\tDataviewsViewConfigDropdown,\n\tViewTypeMenu,\n} from '../dataviews-view-config';\nimport { normalizeFields } from '../../normalize-fields';\nimport type { Action, Field, View, SupportedLayouts } from '../../types';\nimport type { SelectionOrUpdater } from '../../private-types';\ntype ItemWithId = { id: string };\n\ntype DataViewsProps< Item > = {\n\tview: View;\n\tonChangeView: ( view: View ) => void;\n\tfields: Field< Item >[];\n\tsearch?: boolean;\n\tsearchLabel?: string;\n\tactions?: Action< Item >[];\n\tdata: Item[];\n\tisLoading?: boolean;\n\tpaginationInfo: {\n\t\ttotalItems: number;\n\t\ttotalPages: number;\n\t};\n\tdefaultLayouts: SupportedLayouts;\n\tselection?: string[];\n\tonChangeSelection?: ( items: string[] ) => void;\n\tonClickItem?: ( item: Item ) => void;\n\trenderItemLink?: (\n\t\tprops: {\n\t\t\titem: Item;\n\t\t} & ComponentProps< 'a' >\n\t) => ReactElement;\n\tisItemClickable?: ( item: Item ) => boolean;\n\theader?: ReactNode;\n\tgetItemLevel?: ( item: Item ) => number;\n\tchildren?: ReactNode;\n\tperPageSizes?: [ number, number, number, number ];\n} & ( Item extends ItemWithId\n\t? { getItemId?: ( item: Item ) => string }\n\t: { getItemId: ( item: Item ) => string } );\n\nconst defaultGetItemId = ( item: ItemWithId ) => item.id;\nconst defaultIsItemClickable = () => true;\nconst EMPTY_ARRAY: any[] = [];\n\ntype DefaultUIProps = Pick<\n\tDataViewsProps< any >,\n\t'header' | 'search' | 'searchLabel'\n>;\n\nfunction DefaultUI( {\n\theader,\n\tsearch = true,\n\tsearchLabel = undefined,\n}: DefaultUIProps ) {\n\tconst { isShowingFilter } = useContext( DataViewsContext );\n\treturn (\n\t\t<>\n\t\t\t<HStack\n\t\t\t\talignment=\"top\"\n\t\t\t\tjustify=\"space-between\"\n\t\t\t\tclassName=\"dataviews__view-actions\"\n\t\t\t\tspacing={ 1 }\n\t\t\t>\n\t\t\t\t<HStack\n\t\t\t\t\tjustify=\"start\"\n\t\t\t\t\texpanded={ false }\n\t\t\t\t\tclassName=\"dataviews__search\"\n\t\t\t\t>\n\t\t\t\t\t{ search && <DataViewsSearch label={ searchLabel } /> }\n\t\t\t\t\t<FiltersToggle />\n\t\t\t\t</HStack>\n\t\t\t\t<HStack\n\t\t\t\t\tspacing={ 1 }\n\t\t\t\t\texpanded={ false }\n\t\t\t\t\tstyle={ { flexShrink: 0 } }\n\t\t\t\t>\n\t\t\t\t\t<DataViewsViewConfig />\n\t\t\t\t\t{ header }\n\t\t\t\t</HStack>\n\t\t\t</HStack>\n\t\t\t{ isShowingFilter && (\n\t\t\t\t<DataViewsFilters className=\"dataviews-filters__container\" />\n\t\t\t) }\n\t\t\t<DataViewsLayout />\n\t\t\t<DataViewsFooter />\n\t\t</>\n\t);\n}\n\nfunction DataViews< Item >( {\n\tview,\n\tonChangeView,\n\tfields,\n\tsearch = true,\n\tsearchLabel = undefined,\n\tactions = EMPTY_ARRAY,\n\tdata,\n\tgetItemId = defaultGetItemId,\n\tgetItemLevel,\n\tisLoading = false,\n\tpaginationInfo,\n\tdefaultLayouts,\n\tselection: selectionProperty,\n\tonChangeSelection,\n\tonClickItem,\n\trenderItemLink,\n\tisItemClickable = defaultIsItemClickable,\n\theader,\n\tchildren,\n\tperPageSizes,\n}: DataViewsProps< Item > ) {\n\tconst containerRef = useRef< HTMLDivElement | null >( null );\n\tconst [ containerWidth, setContainerWidth ] = useState( 0 );\n\tconst resizeObserverRef = useResizeObserver(\n\t\t( resizeObserverEntries: any ) => {\n\t\t\tsetContainerWidth(\n\t\t\t\tresizeObserverEntries[ 0 ].borderBoxSize[ 0 ].inlineSize\n\t\t\t);\n\t\t},\n\t\t{ box: 'border-box' }\n\t);\n\tconst [ selectionState, setSelectionState ] = useState< string[] >( [] );\n\tconst isUncontrolled =\n\t\tselectionProperty === undefined || onChangeSelection === undefined;\n\tconst selection = isUncontrolled ? selectionState : selectionProperty;\n\tconst [ openedFilter, setOpenedFilter ] = useState< string | null >( null );\n\tfunction setSelectionWithChange( value: SelectionOrUpdater ) {\n\t\tconst newValue =\n\t\t\ttypeof value === 'function' ? value( selection ) : value;\n\t\tif ( isUncontrolled ) {\n\t\t\tsetSelectionState( newValue );\n\t\t}\n\t\tif ( onChangeSelection ) {\n\t\t\tonChangeSelection( newValue );\n\t\t}\n\t}\n\tconst _fields = useMemo( () => normalizeFields( fields ), [ fields ] );\n\tconst _selection = useMemo( () => {\n\t\treturn selection.filter( ( id ) =>\n\t\t\tdata.some( ( item ) => getItemId( item ) === id )\n\t\t);\n\t}, [ selection, data, getItemId ] );\n\n\tconst filters = useFilters( _fields, view );\n\tconst [ isShowingFilter, setIsShowingFilter ] = useState< boolean >( () =>\n\t\t( filters || [] ).some( ( filter ) => filter.isPrimary )\n\t);\n\n\treturn (\n\t\t<DataViewsContext.Provider\n\t\t\tvalue={ {\n\t\t\t\tview,\n\t\t\t\tonChangeView,\n\t\t\t\tfields: _fields,\n\t\t\t\tactions,\n\t\t\t\tdata,\n\t\t\t\tisLoading,\n\t\t\t\tpaginationInfo,\n\t\t\t\tselection: _selection,\n\t\t\t\tonChangeSelection: setSelectionWithChange,\n\t\t\t\topenedFilter,\n\t\t\t\tsetOpenedFilter,\n\t\t\t\tgetItemId,\n\t\t\t\tgetItemLevel,\n\t\t\t\tisItemClickable,\n\t\t\t\tonClickItem,\n\t\t\t\trenderItemLink,\n\t\t\t\tcontainerWidth,\n\t\t\t\tcontainerRef,\n\t\t\t\tdefaultLayouts,\n\t\t\t\tfilters,\n\t\t\t\tisShowingFilter,\n\t\t\t\tsetIsShowingFilter,\n\t\t\t\tperPageSizes,\n\t\t\t} }\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName=\"dataviews-wrapper\"\n\t\t\t\tref={ useMergeRefs( [ containerRef, resizeObserverRef ] ) }\n\t\t\t>\n\t\t\t\t{ children ?? (\n\t\t\t\t\t<DefaultUI\n\t\t\t\t\t\theader={ header }\n\t\t\t\t\t\tsearch={ search }\n\t\t\t\t\t\tsearchLabel={ searchLabel }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</div>\n\t\t</DataViewsContext.Provider>\n\t);\n}\n\n// Populate the DataViews sub components\nconst DataViewsSubComponents = DataViews as typeof DataViews & {\n\tBulkActionToolbar: typeof BulkActionsFooter;\n\tFilters: typeof DataViewsFilters;\n\tFiltersToggle: typeof FiltersToggle;\n\tLayout: typeof DataViewsLayout;\n\tLayoutSwitcher: typeof ViewTypeMenu;\n\tPagination: typeof DataViewsPagination;\n\tSearch: typeof DataViewsSearch;\n\tViewConfig: typeof DataviewsViewConfigDropdown;\n};\n\nDataViewsSubComponents.BulkActionToolbar = BulkActionsFooter;\nDataViewsSubComponents.Filters = DataViewsFilters;\nDataViewsSubComponents.FiltersToggle = FiltersToggle;\nDataViewsSubComponents.Layout = DataViewsLayout;\nDataViewsSubComponents.LayoutSwitcher = ViewTypeMenu;\nDataViewsSubComponents.Pagination = DataViewsPagination;\nDataViewsSubComponents.Search = DataViewsSearch;\nDataViewsSubComponents.ViewConfig = DataviewsViewConfigDropdown;\n\nexport default DataViewsSubComponents;\n"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,11 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+
1
5
  /**
2
6
  * WordPress dependencies
3
7
  */
4
- import { createContext } from '@wordpress/element';
8
+ import { createContext, createRef } from '@wordpress/element';
5
9
 
6
10
  /**
7
11
  * Internal dependencies
@@ -25,7 +29,17 @@ const DataViewsContext = createContext({
25
29
  openedFilter: null,
26
30
  getItemId: item => item.id,
27
31
  isItemClickable: () => true,
28
- containerWidth: 0
32
+ renderItemLink: undefined,
33
+ containerWidth: 0,
34
+ containerRef: createRef(),
35
+ defaultLayouts: {
36
+ list: {},
37
+ grid: {},
38
+ table: {}
39
+ },
40
+ filters: [],
41
+ isShowingFilter: false,
42
+ setIsShowingFilter: () => {}
29
43
  });
30
44
  export default DataViewsContext;
31
45
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","LAYOUT_TABLE","DataViewsContext","view","type","onChangeView","fields","data","paginationInfo","totalItems","totalPages","selection","onChangeSelection","setOpenedFilter","openedFilter","getItemId","item","id","isItemClickable","containerWidth"],"sources":["@wordpress/dataviews/src/components/dataviews-context/index.ts"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createContext } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type { View, Action, NormalizedField } from '../../types';\nimport type { SetSelection } from '../../private-types';\nimport { LAYOUT_TABLE } from '../../constants';\n\ntype DataViewsContextType< Item > = {\n\tview: View;\n\tonChangeView: ( view: View ) => void;\n\tfields: NormalizedField< Item >[];\n\tactions?: Action< Item >[];\n\tdata: Item[];\n\tisLoading?: boolean;\n\tpaginationInfo: {\n\t\ttotalItems: number;\n\t\ttotalPages: number;\n\t};\n\tselection: string[];\n\tonChangeSelection: SetSelection;\n\topenedFilter: string | null;\n\tsetOpenedFilter: ( openedFilter: string | null ) => void;\n\tgetItemId: ( item: Item ) => string;\n\tgetItemLevel?: ( item: Item ) => number;\n\tonClickItem?: ( item: Item ) => void;\n\tisItemClickable: ( item: Item ) => boolean;\n\tcontainerWidth: number;\n};\n\nconst DataViewsContext = createContext< DataViewsContextType< any > >( {\n\tview: { type: LAYOUT_TABLE },\n\tonChangeView: () => {},\n\tfields: [],\n\tdata: [],\n\tpaginationInfo: {\n\t\ttotalItems: 0,\n\t\ttotalPages: 0,\n\t},\n\tselection: [],\n\tonChangeSelection: () => {},\n\tsetOpenedFilter: () => {},\n\topenedFilter: null,\n\tgetItemId: ( item ) => item.id,\n\tisItemClickable: () => true,\n\tcontainerWidth: 0,\n} );\n\nexport default DataViewsContext;\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,aAAa,QAAQ,oBAAoB;;AAElD;AACA;AACA;;AAGA,SAASC,YAAY,QAAQ,iBAAiB;AAwB9C,MAAMC,gBAAgB,GAAGF,aAAa,CAAiC;EACtEG,IAAI,EAAE;IAAEC,IAAI,EAAEH;EAAa,CAAC;EAC5BI,YAAY,EAAEA,CAAA,KAAM,CAAC,CAAC;EACtBC,MAAM,EAAE,EAAE;EACVC,IAAI,EAAE,EAAE;EACRC,cAAc,EAAE;IACfC,UAAU,EAAE,CAAC;IACbC,UAAU,EAAE;EACb,CAAC;EACDC,SAAS,EAAE,EAAE;EACbC,iBAAiB,EAAEA,CAAA,KAAM,CAAC,CAAC;EAC3BC,eAAe,EAAEA,CAAA,KAAM,CAAC,CAAC;EACzBC,YAAY,EAAE,IAAI;EAClBC,SAAS,EAAIC,IAAI,IAAMA,IAAI,CAACC,EAAE;EAC9BC,eAAe,EAAEA,CAAA,KAAM,IAAI;EAC3BC,cAAc,EAAE;AACjB,CAAE,CAAC;AAEH,eAAejB,gBAAgB","ignoreList":[]}
1
+ {"version":3,"names":["createContext","createRef","LAYOUT_TABLE","DataViewsContext","view","type","onChangeView","fields","data","paginationInfo","totalItems","totalPages","selection","onChangeSelection","setOpenedFilter","openedFilter","getItemId","item","id","isItemClickable","renderItemLink","undefined","containerWidth","containerRef","defaultLayouts","list","grid","table","filters","isShowingFilter","setIsShowingFilter"],"sources":["@wordpress/dataviews/src/components/dataviews-context/index.ts"],"sourcesContent":["/**\n * External dependencies\n */\nimport type { ComponentProps, ReactElement } from 'react';\n\n/**\n * WordPress dependencies\n */\nimport { createContext, createRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type {\n\tView,\n\tAction,\n\tNormalizedField,\n\tSupportedLayouts,\n\tNormalizedFilter,\n} from '../../types';\nimport type { SetSelection } from '../../private-types';\nimport { LAYOUT_TABLE } from '../../constants';\n\ntype DataViewsContextType< Item > = {\n\tview: View;\n\tonChangeView: ( view: View ) => void;\n\tfields: NormalizedField< Item >[];\n\tactions?: Action< Item >[];\n\tdata: Item[];\n\tisLoading?: boolean;\n\tpaginationInfo: {\n\t\ttotalItems: number;\n\t\ttotalPages: number;\n\t};\n\tselection: string[];\n\tonChangeSelection: SetSelection;\n\topenedFilter: string | null;\n\tsetOpenedFilter: ( openedFilter: string | null ) => void;\n\tgetItemId: ( item: Item ) => string;\n\tgetItemLevel?: ( item: Item ) => number;\n\tonClickItem?: ( item: Item ) => void;\n\trenderItemLink?: (\n\t\tprops: {\n\t\t\titem: Item;\n\t\t} & ComponentProps< 'a' >\n\t) => ReactElement;\n\tisItemClickable: ( item: Item ) => boolean;\n\tcontainerWidth: number;\n\tcontainerRef: React.MutableRefObject< HTMLDivElement | null >;\n\tdefaultLayouts: SupportedLayouts;\n\tfilters: NormalizedFilter[];\n\tisShowingFilter: boolean;\n\tsetIsShowingFilter: ( value: boolean ) => void;\n\tperPageSizes?: [ number, number, number, number ];\n};\n\nconst DataViewsContext = createContext< DataViewsContextType< any > >( {\n\tview: { type: LAYOUT_TABLE },\n\tonChangeView: () => {},\n\tfields: [],\n\tdata: [],\n\tpaginationInfo: {\n\t\ttotalItems: 0,\n\t\ttotalPages: 0,\n\t},\n\tselection: [],\n\tonChangeSelection: () => {},\n\tsetOpenedFilter: () => {},\n\topenedFilter: null,\n\tgetItemId: ( item ) => item.id,\n\tisItemClickable: () => true,\n\trenderItemLink: undefined,\n\tcontainerWidth: 0,\n\tcontainerRef: createRef(),\n\tdefaultLayouts: { list: {}, grid: {}, table: {} },\n\tfilters: [],\n\tisShowingFilter: false,\n\tsetIsShowingFilter: () => {},\n} );\n\nexport default DataViewsContext;\n"],"mappings":"AAAA;AACA;AACA;;AAGA;AACA;AACA;AACA,SAASA,aAAa,EAAEC,SAAS,QAAQ,oBAAoB;;AAE7D;AACA;AACA;;AASA,SAASC,YAAY,QAAQ,iBAAiB;AAmC9C,MAAMC,gBAAgB,GAAGH,aAAa,CAAiC;EACtEI,IAAI,EAAE;IAAEC,IAAI,EAAEH;EAAa,CAAC;EAC5BI,YAAY,EAAEA,CAAA,KAAM,CAAC,CAAC;EACtBC,MAAM,EAAE,EAAE;EACVC,IAAI,EAAE,EAAE;EACRC,cAAc,EAAE;IACfC,UAAU,EAAE,CAAC;IACbC,UAAU,EAAE;EACb,CAAC;EACDC,SAAS,EAAE,EAAE;EACbC,iBAAiB,EAAEA,CAAA,KAAM,CAAC,CAAC;EAC3BC,eAAe,EAAEA,CAAA,KAAM,CAAC,CAAC;EACzBC,YAAY,EAAE,IAAI;EAClBC,SAAS,EAAIC,IAAI,IAAMA,IAAI,CAACC,EAAE;EAC9BC,eAAe,EAAEA,CAAA,KAAM,IAAI;EAC3BC,cAAc,EAAEC,SAAS;EACzBC,cAAc,EAAE,CAAC;EACjBC,YAAY,EAAEtB,SAAS,CAAC,CAAC;EACzBuB,cAAc,EAAE;IAAEC,IAAI,EAAE,CAAC,CAAC;IAAEC,IAAI,EAAE,CAAC,CAAC;IAAEC,KAAK,EAAE,CAAC;EAAE,CAAC;EACjDC,OAAO,EAAE,EAAE;EACXC,eAAe,EAAE,KAAK;EACtBC,kBAAkB,EAAEA,CAAA,KAAM,CAAC;AAC5B,CAAE,CAAC;AAEH,eAAe3B,gBAAgB","ignoreList":[]}
@@ -0,0 +1,309 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import clsx from 'clsx';
5
+ /**
6
+ * WordPress dependencies
7
+ */
8
+ import { Dropdown, __experimentalVStack as VStack, __experimentalHStack as HStack, FlexItem, SelectControl, Tooltip, Icon } from '@wordpress/components';
9
+ import { __, sprintf } from '@wordpress/i18n';
10
+ import { useRef, createInterpolateElement } from '@wordpress/element';
11
+ import { closeSmall } from '@wordpress/icons';
12
+ const ENTER = 'Enter';
13
+ const SPACE = ' ';
14
+
15
+ /**
16
+ * Internal dependencies
17
+ */
18
+ import SearchWidget from './search-widget';
19
+ import InputWidget from './input-widget';
20
+ import { OPERATORS, OPERATOR_IS, OPERATOR_IS_NOT, OPERATOR_IS_ANY, OPERATOR_IS_NONE, OPERATOR_IS_ALL, OPERATOR_IS_NOT_ALL, OPERATOR_LESS_THAN, OPERATOR_GREATER_THAN, OPERATOR_LESS_THAN_OR_EQUAL, OPERATOR_GREATER_THAN_OR_EQUAL, OPERATOR_CONTAINS, OPERATOR_NOT_CONTAINS, OPERATOR_STARTS_WITH, OPERATOR_BEFORE, OPERATOR_AFTER, OPERATOR_BEFORE_INC, OPERATOR_AFTER_INC, OPERATOR_BETWEEN, OPERATOR_ON, OPERATOR_NOT_ON, OPERATOR_IN_THE_PAST, OPERATOR_OVER } from '../../constants';
21
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
22
+ const FilterText = ({
23
+ activeElements,
24
+ filterInView,
25
+ filter
26
+ }) => {
27
+ if (activeElements === undefined || activeElements.length === 0) {
28
+ return filter.name;
29
+ }
30
+ const filterTextWrappers = {
31
+ Name: /*#__PURE__*/_jsx("span", {
32
+ className: "dataviews-filters__summary-filter-text-name"
33
+ }),
34
+ Value: /*#__PURE__*/_jsx("span", {
35
+ className: "dataviews-filters__summary-filter-text-value"
36
+ })
37
+ };
38
+ if (filterInView?.operator === OPERATOR_IS_ANY) {
39
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Author is any: Admin, Editor". */
40
+ __('<Name>%1$s is any: </Name><Value>%2$s</Value>'), filter.name, activeElements.map(element => element.label).join(', ')), filterTextWrappers);
41
+ }
42
+ if (filterInView?.operator === OPERATOR_IS_NONE) {
43
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Author is none: Admin, Editor". */
44
+ __('<Name>%1$s is none: </Name><Value>%2$s</Value>'), filter.name, activeElements.map(element => element.label).join(', ')), filterTextWrappers);
45
+ }
46
+ if (filterInView?.operator === OPERATOR_IS_ALL) {
47
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Author is all: Admin, Editor". */
48
+ __('<Name>%1$s is all: </Name><Value>%2$s</Value>'), filter.name, activeElements.map(element => element.label).join(', ')), filterTextWrappers);
49
+ }
50
+ if (filterInView?.operator === OPERATOR_IS_NOT_ALL) {
51
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Author is not all: Admin, Editor". */
52
+ __('<Name>%1$s is not all: </Name><Value>%2$s</Value>'), filter.name, activeElements.map(element => element.label).join(', ')), filterTextWrappers);
53
+ }
54
+ if (filterInView?.operator === OPERATOR_IS) {
55
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Author is: Admin". */
56
+ __('<Name>%1$s is: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
57
+ }
58
+ if (filterInView?.operator === OPERATOR_IS_NOT) {
59
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Author is not: Admin". */
60
+ __('<Name>%1$s is not: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
61
+ }
62
+ if (filterInView?.operator === OPERATOR_LESS_THAN) {
63
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Price is less than: 10". */
64
+ __('<Name>%1$s is less than: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
65
+ }
66
+ if (filterInView?.operator === OPERATOR_GREATER_THAN) {
67
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Price is greater than: 10". */
68
+ __('<Name>%1$s is greater than: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
69
+ }
70
+ if (filterInView?.operator === OPERATOR_LESS_THAN_OR_EQUAL) {
71
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Price is less than or equal to: 10". */
72
+ __('<Name>%1$s is less than or equal to: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
73
+ }
74
+ if (filterInView?.operator === OPERATOR_GREATER_THAN_OR_EQUAL) {
75
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Price is greater than or equal to: 10". */
76
+ __('<Name>%1$s is greater than or equal to: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
77
+ }
78
+ if (filterInView?.operator === OPERATOR_CONTAINS) {
79
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Title contains: Mars". */
80
+ __('<Name>%1$s contains: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
81
+ }
82
+ if (filterInView?.operator === OPERATOR_NOT_CONTAINS) {
83
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Description doesn't contain: photo". */
84
+ __("<Name>%1$s doesn't contain: </Name><Value>%2$s</Value>"), filter.name, activeElements[0].label), filterTextWrappers);
85
+ }
86
+ if (filterInView?.operator === OPERATOR_STARTS_WITH) {
87
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Title starts with: Mar". */
88
+ __('<Name>%1$s starts with: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
89
+ }
90
+ if (filterInView?.operator === OPERATOR_BEFORE) {
91
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Date is before: 2024-01-01". */
92
+ __('<Name>%1$s is before: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
93
+ }
94
+ if (filterInView?.operator === OPERATOR_AFTER) {
95
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Date is after: 2024-01-01". */
96
+ __('<Name>%1$s is after: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
97
+ }
98
+ if (filterInView?.operator === OPERATOR_BEFORE_INC) {
99
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Date is on or before: 2024-01-01". */
100
+ __('<Name>%1$s is on or before: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
101
+ }
102
+ if (filterInView?.operator === OPERATOR_AFTER_INC) {
103
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Date is on or after: 2024-01-01". */
104
+ __('<Name>%1$s is on or after: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
105
+ }
106
+ if (filterInView?.operator === OPERATOR_BETWEEN) {
107
+ const {
108
+ label
109
+ } = activeElements[0];
110
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Min value. 3: Max value. e.g.: "Item count between (inc): 10-180". */
111
+ __('<Name>%1$s between (inc): </Name><Value>%2$s-%3$s</Value>'), filter.name, label[0], label[1]), filterTextWrappers);
112
+ }
113
+ if (filterInView?.operator === OPERATOR_ON) {
114
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Date is: 2024-01-01". */
115
+ __('<Name>%1$s is: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
116
+ }
117
+ if (filterInView?.operator === OPERATOR_NOT_ON) {
118
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Date is not: 2024-01-01". */
119
+ __('<Name>%1$s is not: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
120
+ }
121
+ if (filterInView?.operator === OPERATOR_IN_THE_PAST) {
122
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Date is in the past: 1 days". */
123
+ __('<Name>%1$s is in the past: </Name><Value>%2$s</Value>'), filter.name, `${activeElements[0].value.value} ${activeElements[0].value.unit}`), filterTextWrappers);
124
+ }
125
+ if (filterInView?.operator === OPERATOR_OVER) {
126
+ return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Date is over: 1 days ago". */
127
+ __('<Name>%1$s is over: </Name><Value>%2$s</Value> ago'), filter.name, `${activeElements[0].value.value} ${activeElements[0].value.unit}`), filterTextWrappers);
128
+ }
129
+ return sprintf(/* translators: 1: Filter name e.g.: "Unknown status for Author". */
130
+ __('Unknown status for %1$s'), filter.name);
131
+ };
132
+ function OperatorSelector({
133
+ filter,
134
+ view,
135
+ onChangeView
136
+ }) {
137
+ const operatorOptions = filter.operators?.map(operator => ({
138
+ value: operator,
139
+ label: OPERATORS[operator]?.label
140
+ }));
141
+ const currentFilter = view.filters?.find(_filter => _filter.field === filter.field);
142
+ const value = currentFilter?.operator || filter.operators[0];
143
+ return operatorOptions.length > 1 && /*#__PURE__*/_jsxs(HStack, {
144
+ spacing: 2,
145
+ justify: "flex-start",
146
+ className: "dataviews-filters__summary-operators-container",
147
+ children: [/*#__PURE__*/_jsx(FlexItem, {
148
+ className: "dataviews-filters__summary-operators-filter-name",
149
+ children: filter.name
150
+ }), /*#__PURE__*/_jsx(SelectControl, {
151
+ className: "dataviews-filters__summary-operators-filter-select",
152
+ label: __('Conditions'),
153
+ value: value,
154
+ options: operatorOptions,
155
+ onChange: newValue => {
156
+ var _view$filters, _view$filters2;
157
+ const operator = newValue;
158
+ const currentOperator = currentFilter?.operator;
159
+ const newFilters = currentFilter ? [...((_view$filters = view.filters) !== null && _view$filters !== void 0 ? _view$filters : []).map(_filter => {
160
+ if (_filter.field === filter.field) {
161
+ // Reset the value only when switching between operators that have different value types.
162
+ const OPERATORS_SHOULD_RESET_VALUE = [OPERATOR_BETWEEN, OPERATOR_IN_THE_PAST, OPERATOR_OVER];
163
+ const shouldResetValue = currentOperator && (OPERATORS_SHOULD_RESET_VALUE.includes(currentOperator) || OPERATORS_SHOULD_RESET_VALUE.includes(operator));
164
+ return {
165
+ ..._filter,
166
+ value: shouldResetValue ? undefined : _filter.value,
167
+ operator
168
+ };
169
+ }
170
+ return _filter;
171
+ })] : [...((_view$filters2 = view.filters) !== null && _view$filters2 !== void 0 ? _view$filters2 : []), {
172
+ field: filter.field,
173
+ operator,
174
+ value: undefined
175
+ }];
176
+ onChangeView({
177
+ ...view,
178
+ page: 1,
179
+ filters: newFilters
180
+ });
181
+ },
182
+ size: "small",
183
+ variant: "minimal",
184
+ __nextHasNoMarginBottom: true,
185
+ hideLabelFromVision: true
186
+ })]
187
+ });
188
+ }
189
+ export default function Filter({
190
+ addFilterRef,
191
+ openedFilter,
192
+ fields,
193
+ ...commonProps
194
+ }) {
195
+ const toggleRef = useRef(null);
196
+ const {
197
+ filter,
198
+ view,
199
+ onChangeView
200
+ } = commonProps;
201
+ const filterInView = view.filters?.find(f => f.field === filter.field);
202
+ let activeElements = [];
203
+ if (filter.elements.length > 0) {
204
+ activeElements = filter.elements.filter(element => {
205
+ if (filter.singleSelection) {
206
+ return element.value === filterInView?.value;
207
+ }
208
+ return filterInView?.value?.includes(element.value);
209
+ });
210
+ } else if (filterInView?.value !== undefined) {
211
+ activeElements = [{
212
+ value: filterInView.value,
213
+ label: filterInView.value
214
+ }];
215
+ }
216
+ const isPrimary = filter.isPrimary;
217
+ const hasValues = filterInView?.value !== undefined;
218
+ const canResetOrRemove = !isPrimary || hasValues;
219
+ return /*#__PURE__*/_jsx(Dropdown, {
220
+ defaultOpen: openedFilter === filter.field,
221
+ contentClassName: "dataviews-filters__summary-popover",
222
+ popoverProps: {
223
+ placement: 'bottom-start',
224
+ role: 'dialog'
225
+ },
226
+ onClose: () => {
227
+ toggleRef.current?.focus();
228
+ },
229
+ renderToggle: ({
230
+ isOpen,
231
+ onToggle
232
+ }) => /*#__PURE__*/_jsxs("div", {
233
+ className: "dataviews-filters__summary-chip-container",
234
+ children: [/*#__PURE__*/_jsx(Tooltip, {
235
+ text: sprintf(/* translators: 1: Filter name. */
236
+ __('Filter by: %1$s'), filter.name.toLowerCase()),
237
+ placement: "top",
238
+ children: /*#__PURE__*/_jsx("div", {
239
+ className: clsx('dataviews-filters__summary-chip', {
240
+ 'has-reset': canResetOrRemove,
241
+ 'has-values': hasValues
242
+ }),
243
+ role: "button",
244
+ tabIndex: 0,
245
+ onClick: onToggle,
246
+ onKeyDown: event => {
247
+ if ([ENTER, SPACE].includes(event.key)) {
248
+ onToggle();
249
+ event.preventDefault();
250
+ }
251
+ },
252
+ "aria-pressed": isOpen,
253
+ "aria-expanded": isOpen,
254
+ ref: toggleRef,
255
+ children: /*#__PURE__*/_jsx(FilterText, {
256
+ activeElements: activeElements,
257
+ filterInView: filterInView,
258
+ filter: filter
259
+ })
260
+ })
261
+ }), canResetOrRemove && /*#__PURE__*/_jsx(Tooltip, {
262
+ text: isPrimary ? __('Reset') : __('Remove'),
263
+ placement: "top",
264
+ children: /*#__PURE__*/_jsx("button", {
265
+ className: clsx('dataviews-filters__summary-chip-remove', {
266
+ 'has-values': hasValues
267
+ }),
268
+ onClick: () => {
269
+ onChangeView({
270
+ ...view,
271
+ page: 1,
272
+ filters: view.filters?.filter(_filter => _filter.field !== filter.field)
273
+ });
274
+ // If the filter is not primary and can be removed, it will be added
275
+ // back to the available filters from `Add filter` component.
276
+ if (!isPrimary) {
277
+ addFilterRef.current?.focus();
278
+ } else {
279
+ // If is primary, focus the toggle button.
280
+ toggleRef.current?.focus();
281
+ }
282
+ },
283
+ children: /*#__PURE__*/_jsx(Icon, {
284
+ icon: closeSmall
285
+ })
286
+ })
287
+ })]
288
+ }),
289
+ renderContent: () => {
290
+ return /*#__PURE__*/_jsxs(VStack, {
291
+ spacing: 0,
292
+ justify: "flex-start",
293
+ children: [/*#__PURE__*/_jsx(OperatorSelector, {
294
+ ...commonProps
295
+ }), commonProps.filter.elements.length > 0 ? /*#__PURE__*/_jsx(SearchWidget, {
296
+ ...commonProps,
297
+ filter: {
298
+ ...commonProps.filter,
299
+ elements: commonProps.filter.elements
300
+ }
301
+ }) : /*#__PURE__*/_jsx(InputWidget, {
302
+ ...commonProps,
303
+ fields: fields
304
+ })]
305
+ });
306
+ }
307
+ });
308
+ }
309
+ //# sourceMappingURL=filter.js.map