@wordpress/dataviews 4.2.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 (123) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +47 -7
  3. package/build/components/dataviews/index.js +3 -5
  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/search-widget.js +28 -18
  10. package/build/components/dataviews-filters/search-widget.js.map +1 -1
  11. package/build/components/dataviews-footer/index.js +45 -0
  12. package/build/components/dataviews-footer/index.js.map +1 -0
  13. package/build/components/dataviews-item-actions/index.js +5 -8
  14. package/build/components/dataviews-item-actions/index.js.map +1 -1
  15. package/build/components/dataviews-pagination/index.js +4 -4
  16. package/build/components/dataviews-pagination/index.js.map +1 -1
  17. package/build/components/dataviews-view-config/index.js +171 -32
  18. package/build/components/dataviews-view-config/index.js.map +1 -1
  19. package/build/dataforms-layouts/panel/index.js +4 -1
  20. package/build/dataforms-layouts/panel/index.js.map +1 -1
  21. package/build/dataviews-layouts/index.js +48 -2
  22. package/build/dataviews-layouts/index.js.map +1 -1
  23. package/build/dataviews-layouts/list/index.js +124 -84
  24. package/build/dataviews-layouts/list/index.js.map +1 -1
  25. package/build/dataviews-layouts/table/column-header-menu.js +52 -54
  26. package/build/dataviews-layouts/table/column-header-menu.js.map +1 -1
  27. package/build/dataviews-layouts/table/index.js +7 -35
  28. package/build/dataviews-layouts/table/index.js.map +1 -1
  29. package/build/normalize-fields.js +4 -2
  30. package/build/normalize-fields.js.map +1 -1
  31. package/build/types.js.map +1 -1
  32. package/build-module/components/dataviews/index.js +3 -5
  33. package/build-module/components/dataviews/index.js.map +1 -1
  34. package/build-module/components/dataviews-bulk-actions/index.js +145 -143
  35. package/build-module/components/dataviews-bulk-actions/index.js.map +1 -1
  36. package/build-module/components/dataviews-filters/add-filter.js +4 -6
  37. package/build-module/components/dataviews-filters/add-filter.js.map +1 -1
  38. package/build-module/components/dataviews-filters/search-widget.js +28 -18
  39. package/build-module/components/dataviews-filters/search-widget.js.map +1 -1
  40. package/build-module/components/dataviews-footer/index.js +38 -0
  41. package/build-module/components/dataviews-footer/index.js.map +1 -0
  42. package/build-module/components/dataviews-item-actions/index.js +5 -8
  43. package/build-module/components/dataviews-item-actions/index.js.map +1 -1
  44. package/build-module/components/dataviews-pagination/index.js +5 -5
  45. package/build-module/components/dataviews-pagination/index.js.map +1 -1
  46. package/build-module/components/dataviews-view-config/index.js +177 -38
  47. package/build-module/components/dataviews-view-config/index.js.map +1 -1
  48. package/build-module/dataforms-layouts/panel/index.js +4 -1
  49. package/build-module/dataforms-layouts/panel/index.js.map +1 -1
  50. package/build-module/dataviews-layouts/index.js +45 -1
  51. package/build-module/dataviews-layouts/index.js.map +1 -1
  52. package/build-module/dataviews-layouts/list/index.js +125 -83
  53. package/build-module/dataviews-layouts/list/index.js.map +1 -1
  54. package/build-module/dataviews-layouts/table/column-header-menu.js +52 -54
  55. package/build-module/dataviews-layouts/table/column-header-menu.js.map +1 -1
  56. package/build-module/dataviews-layouts/table/index.js +9 -37
  57. package/build-module/dataviews-layouts/table/index.js.map +1 -1
  58. package/build-module/normalize-fields.js +4 -2
  59. package/build-module/normalize-fields.js.map +1 -1
  60. package/build-module/types.js.map +1 -1
  61. package/build-style/style-rtl.css +79 -63
  62. package/build-style/style.css +79 -63
  63. package/build-types/components/dataviews/index.d.ts.map +1 -1
  64. package/build-types/components/dataviews/stories/fixtures.d.ts +27 -131
  65. package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -1
  66. package/build-types/components/dataviews/stories/index.story.d.ts +12 -53
  67. package/build-types/components/dataviews/stories/index.story.d.ts.map +1 -1
  68. package/build-types/components/dataviews-bulk-actions/index.d.ts +11 -1
  69. package/build-types/components/dataviews-bulk-actions/index.d.ts.map +1 -1
  70. package/build-types/components/dataviews-filters/add-filter.d.ts.map +1 -1
  71. package/build-types/components/dataviews-filters/search-widget.d.ts.map +1 -1
  72. package/build-types/components/dataviews-footer/index.d.ts +2 -0
  73. package/build-types/components/dataviews-footer/index.d.ts.map +1 -0
  74. package/build-types/components/dataviews-item-actions/index.d.ts.map +1 -1
  75. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
  76. package/build-types/dataforms-layouts/panel/index.d.ts.map +1 -1
  77. package/build-types/dataviews-layouts/index.d.ts +4 -2
  78. package/build-types/dataviews-layouts/index.d.ts.map +1 -1
  79. package/build-types/dataviews-layouts/list/index.d.ts.map +1 -1
  80. package/build-types/dataviews-layouts/table/column-header-menu.d.ts.map +1 -1
  81. package/build-types/dataviews-layouts/table/index.d.ts.map +1 -1
  82. package/build-types/normalize-fields.d.ts.map +1 -1
  83. package/build-types/types.d.ts +2 -0
  84. package/build-types/types.d.ts.map +1 -1
  85. package/package.json +11 -11
  86. package/src/components/dataviews/index.tsx +2 -6
  87. package/src/components/dataviews/stories/fixtures.tsx +690 -0
  88. package/src/components/dataviews/stories/index.story.tsx +164 -0
  89. package/src/components/dataviews/style.scss +2 -0
  90. package/src/components/dataviews-bulk-actions/index.tsx +264 -213
  91. package/src/components/dataviews-bulk-actions/style.scss +9 -4
  92. package/src/components/dataviews-filters/add-filter.tsx +7 -11
  93. package/src/components/dataviews-filters/search-widget.tsx +45 -17
  94. package/src/components/dataviews-filters/style.scss +12 -2
  95. package/src/components/dataviews-footer/index.tsx +50 -0
  96. package/src/components/dataviews-footer/style.scss +40 -0
  97. package/src/components/dataviews-item-actions/index.tsx +8 -14
  98. package/src/components/dataviews-pagination/index.tsx +5 -5
  99. package/src/components/dataviews-pagination/style.scss +0 -19
  100. package/src/components/dataviews-view-config/index.tsx +252 -53
  101. package/src/components/dataviews-view-config/style.scss +25 -0
  102. package/src/dataforms-layouts/panel/index.tsx +2 -0
  103. package/src/dataviews-layouts/grid/style.scss +1 -1
  104. package/src/dataviews-layouts/index.ts +63 -2
  105. package/src/dataviews-layouts/list/index.tsx +199 -127
  106. package/src/dataviews-layouts/list/style.scss +10 -4
  107. package/src/dataviews-layouts/table/column-header-menu.tsx +85 -87
  108. package/src/dataviews-layouts/table/index.tsx +8 -65
  109. package/src/dataviews-layouts/table/style.scss +0 -5
  110. package/src/normalize-fields.ts +2 -0
  111. package/src/style.scss +1 -1
  112. package/src/types.ts +2 -0
  113. package/tsconfig.tsbuildinfo +1 -1
  114. package/build/components/dataviews-bulk-actions-toolbar/index.js +0 -207
  115. package/build/components/dataviews-bulk-actions-toolbar/index.js.map +0 -1
  116. package/build-module/components/dataviews-bulk-actions-toolbar/index.js +0 -201
  117. package/build-module/components/dataviews-bulk-actions-toolbar/index.js.map +0 -1
  118. package/build-types/components/dataviews-bulk-actions-toolbar/index.d.ts +0 -2
  119. package/build-types/components/dataviews-bulk-actions-toolbar/index.d.ts.map +0 -1
  120. package/src/components/dataviews/stories/fixtures.js +0 -250
  121. package/src/components/dataviews/stories/index.story.js +0 -71
  122. package/src/components/dataviews-bulk-actions-toolbar/index.tsx +0 -288
  123. package/src/components/dataviews-bulk-actions-toolbar/style.scss +0 -45
@@ -25,16 +25,11 @@ import type {
25
25
  NormalizedField,
26
26
  SortDirection,
27
27
  ViewTable as ViewTableType,
28
+ Operator,
28
29
  } from '../../types';
30
+ import { getVisibleFieldIds } from '../index';
29
31
 
30
- const {
31
- DropdownMenuV2: DropdownMenu,
32
- DropdownMenuGroupV2: DropdownMenuGroup,
33
- DropdownMenuItemV2: DropdownMenuItem,
34
- DropdownMenuRadioItemV2: DropdownMenuRadioItem,
35
- DropdownMenuItemLabelV2: DropdownMenuItemLabel,
36
- DropdownMenuSeparatorV2: DropdownMenuSeparator,
37
- } = unlock( componentsPrivateApis );
32
+ const { DropdownMenuV2 } = unlock( componentsPrivateApis );
38
33
 
39
34
  interface HeaderMenuProps< Item > {
40
35
  fieldId: string;
@@ -50,7 +45,7 @@ function WithDropDownMenuSeparators( { children }: { children: ReactNode } ) {
50
45
  .filter( Boolean )
51
46
  .map( ( child, i ) => (
52
47
  <Fragment key={ i }>
53
- { i > 0 && <DropdownMenuSeparator /> }
48
+ { i > 0 && <DropdownMenuV2.Separator /> }
54
49
  { child }
55
50
  </Fragment>
56
51
  ) );
@@ -67,33 +62,46 @@ const _HeaderMenu = forwardRef( function HeaderMenu< Item >(
67
62
  }: HeaderMenuProps< Item >,
68
63
  ref: Ref< HTMLButtonElement >
69
64
  ) {
65
+ const visibleFieldIds = getVisibleFieldIds( view, fields );
66
+ const index = visibleFieldIds?.indexOf( fieldId ) as number;
67
+ const isSorted = view.sort?.field === fieldId;
68
+ let isHidable = false;
69
+ let isSortable = false;
70
+ let canAddFilter = false;
71
+ let header;
72
+ let operators: Operator[] = [];
73
+
70
74
  const combinedField = view.layout?.combinedFields?.find(
71
75
  ( f ) => f.id === fieldId
72
76
  );
73
- const index = view.fields?.indexOf( fieldId ) as number;
74
- if ( !! combinedField ) {
75
- return combinedField.header || combinedField.label;
76
- }
77
77
  const field = fields.find( ( f ) => f.id === fieldId );
78
- if ( ! field ) {
79
- return null;
78
+
79
+ if ( ! combinedField ) {
80
+ if ( ! field ) {
81
+ // No combined or regular field found.
82
+ return null;
83
+ }
84
+
85
+ isHidable = field.enableHiding !== false;
86
+ isSortable = field.enableSorting !== false;
87
+ header = field.header;
88
+
89
+ operators = sanitizeOperators( field );
90
+ // Filter can be added:
91
+ // 1. If the field is not already part of a view's filters.
92
+ // 2. If the field meets the type and operator requirements.
93
+ // 3. If it's not primary. If it is, it should be already visible.
94
+ canAddFilter =
95
+ ! view.filters?.some( ( _filter ) => fieldId === _filter.field ) &&
96
+ !! field.elements?.length &&
97
+ !! operators.length &&
98
+ ! field.filterBy?.isPrimary;
99
+ } else {
100
+ header = combinedField.header || combinedField.label;
80
101
  }
81
- const isHidable = field.enableHiding !== false;
82
- const isSortable = field.enableSorting !== false;
83
- const isSorted = view.sort?.field === field.id;
84
- const operators = sanitizeOperators( field );
85
- // Filter can be added:
86
- // 1. If the field is not already part of a view's filters.
87
- // 2. If the field meets the type and operator requirements.
88
- // 3. If it's not primary. If it is, it should be already visible.
89
- const canAddFilter =
90
- ! view.filters?.some( ( _filter ) => field.id === _filter.field ) &&
91
- !! field.elements?.length &&
92
- !! operators.length &&
93
- ! field.filterBy?.isPrimary;
94
102
 
95
103
  return (
96
- <DropdownMenu
104
+ <DropdownMenuV2
97
105
  align="start"
98
106
  trigger={
99
107
  <Button
@@ -102,7 +110,7 @@ const _HeaderMenu = forwardRef( function HeaderMenu< Item >(
102
110
  ref={ ref }
103
111
  variant="tertiary"
104
112
  >
105
- { field.header }
113
+ { header }
106
114
  { view.sort && isSorted && (
107
115
  <span aria-hidden="true">
108
116
  { sortArrows[ view.sort.direction ] }
@@ -114,7 +122,7 @@ const _HeaderMenu = forwardRef( function HeaderMenu< Item >(
114
122
  >
115
123
  <WithDropDownMenuSeparators>
116
124
  { isSortable && (
117
- <DropdownMenuGroup>
125
+ <DropdownMenuV2.Group>
118
126
  { SORTING_DIRECTIONS.map(
119
127
  ( direction: SortDirection ) => {
120
128
  const isChecked =
@@ -122,10 +130,10 @@ const _HeaderMenu = forwardRef( function HeaderMenu< Item >(
122
130
  isSorted &&
123
131
  view.sort.direction === direction;
124
132
 
125
- const value = `${ field.id }-${ direction }`;
133
+ const value = `${ fieldId }-${ direction }`;
126
134
 
127
135
  return (
128
- <DropdownMenuRadioItem
136
+ <DropdownMenuV2.RadioItem
129
137
  key={ value }
130
138
  // All sorting radio items share the same name, so that
131
139
  // selecting a sorting option automatically deselects the
@@ -139,34 +147,34 @@ const _HeaderMenu = forwardRef( function HeaderMenu< Item >(
139
147
  onChangeView( {
140
148
  ...view,
141
149
  sort: {
142
- field: field.id,
150
+ field: fieldId,
143
151
  direction,
144
152
  },
145
153
  } );
146
154
  } }
147
155
  >
148
- <DropdownMenuItemLabel>
156
+ <DropdownMenuV2.ItemLabel>
149
157
  { sortLabels[ direction ] }
150
- </DropdownMenuItemLabel>
151
- </DropdownMenuRadioItem>
158
+ </DropdownMenuV2.ItemLabel>
159
+ </DropdownMenuV2.RadioItem>
152
160
  );
153
161
  }
154
162
  ) }
155
- </DropdownMenuGroup>
163
+ </DropdownMenuV2.Group>
156
164
  ) }
157
165
  { canAddFilter && (
158
- <DropdownMenuGroup>
159
- <DropdownMenuItem
166
+ <DropdownMenuV2.Group>
167
+ <DropdownMenuV2.Item
160
168
  prefix={ <Icon icon={ funnel } /> }
161
169
  onClick={ () => {
162
- setOpenedFilter( field.id );
170
+ setOpenedFilter( fieldId );
163
171
  onChangeView( {
164
172
  ...view,
165
173
  page: 1,
166
174
  filters: [
167
175
  ...( view.filters || [] ),
168
176
  {
169
- field: field.id,
177
+ field: fieldId,
170
178
  value: undefined,
171
179
  operator: operators[ 0 ],
172
180
  },
@@ -174,86 +182,76 @@ const _HeaderMenu = forwardRef( function HeaderMenu< Item >(
174
182
  } );
175
183
  } }
176
184
  >
177
- <DropdownMenuItemLabel>
185
+ <DropdownMenuV2.ItemLabel>
178
186
  { __( 'Add filter' ) }
179
- </DropdownMenuItemLabel>
180
- </DropdownMenuItem>
181
- </DropdownMenuGroup>
187
+ </DropdownMenuV2.ItemLabel>
188
+ </DropdownMenuV2.Item>
189
+ </DropdownMenuV2.Group>
182
190
  ) }
183
- <DropdownMenuGroup>
184
- <DropdownMenuItem
191
+ <DropdownMenuV2.Group>
192
+ <DropdownMenuV2.Item
185
193
  prefix={ <Icon icon={ arrowLeft } /> }
186
194
  disabled={ index < 1 }
187
195
  onClick={ () => {
188
- if ( ! view.fields || index < 1 ) {
189
- return;
190
- }
191
196
  onChangeView( {
192
197
  ...view,
193
198
  fields: [
194
- ...( view.fields.slice( 0, index - 1 ) ??
195
- [] ),
196
- field.id,
197
- view.fields[ index - 1 ],
198
- ...view.fields.slice( index + 1 ),
199
+ ...( visibleFieldIds.slice(
200
+ 0,
201
+ index - 1
202
+ ) ?? [] ),
203
+ fieldId,
204
+ visibleFieldIds[ index - 1 ],
205
+ ...visibleFieldIds.slice( index + 1 ),
199
206
  ],
200
207
  } );
201
208
  } }
202
209
  >
203
- <DropdownMenuItemLabel>
210
+ <DropdownMenuV2.ItemLabel>
204
211
  { __( 'Move left' ) }
205
- </DropdownMenuItemLabel>
206
- </DropdownMenuItem>
207
- <DropdownMenuItem
212
+ </DropdownMenuV2.ItemLabel>
213
+ </DropdownMenuV2.Item>
214
+ <DropdownMenuV2.Item
208
215
  prefix={ <Icon icon={ arrowRight } /> }
209
- disabled={
210
- ! view.fields || index >= view.fields.length - 1
211
- }
216
+ disabled={ index >= visibleFieldIds.length - 1 }
212
217
  onClick={ () => {
213
- if (
214
- ! view.fields ||
215
- index >= view.fields.length - 1
216
- ) {
217
- return;
218
- }
219
218
  onChangeView( {
220
219
  ...view,
221
220
  fields: [
222
- ...( view.fields.slice( 0, index ) ?? [] ),
223
- view.fields[ index + 1 ],
224
- field.id,
225
- ...view.fields.slice( index + 2 ),
221
+ ...( visibleFieldIds.slice( 0, index ) ??
222
+ [] ),
223
+ visibleFieldIds[ index + 1 ],
224
+ fieldId,
225
+ ...visibleFieldIds.slice( index + 2 ),
226
226
  ],
227
227
  } );
228
228
  } }
229
229
  >
230
- <DropdownMenuItemLabel>
230
+ <DropdownMenuV2.ItemLabel>
231
231
  { __( 'Move right' ) }
232
- </DropdownMenuItemLabel>
233
- </DropdownMenuItem>
234
- { isHidable && (
235
- <DropdownMenuItem
232
+ </DropdownMenuV2.ItemLabel>
233
+ </DropdownMenuV2.Item>
234
+ { isHidable && field && (
235
+ <DropdownMenuV2.Item
236
236
  prefix={ <Icon icon={ unseen } /> }
237
237
  onClick={ () => {
238
- const viewFields =
239
- view.fields || fields.map( ( f ) => f.id );
240
238
  onHide( field );
241
239
  onChangeView( {
242
240
  ...view,
243
- fields: viewFields.filter(
244
- ( id ) => id !== field.id
241
+ fields: visibleFieldIds.filter(
242
+ ( id ) => id !== fieldId
245
243
  ),
246
244
  } );
247
245
  } }
248
246
  >
249
- <DropdownMenuItemLabel>
247
+ <DropdownMenuV2.ItemLabel>
250
248
  { __( 'Hide column' ) }
251
- </DropdownMenuItemLabel>
252
- </DropdownMenuItem>
249
+ </DropdownMenuV2.ItemLabel>
250
+ </DropdownMenuV2.Item>
253
251
  ) }
254
- </DropdownMenuGroup>
252
+ </DropdownMenuV2.Group>
255
253
  </WithDropDownMenuSeparators>
256
- </DropdownMenu>
254
+ </DropdownMenuV2>
257
255
  );
258
256
  } );
259
257
 
@@ -8,18 +8,11 @@ import clsx from 'clsx';
8
8
  */
9
9
  import { __ } from '@wordpress/i18n';
10
10
  import {
11
- CheckboxControl,
12
11
  Spinner,
13
12
  __experimentalHStack as HStack,
14
13
  __experimentalVStack as VStack,
15
14
  } from '@wordpress/components';
16
- import {
17
- useEffect,
18
- useId,
19
- useRef,
20
- useState,
21
- useMemo,
22
- } from '@wordpress/element';
15
+ import { useEffect, useId, useRef, useState } from '@wordpress/element';
23
16
 
24
17
  /**
25
18
  * Internal dependencies
@@ -30,6 +23,7 @@ import { sortValues } from '../../constants';
30
23
  import {
31
24
  useSomeItemHasAPossibleBulkAction,
32
25
  useHasAPossibleBulkAction,
26
+ BulkSelectionCheckbox,
33
27
  } from '../../components/dataviews-bulk-actions';
34
28
  import type {
35
29
  Action,
@@ -40,14 +34,7 @@ import type {
40
34
  } from '../../types';
41
35
  import type { SetSelection } from '../../private-types';
42
36
  import ColumnHeaderMenu from './column-header-menu';
43
-
44
- interface BulkSelectionCheckboxProps< Item > {
45
- selection: string[];
46
- onChangeSelection: SetSelection;
47
- data: Item[];
48
- actions: Action< Item >[];
49
- getItemId: ( item: Item ) => string;
50
- }
37
+ import { getVisibleFieldIds } from '../index';
51
38
 
52
39
  interface TableColumnFieldProps< Item > {
53
40
  primaryField?: NormalizedField< Item >;
@@ -84,50 +71,6 @@ interface TableRowProps< Item > {
84
71
  onChangeSelection: SetSelection;
85
72
  }
86
73
 
87
- function BulkSelectionCheckbox< Item >( {
88
- selection,
89
- onChangeSelection,
90
- data,
91
- actions,
92
- getItemId,
93
- }: BulkSelectionCheckboxProps< Item > ) {
94
- const selectableItems = useMemo( () => {
95
- return data.filter( ( item ) => {
96
- return actions.some(
97
- ( action ) =>
98
- action.supportsBulk &&
99
- ( ! action.isEligible || action.isEligible( item ) )
100
- );
101
- } );
102
- }, [ data, actions ] );
103
- const selectedItems = data.filter(
104
- ( item ) =>
105
- selection.includes( getItemId( item ) ) &&
106
- selectableItems.includes( item )
107
- );
108
- const areAllSelected = selectedItems.length === selectableItems.length;
109
- return (
110
- <CheckboxControl
111
- className="dataviews-view-table-selection-checkbox"
112
- __nextHasNoMarginBottom
113
- checked={ areAllSelected }
114
- indeterminate={ ! areAllSelected && !! selectedItems.length }
115
- onChange={ () => {
116
- if ( areAllSelected ) {
117
- onChangeSelection( [] );
118
- } else {
119
- onChangeSelection(
120
- selectableItems.map( ( item ) => getItemId( item ) )
121
- );
122
- }
123
- } }
124
- aria-label={
125
- areAllSelected ? __( 'Deselect all' ) : __( 'Select all' )
126
- }
127
- />
128
- );
129
- }
130
-
131
74
  function TableColumn< Item >( {
132
75
  column,
133
76
  fields,
@@ -212,8 +155,8 @@ function TableRow< Item >( {
212
155
  // Will be set to true if `onTouchStart` fires. This happens before
213
156
  // `onClick` and can be used to exclude touchscreen devices from certain
214
157
  // behaviours.
215
- const isTouchDevice = useRef( false );
216
- const columns = view.fields || fields.map( ( f ) => f.id );
158
+ const isTouchDeviceRef = useRef( false );
159
+ const columns = getVisibleFieldIds( view, fields );
217
160
 
218
161
  return (
219
162
  <tr
@@ -225,14 +168,14 @@ function TableRow< Item >( {
225
168
  onMouseEnter={ handleMouseEnter }
226
169
  onMouseLeave={ handleMouseLeave }
227
170
  onTouchStart={ () => {
228
- isTouchDevice.current = true;
171
+ isTouchDeviceRef.current = true;
229
172
  } }
230
173
  onClick={ () => {
231
174
  if ( ! hasPossibleBulkAction ) {
232
175
  return;
233
176
  }
234
177
  if (
235
- ! isTouchDevice.current &&
178
+ ! isTouchDeviceRef.current &&
236
179
  document.getSelection()?.type !== 'Range'
237
180
  ) {
238
181
  onChangeSelection(
@@ -346,7 +289,7 @@ function ViewTable< Item >( {
346
289
  setNextHeaderMenuToFocus( fallback?.node );
347
290
  };
348
291
 
349
- const columns = view.fields || fields.map( ( f ) => f.id );
292
+ const columns = getVisibleFieldIds( view, fields );
350
293
  const hasData = !! data?.length;
351
294
 
352
295
  const primaryField = fields.find(
@@ -7,11 +7,6 @@
7
7
  color: $gray-700;
8
8
  margin-bottom: auto;
9
9
 
10
- a {
11
- text-decoration: none;
12
- color: $gray-900;
13
- font-weight: 500;
14
- }
15
10
  th {
16
11
  text-align: left;
17
12
  color: $gray-900;
@@ -61,6 +61,8 @@ export function normalizeFields< Item >(
61
61
  sort,
62
62
  isValid,
63
63
  Edit,
64
+ enableHiding: field.enableHiding ?? true,
65
+ enableSorting: field.enableSorting ?? true,
64
66
  };
65
67
  } );
66
68
  }
package/src/style.scss CHANGED
@@ -1,7 +1,7 @@
1
1
  @import "./components/dataviews/style.scss";
2
2
  @import "./components/dataviews-bulk-actions/style.scss";
3
- @import "./components/dataviews-bulk-actions-toolbar/style.scss";
4
3
  @import "./components/dataviews-filters/style.scss";
4
+ @import "./components/dataviews-footer/style.scss";
5
5
  @import "./components/dataviews-pagination/style.scss";
6
6
  @import "./components/dataviews-item-actions/style.scss";
7
7
  @import "./components/dataviews-selection-checkbox/style.scss";
package/src/types.ts CHANGED
@@ -163,6 +163,8 @@ export type NormalizedField< Item > = Field< Item > & {
163
163
  Edit: ComponentType< DataFormControlProps< Item > >;
164
164
  sort: ( a: Item, b: Item, direction: SortDirection ) => number;
165
165
  isValid: ( item: Item, context?: ValidationContext ) => boolean;
166
+ enableHiding: boolean;
167
+ enableSorting: boolean;
166
168
  };
167
169
 
168
170
  /**