@wordpress/dataviews 4.1.0 → 4.3.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 (223) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +77 -29
  3. package/build/components/dataviews/index.js +10 -14
  4. package/build/components/dataviews/index.js.map +1 -1
  5. package/build/components/dataviews-bulk-actions/index.js +145 -141
  6. package/build/components/dataviews-bulk-actions/index.js.map +1 -1
  7. package/build/components/dataviews-filters/add-filter.js +4 -6
  8. package/build/components/dataviews-filters/add-filter.js.map +1 -1
  9. package/build/components/dataviews-filters/index.js +3 -0
  10. package/build/components/dataviews-filters/index.js.map +1 -1
  11. package/build/components/dataviews-filters/search-widget.js +30 -23
  12. package/build/components/dataviews-filters/search-widget.js.map +1 -1
  13. package/build/components/dataviews-footer/index.js +45 -0
  14. package/build/components/dataviews-footer/index.js.map +1 -0
  15. package/build/components/dataviews-item-actions/index.js +5 -8
  16. package/build/components/dataviews-item-actions/index.js.map +1 -1
  17. package/build/components/dataviews-pagination/index.js +27 -19
  18. package/build/components/dataviews-pagination/index.js.map +1 -1
  19. package/build/components/dataviews-view-config/index.js +197 -41
  20. package/build/components/dataviews-view-config/index.js.map +1 -1
  21. package/build/dataform-controls/datetime.js +49 -0
  22. package/build/dataform-controls/datetime.js.map +1 -0
  23. package/build/dataform-controls/index.js +50 -0
  24. package/build/dataform-controls/index.js.map +1 -0
  25. package/build/dataform-controls/integer.js +45 -0
  26. package/build/dataform-controls/integer.js.map +1 -0
  27. package/build/dataform-controls/radio.js +45 -0
  28. package/build/dataform-controls/radio.js.map +1 -0
  29. package/build/dataform-controls/select.js +58 -0
  30. package/build/dataform-controls/select.js.map +1 -0
  31. package/build/dataform-controls/text.js +45 -0
  32. package/build/dataform-controls/text.js.map +1 -0
  33. package/build/dataforms-layouts/panel/index.js +10 -4
  34. package/build/dataforms-layouts/panel/index.js.map +1 -1
  35. package/build/dataforms-layouts/regular/index.js +6 -3
  36. package/build/dataforms-layouts/regular/index.js.map +1 -1
  37. package/build/dataviews-layouts/grid/density-picker.js +23 -52
  38. package/build/dataviews-layouts/grid/density-picker.js.map +1 -1
  39. package/build/dataviews-layouts/grid/index.js +1 -1
  40. package/build/dataviews-layouts/grid/index.js.map +1 -1
  41. package/build/dataviews-layouts/index.js +48 -2
  42. package/build/dataviews-layouts/index.js.map +1 -1
  43. package/build/dataviews-layouts/list/index.js +124 -80
  44. package/build/dataviews-layouts/list/index.js.map +1 -1
  45. package/build/dataviews-layouts/table/column-header-menu.js +52 -57
  46. package/build/dataviews-layouts/table/column-header-menu.js.map +1 -1
  47. package/build/dataviews-layouts/table/index.js +7 -35
  48. package/build/dataviews-layouts/table/index.js.map +1 -1
  49. package/build/field-types/datetime.js +30 -0
  50. package/build/field-types/datetime.js.map +1 -0
  51. package/build/field-types/index.js +4 -0
  52. package/build/field-types/index.js.map +1 -1
  53. package/build/field-types/integer.js +1 -60
  54. package/build/field-types/integer.js.map +1 -1
  55. package/build/field-types/text.js +1 -60
  56. package/build/field-types/text.js.map +1 -1
  57. package/build/normalize-fields.js +10 -9
  58. package/build/normalize-fields.js.map +1 -1
  59. package/build/types.js.map +1 -1
  60. package/build-module/components/dataviews/index.js +10 -14
  61. package/build-module/components/dataviews/index.js.map +1 -1
  62. package/build-module/components/dataviews-bulk-actions/index.js +145 -143
  63. package/build-module/components/dataviews-bulk-actions/index.js.map +1 -1
  64. package/build-module/components/dataviews-filters/add-filter.js +4 -6
  65. package/build-module/components/dataviews-filters/add-filter.js.map +1 -1
  66. package/build-module/components/dataviews-filters/index.js +3 -0
  67. package/build-module/components/dataviews-filters/index.js.map +1 -1
  68. package/build-module/components/dataviews-filters/search-widget.js +30 -23
  69. package/build-module/components/dataviews-filters/search-widget.js.map +1 -1
  70. package/build-module/components/dataviews-footer/index.js +38 -0
  71. package/build-module/components/dataviews-footer/index.js.map +1 -0
  72. package/build-module/components/dataviews-item-actions/index.js +5 -8
  73. package/build-module/components/dataviews-item-actions/index.js.map +1 -1
  74. package/build-module/components/dataviews-pagination/index.js +28 -20
  75. package/build-module/components/dataviews-pagination/index.js.map +1 -1
  76. package/build-module/components/dataviews-view-config/index.js +203 -47
  77. package/build-module/components/dataviews-view-config/index.js.map +1 -1
  78. package/build-module/dataform-controls/datetime.js +43 -0
  79. package/build-module/dataform-controls/datetime.js.map +1 -0
  80. package/build-module/dataform-controls/index.js +42 -0
  81. package/build-module/dataform-controls/index.js.map +1 -0
  82. package/build-module/dataform-controls/integer.js +38 -0
  83. package/build-module/dataform-controls/integer.js.map +1 -0
  84. package/build-module/dataform-controls/radio.js +38 -0
  85. package/build-module/dataform-controls/radio.js.map +1 -0
  86. package/build-module/dataform-controls/select.js +51 -0
  87. package/build-module/dataform-controls/select.js.map +1 -0
  88. package/build-module/dataform-controls/text.js +38 -0
  89. package/build-module/dataform-controls/text.js.map +1 -0
  90. package/build-module/dataforms-layouts/panel/index.js +10 -4
  91. package/build-module/dataforms-layouts/panel/index.js.map +1 -1
  92. package/build-module/dataforms-layouts/regular/index.js +6 -3
  93. package/build-module/dataforms-layouts/regular/index.js.map +1 -1
  94. package/build-module/dataviews-layouts/grid/density-picker.js +25 -56
  95. package/build-module/dataviews-layouts/grid/density-picker.js.map +1 -1
  96. package/build-module/dataviews-layouts/grid/index.js +1 -1
  97. package/build-module/dataviews-layouts/grid/index.js.map +1 -1
  98. package/build-module/dataviews-layouts/index.js +45 -1
  99. package/build-module/dataviews-layouts/index.js.map +1 -1
  100. package/build-module/dataviews-layouts/list/index.js +125 -80
  101. package/build-module/dataviews-layouts/list/index.js.map +1 -1
  102. package/build-module/dataviews-layouts/table/column-header-menu.js +52 -57
  103. package/build-module/dataviews-layouts/table/column-header-menu.js.map +1 -1
  104. package/build-module/dataviews-layouts/table/index.js +9 -37
  105. package/build-module/dataviews-layouts/table/index.js.map +1 -1
  106. package/build-module/field-types/datetime.js +24 -0
  107. package/build-module/field-types/datetime.js.map +1 -0
  108. package/build-module/field-types/index.js +4 -0
  109. package/build-module/field-types/index.js.map +1 -1
  110. package/build-module/field-types/integer.js +2 -60
  111. package/build-module/field-types/integer.js.map +1 -1
  112. package/build-module/field-types/text.js +2 -60
  113. package/build-module/field-types/text.js.map +1 -1
  114. package/build-module/normalize-fields.js +11 -9
  115. package/build-module/normalize-fields.js.map +1 -1
  116. package/build-module/types.js.map +1 -1
  117. package/build-style/style-rtl.css +93 -80
  118. package/build-style/style.css +93 -80
  119. package/build-types/components/dataform/stories/index.story.d.ts.map +1 -1
  120. package/build-types/components/dataviews/index.d.ts.map +1 -1
  121. package/build-types/components/dataviews/stories/fixtures.d.ts +28 -113
  122. package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -1
  123. package/build-types/components/dataviews/stories/index.story.d.ts +12 -44
  124. package/build-types/components/dataviews/stories/index.story.d.ts.map +1 -1
  125. package/build-types/components/dataviews-bulk-actions/index.d.ts +11 -1
  126. package/build-types/components/dataviews-bulk-actions/index.d.ts.map +1 -1
  127. package/build-types/components/dataviews-filters/add-filter.d.ts.map +1 -1
  128. package/build-types/components/dataviews-filters/index.d.ts +1 -1
  129. package/build-types/components/dataviews-filters/index.d.ts.map +1 -1
  130. package/build-types/components/dataviews-filters/search-widget.d.ts.map +1 -1
  131. package/build-types/components/dataviews-footer/index.d.ts +2 -0
  132. package/build-types/components/dataviews-footer/index.d.ts.map +1 -0
  133. package/build-types/components/dataviews-item-actions/index.d.ts.map +1 -1
  134. package/build-types/components/dataviews-pagination/index.d.ts.map +1 -1
  135. package/build-types/components/dataviews-view-config/index.d.ts +4 -3
  136. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
  137. package/build-types/dataform-controls/datetime.d.ts +6 -0
  138. package/build-types/dataform-controls/datetime.d.ts.map +1 -0
  139. package/build-types/dataform-controls/index.d.ts +11 -0
  140. package/build-types/dataform-controls/index.d.ts.map +1 -0
  141. package/build-types/dataform-controls/integer.d.ts +6 -0
  142. package/build-types/dataform-controls/integer.d.ts.map +1 -0
  143. package/build-types/dataform-controls/radio.d.ts +6 -0
  144. package/build-types/dataform-controls/radio.d.ts.map +1 -0
  145. package/build-types/dataform-controls/select.d.ts +6 -0
  146. package/build-types/dataform-controls/select.d.ts.map +1 -0
  147. package/build-types/dataform-controls/text.d.ts +6 -0
  148. package/build-types/dataform-controls/text.d.ts.map +1 -0
  149. package/build-types/dataforms-layouts/panel/index.d.ts.map +1 -1
  150. package/build-types/dataforms-layouts/regular/index.d.ts.map +1 -1
  151. package/build-types/dataviews-layouts/grid/density-picker.d.ts.map +1 -1
  152. package/build-types/dataviews-layouts/index.d.ts +4 -2
  153. package/build-types/dataviews-layouts/index.d.ts.map +1 -1
  154. package/build-types/dataviews-layouts/list/index.d.ts.map +1 -1
  155. package/build-types/dataviews-layouts/table/column-header-menu.d.ts.map +1 -1
  156. package/build-types/dataviews-layouts/table/index.d.ts.map +1 -1
  157. package/build-types/field-types/datetime.d.ts +13 -0
  158. package/build-types/field-types/datetime.d.ts.map +1 -0
  159. package/build-types/field-types/index.d.ts +1 -1
  160. package/build-types/field-types/index.d.ts.map +1 -1
  161. package/build-types/field-types/integer.d.ts +2 -3
  162. package/build-types/field-types/integer.d.ts.map +1 -1
  163. package/build-types/field-types/text.d.ts +2 -3
  164. package/build-types/field-types/text.d.ts.map +1 -1
  165. package/build-types/normalize-fields.d.ts.map +1 -1
  166. package/build-types/types.d.ts +43 -21
  167. package/build-types/types.d.ts.map +1 -1
  168. package/package.json +12 -12
  169. package/src/components/dataform/stories/index.story.tsx +43 -2
  170. package/src/components/dataviews/index.tsx +14 -18
  171. package/src/components/dataviews/stories/fixtures.tsx +690 -0
  172. package/src/components/dataviews/stories/index.story.tsx +164 -0
  173. package/src/components/dataviews/style.scss +2 -12
  174. package/src/components/dataviews-bulk-actions/index.tsx +264 -213
  175. package/src/components/dataviews-bulk-actions/style.scss +9 -4
  176. package/src/components/dataviews-filters/add-filter.tsx +7 -11
  177. package/src/components/dataviews-filters/index.tsx +3 -0
  178. package/src/components/dataviews-filters/search-widget.tsx +46 -25
  179. package/src/components/dataviews-filters/style.scss +13 -3
  180. package/src/components/dataviews-footer/index.tsx +50 -0
  181. package/src/components/dataviews-footer/style.scss +40 -0
  182. package/src/components/dataviews-item-actions/index.tsx +8 -14
  183. package/src/components/dataviews-pagination/index.tsx +40 -21
  184. package/src/components/dataviews-pagination/style.scss +7 -21
  185. package/src/components/dataviews-view-config/index.tsx +297 -69
  186. package/src/components/dataviews-view-config/style.scss +25 -0
  187. package/src/dataform-controls/datetime.tsx +43 -0
  188. package/src/dataform-controls/index.tsx +61 -0
  189. package/src/dataform-controls/integer.tsx +38 -0
  190. package/src/dataform-controls/radio.tsx +42 -0
  191. package/src/dataform-controls/select.tsx +52 -0
  192. package/src/dataform-controls/style.scss +4 -0
  193. package/src/dataform-controls/text.tsx +40 -0
  194. package/src/dataforms-layouts/panel/index.tsx +8 -2
  195. package/src/dataforms-layouts/regular/index.tsx +6 -2
  196. package/src/dataviews-layouts/grid/density-picker.tsx +33 -67
  197. package/src/dataviews-layouts/grid/index.tsx +1 -1
  198. package/src/dataviews-layouts/grid/style.scss +1 -5
  199. package/src/dataviews-layouts/index.ts +63 -2
  200. package/src/dataviews-layouts/list/index.tsx +199 -123
  201. package/src/dataviews-layouts/list/style.scss +10 -4
  202. package/src/dataviews-layouts/table/column-header-menu.tsx +86 -90
  203. package/src/dataviews-layouts/table/index.tsx +8 -65
  204. package/src/dataviews-layouts/table/style.scss +0 -5
  205. package/src/field-types/datetime.tsx +28 -0
  206. package/src/field-types/index.tsx +5 -0
  207. package/src/field-types/integer.tsx +2 -71
  208. package/src/field-types/text.tsx +2 -70
  209. package/src/normalize-fields.ts +10 -10
  210. package/src/style.scss +2 -1
  211. package/src/test/filter-and-sort-data-view.js +28 -0
  212. package/src/types.ts +56 -32
  213. package/tsconfig.tsbuildinfo +1 -1
  214. package/build/components/dataviews-bulk-actions-toolbar/index.js +0 -207
  215. package/build/components/dataviews-bulk-actions-toolbar/index.js.map +0 -1
  216. package/build-module/components/dataviews-bulk-actions-toolbar/index.js +0 -201
  217. package/build-module/components/dataviews-bulk-actions-toolbar/index.js.map +0 -1
  218. package/build-types/components/dataviews-bulk-actions-toolbar/index.d.ts +0 -2
  219. package/build-types/components/dataviews-bulk-actions-toolbar/index.d.ts.map +0 -1
  220. package/src/components/dataviews/stories/fixtures.js +0 -222
  221. package/src/components/dataviews/stories/index.story.js +0 -65
  222. package/src/components/dataviews-bulk-actions-toolbar/index.tsx +0 -288
  223. package/src/components/dataviews-bulk-actions-toolbar/style.scss +0 -45
@@ -0,0 +1,52 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { SelectControl } from '@wordpress/components';
5
+ import { useCallback } from '@wordpress/element';
6
+ import { __ } from '@wordpress/i18n';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import type { DataFormControlProps } from '../types';
12
+
13
+ export default function Select< Item >( {
14
+ data,
15
+ field,
16
+ onChange,
17
+ hideLabelFromVision,
18
+ }: DataFormControlProps< Item > ) {
19
+ const { id, label } = field;
20
+ const value = field.getValue( { item: data } ) ?? '';
21
+ const onChangeControl = useCallback(
22
+ ( newValue: any ) =>
23
+ onChange( {
24
+ [ id ]: newValue,
25
+ } ),
26
+ [ id, onChange ]
27
+ );
28
+
29
+ const elements = [
30
+ /*
31
+ * Value can be undefined when:
32
+ *
33
+ * - the field is not required
34
+ * - in bulk editing
35
+ *
36
+ */
37
+ { label: __( 'Select item' ), value: '' },
38
+ ...( field?.elements ?? [] ),
39
+ ];
40
+
41
+ return (
42
+ <SelectControl
43
+ label={ label }
44
+ value={ value }
45
+ options={ elements }
46
+ onChange={ onChangeControl }
47
+ __next40pxDefaultSize
48
+ __nextHasNoMarginBottom
49
+ hideLabelFromVision={ hideLabelFromVision }
50
+ />
51
+ );
52
+ }
@@ -0,0 +1,4 @@
1
+ .dataviews-controls__datetime {
2
+ border: none;
3
+ padding: 0;
4
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { TextControl } from '@wordpress/components';
5
+ import { useCallback } from '@wordpress/element';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import type { DataFormControlProps } from '../types';
11
+
12
+ export default function Text< Item >( {
13
+ data,
14
+ field,
15
+ onChange,
16
+ hideLabelFromVision,
17
+ }: DataFormControlProps< Item > ) {
18
+ const { id, label, placeholder } = field;
19
+ const value = field.getValue( { item: data } );
20
+
21
+ const onChangeControl = useCallback(
22
+ ( newValue: string ) =>
23
+ onChange( {
24
+ [ id ]: newValue,
25
+ } ),
26
+ [ id, onChange ]
27
+ );
28
+
29
+ return (
30
+ <TextControl
31
+ label={ label }
32
+ placeholder={ placeholder }
33
+ value={ value ?? '' }
34
+ onChange={ onChangeControl }
35
+ __next40pxDefaultSize
36
+ __nextHasNoMarginBottom
37
+ hideLabelFromVision={ hideLabelFromVision }
38
+ />
39
+ );
40
+ }
@@ -17,7 +17,7 @@ import { closeSmall } from '@wordpress/icons';
17
17
  * Internal dependencies
18
18
  */
19
19
  import { normalizeFields } from '../../normalize-fields';
20
- import type { DataFormProps, NormalizedField } from '../../types';
20
+ import type { DataFormProps, NormalizedField, Field } from '../../types';
21
21
 
22
22
  interface FormFieldProps< Item > {
23
23
  data: Item;
@@ -44,6 +44,8 @@ function DropdownHeader( {
44
44
  <Spacer />
45
45
  { onClose && (
46
46
  <Button
47
+ // TODO: Switch to `true` (40px size) if possible
48
+ __next40pxDefaultSize={ false }
47
49
  className="dataforms-layouts-panel__dropdown-header-action"
48
50
  label={ __( 'Close' ) }
49
51
  icon={ closeSmall }
@@ -142,7 +144,11 @@ export default function FormPanel< Item >( {
142
144
  const visibleFields = useMemo(
143
145
  () =>
144
146
  normalizeFields(
145
- fields.filter( ( { id } ) => !! form.fields?.includes( id ) )
147
+ ( form.fields ?? [] )
148
+ .map( ( fieldId ) =>
149
+ fields.find( ( { id } ) => id === fieldId )
150
+ )
151
+ .filter( ( field ): field is Field< Item > => !! field )
146
152
  ),
147
153
  [ fields, form.fields ]
148
154
  );
@@ -8,7 +8,7 @@ import { useMemo } from '@wordpress/element';
8
8
  * Internal dependencies
9
9
  */
10
10
  import { normalizeFields } from '../../normalize-fields';
11
- import type { DataFormProps } from '../../types';
11
+ import type { DataFormProps, Field } from '../../types';
12
12
 
13
13
  export default function FormRegular< Item >( {
14
14
  data,
@@ -19,7 +19,11 @@ export default function FormRegular< Item >( {
19
19
  const visibleFields = useMemo(
20
20
  () =>
21
21
  normalizeFields(
22
- fields.filter( ( { id } ) => !! form.fields?.includes( id ) )
22
+ ( form.fields ?? [] )
23
+ .map( ( fieldId ) =>
24
+ fields.find( ( { id } ) => id === fieldId )
25
+ )
26
+ .filter( ( field ): field is Field< Item > => !! field )
23
27
  ),
24
28
  [ fields, form.fields ]
25
29
  );
@@ -1,11 +1,10 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { RangeControl, Button } from '@wordpress/components';
4
+ import { RangeControl } from '@wordpress/components';
5
5
  import { __ } from '@wordpress/i18n';
6
6
  import { useViewportMatch } from '@wordpress/compose';
7
- import { plus, reset } from '@wordpress/icons';
8
- import { useEffect } from '@wordpress/element';
7
+ import { useEffect, useMemo } from '@wordpress/element';
9
8
 
10
9
  const viewportBreaks = {
11
10
  xhuge: { min: 3, max: 6, default: 5 },
@@ -40,21 +39,6 @@ function useViewPortBreakpoint() {
40
39
  return null;
41
40
  }
42
41
 
43
- // Value is number from 0 to 100 representing how big an item is in the grid
44
- // 100 being the biggest and 0 being the smallest.
45
- // The size is relative to the viewport size, if one a given viewport the
46
- // number of allowed items in a grid is 3 to 6 a 0 ( the smallest ) will mean that the grid will
47
- // have 6 items in a row, a 100 ( the biggest ) will mean that the grid will have 3 items in a row.
48
- // A value of 75 will mean that the grid will have 4 items in a row.
49
- function getRangeValue(
50
- density: number,
51
- breakValues: { min: number; max: number; default: number }
52
- ) {
53
- const inverseDensity = breakValues.max - density;
54
- const max = breakValues.max - breakValues.min;
55
- return Math.round( ( inverseDensity * 100 ) / max );
56
- }
57
-
58
42
  export default function DensityPicker( {
59
43
  density,
60
44
  setDensity,
@@ -78,59 +62,41 @@ export default function DensityPicker( {
78
62
  return _density;
79
63
  } );
80
64
  }, [ setDensity, viewport ] );
65
+ const breakValues = viewportBreaks[ viewport || 'mobile' ];
66
+ const densityToUse = density || breakValues.default;
67
+
68
+ const marks = useMemo(
69
+ () =>
70
+ Array.from(
71
+ { length: breakValues.max - breakValues.min + 1 },
72
+ ( _, i ) => {
73
+ return {
74
+ value: breakValues.min + i,
75
+ };
76
+ }
77
+ ),
78
+ [ breakValues ]
79
+ );
80
+
81
81
  if ( ! viewport ) {
82
82
  return null;
83
83
  }
84
- const breakValues = viewportBreaks[ viewport ];
85
- const densityToUse = density || breakValues.default;
86
- const rangeValue = getRangeValue( densityToUse, breakValues );
87
84
 
88
- const step = 100 / ( breakValues.max - breakValues.min + 1 );
89
85
  return (
90
- <>
91
- <Button
92
- size="compact"
93
- icon={ reset }
94
- disabled={ rangeValue <= 0 }
95
- accessibleWhenDisabled
96
- label={ __( 'Decrease size' ) }
97
- onClick={ () => {
98
- setDensity( densityToUse + 1 );
99
- } }
100
- />
101
- <RangeControl
102
- __nextHasNoMarginBottom
103
- showTooltip={ false }
104
- className="dataviews-density-picker__range-control"
105
- label={ __( 'Item size' ) }
106
- hideLabelFromVision
107
- value={ rangeValue }
108
- min={ 0 }
109
- max={ 100 }
110
- withInputField={ false }
111
- onChange={ ( value = 0 ) => {
112
- const inverseValue = 100 - value;
113
- setDensity(
114
- Math.round(
115
- ( inverseValue *
116
- ( breakValues.max - breakValues.min ) ) /
117
- 100 +
118
- breakValues.min
119
- )
120
- );
121
- } }
122
- step={ step }
123
- />
124
- <Button
125
- size="compact"
126
- icon={ plus }
127
- disabled={ rangeValue >= 100 }
128
- accessibleWhenDisabled
129
- label={ __( 'Increase size' ) }
130
- onClick={ () => {
131
- setDensity( densityToUse - 1 );
132
- } }
133
- />
134
- </>
86
+ <RangeControl
87
+ __nextHasNoMarginBottom
88
+ __next40pxDefaultSize
89
+ showTooltip={ false }
90
+ label={ __( 'Preview size' ) }
91
+ value={ breakValues.max + breakValues.min - densityToUse }
92
+ marks={ marks }
93
+ min={ breakValues.min }
94
+ max={ breakValues.max }
95
+ withInputField={ false }
96
+ onChange={ ( value = 0 ) => {
97
+ setDensity( breakValues.max + breakValues.min - value );
98
+ } }
99
+ step={ 1 }
100
+ />
135
101
  );
136
102
  }
@@ -145,7 +145,7 @@ function GridItem< Item >( {
145
145
  >
146
146
  <>
147
147
  <FlexItem className="dataviews-view-grid__field-name">
148
- { field.label }
148
+ { field.header }
149
149
  </FlexItem>
150
150
  <FlexItem
151
151
  className="dataviews-view-grid__field-value"
@@ -118,7 +118,7 @@
118
118
  background: $gray-100;
119
119
  padding: 0 $grid-unit-10;
120
120
  min-height: $grid-unit-30;
121
- border-radius: $radius-block-ui;
121
+ border-radius: $radius-small;
122
122
  display: flex;
123
123
  align-items: center;
124
124
  font-size: 12px;
@@ -146,10 +146,6 @@
146
146
  }
147
147
  }
148
148
 
149
- .dataviews-density-picker__range-control {
150
- width: 200px;
151
- }
152
-
153
149
  .dataviews-view-grid__field-value:empty,
154
150
  .dataviews-view-grid__field:empty {
155
151
  display: none;
@@ -16,7 +16,7 @@ import ViewTable from './table';
16
16
  import ViewGrid from './grid';
17
17
  import ViewList from './list';
18
18
  import { LAYOUT_GRID, LAYOUT_LIST, LAYOUT_TABLE } from '../constants';
19
- import type { View } from '../types';
19
+ import type { View, Field } from '../types';
20
20
 
21
21
  export const VIEW_LAYOUTS = [
22
22
  {
@@ -39,7 +39,7 @@ export const VIEW_LAYOUTS = [
39
39
  },
40
40
  ];
41
41
 
42
- export function getMandatoryFields( view: View ): string[] {
42
+ export function getNotHidableFieldIds( view: View ): string[] {
43
43
  if ( view.type === 'table' ) {
44
44
  return [ view.layout?.primaryField ]
45
45
  .concat(
@@ -64,3 +64,64 @@ export function getMandatoryFields( view: View ): string[] {
64
64
 
65
65
  return [];
66
66
  }
67
+
68
+ function getCombinedFieldIds( view: View ): string[] {
69
+ const combinedFields: string[] = [];
70
+ if ( view.type === LAYOUT_TABLE && view.layout?.combinedFields ) {
71
+ view.layout.combinedFields.forEach( ( combination ) => {
72
+ combinedFields.push( ...combination.children );
73
+ } );
74
+ }
75
+ return combinedFields;
76
+ }
77
+
78
+ export function getVisibleFieldIds(
79
+ view: View,
80
+ fields: Field< any >[]
81
+ ): string[] {
82
+ const fieldsToExclude = getCombinedFieldIds( view );
83
+
84
+ if ( view.fields ) {
85
+ return view.fields.filter( ( id ) => ! fieldsToExclude.includes( id ) );
86
+ }
87
+
88
+ const visibleFields = [];
89
+ if ( view.type === LAYOUT_TABLE && view.layout?.combinedFields ) {
90
+ visibleFields.push(
91
+ ...view.layout.combinedFields.map( ( { id } ) => id )
92
+ );
93
+ }
94
+ visibleFields.push(
95
+ ...fields
96
+ .filter( ( { id } ) => ! fieldsToExclude.includes( id ) )
97
+ .map( ( { id } ) => id )
98
+ );
99
+
100
+ return visibleFields;
101
+ }
102
+
103
+ export function getHiddenFieldIds(
104
+ view: View,
105
+ fields: Field< any >[]
106
+ ): string[] {
107
+ const fieldsToExclude = [
108
+ ...getCombinedFieldIds( view ),
109
+ ...getVisibleFieldIds( view, fields ),
110
+ ];
111
+
112
+ // The media field does not need to be in the view.fields to be displayed.
113
+ if ( view.type === LAYOUT_GRID && view.layout?.mediaField ) {
114
+ fieldsToExclude.push( view.layout?.mediaField );
115
+ }
116
+
117
+ if ( view.type === LAYOUT_LIST && view.layout?.mediaField ) {
118
+ fieldsToExclude.push( view.layout?.mediaField );
119
+ }
120
+
121
+ return fields
122
+ .filter(
123
+ ( { id, enableHiding } ) =>
124
+ ! fieldsToExclude.includes( id ) && enableHiding
125
+ )
126
+ .map( ( { id } ) => id );
127
+ }