@wordpress/dataviews 2.2.0 → 3.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.
- package/CHANGELOG.md +16 -0
- package/README.md +5 -5
- package/build/add-filter.js +1 -1
- package/build/add-filter.js.map +1 -1
- package/build/bulk-actions-toolbar.js +0 -1
- package/build/bulk-actions-toolbar.js.map +1 -1
- package/build/bulk-actions.js +1 -1
- package/build/bulk-actions.js.map +1 -1
- package/build/dataform.js +78 -0
- package/build/dataform.js.map +1 -0
- package/build/dataviews.js +17 -28
- package/build/dataviews.js.map +1 -1
- package/build/filter-and-sort-data-view.js +4 -1
- package/build/filter-and-sort-data-view.js.map +1 -1
- package/build/filter-summary.js +6 -5
- package/build/filter-summary.js.map +1 -1
- package/build/filters.js +1 -1
- package/build/filters.js.map +1 -1
- package/build/index.js +7 -0
- package/build/index.js.map +1 -1
- package/build/item-actions.js +1 -1
- package/build/item-actions.js.map +1 -1
- package/build/normalize-fields.js.map +1 -1
- package/build/pagination.js +2 -2
- package/build/pagination.js.map +1 -1
- package/build/private-types.js +6 -0
- package/build/private-types.js.map +1 -0
- package/build/reset-filters.js +1 -1
- package/build/reset-filters.js.map +1 -1
- package/build/search-widget.js +8 -6
- package/build/search-widget.js.map +1 -1
- package/build/single-selection-checkbox.js +5 -16
- package/build/single-selection-checkbox.js.map +1 -1
- package/build/types.js.map +1 -1
- package/build/utils.js.map +1 -1
- package/build/view-actions.js +76 -65
- package/build/view-actions.js.map +1 -1
- package/build/view-grid.js +7 -19
- package/build/view-grid.js.map +1 -1
- package/build/view-list.js +6 -5
- package/build/view-list.js.map +1 -1
- package/build/view-table.js +11 -20
- package/build/view-table.js.map +1 -1
- package/build-module/add-filter.js +1 -1
- package/build-module/add-filter.js.map +1 -1
- package/build-module/bulk-actions-toolbar.js +0 -1
- package/build-module/bulk-actions-toolbar.js.map +1 -1
- package/build-module/bulk-actions.js +1 -1
- package/build-module/bulk-actions.js.map +1 -1
- package/build-module/dataform.js +72 -0
- package/build-module/dataform.js.map +1 -0
- package/build-module/dataviews.js +15 -28
- package/build-module/dataviews.js.map +1 -1
- package/build-module/filter-and-sort-data-view.js +4 -1
- package/build-module/filter-and-sort-data-view.js.map +1 -1
- package/build-module/filter-summary.js +6 -5
- package/build-module/filter-summary.js.map +1 -1
- package/build-module/filters.js +1 -1
- package/build-module/filters.js.map +1 -1
- package/build-module/index.js +1 -0
- package/build-module/index.js.map +1 -1
- package/build-module/item-actions.js +1 -1
- package/build-module/item-actions.js.map +1 -1
- package/build-module/normalize-fields.js.map +1 -1
- package/build-module/pagination.js +2 -2
- package/build-module/pagination.js.map +1 -1
- package/build-module/private-types.js +2 -0
- package/build-module/private-types.js.map +1 -0
- package/build-module/reset-filters.js +1 -1
- package/build-module/reset-filters.js.map +1 -1
- package/build-module/search-widget.js +8 -6
- package/build-module/search-widget.js.map +1 -1
- package/build-module/single-selection-checkbox.js +5 -16
- package/build-module/single-selection-checkbox.js.map +1 -1
- package/build-module/types.js.map +1 -1
- package/build-module/utils.js.map +1 -1
- package/build-module/view-actions.js +80 -68
- package/build-module/view-actions.js.map +1 -1
- package/build-module/view-grid.js +7 -19
- package/build-module/view-grid.js.map +1 -1
- package/build-module/view-list.js +6 -5
- package/build-module/view-list.js.map +1 -1
- package/build-module/view-table.js +11 -20
- package/build-module/view-table.js.map +1 -1
- package/build-style/style-rtl.css +8 -24
- package/build-style/style.css +8 -24
- package/build-types/bulk-actions-toolbar.d.ts +5 -4
- package/build-types/bulk-actions-toolbar.d.ts.map +1 -1
- package/build-types/bulk-actions.d.ts +7 -6
- package/build-types/bulk-actions.d.ts.map +1 -1
- package/build-types/dataform.d.ts +17 -0
- package/build-types/dataform.d.ts.map +1 -0
- package/build-types/dataviews.d.ts +14 -7
- package/build-types/dataviews.d.ts.map +1 -1
- package/build-types/filter-and-sort-data-view.d.ts +2 -2
- package/build-types/filter-and-sort-data-view.d.ts.map +1 -1
- package/build-types/filter-summary.d.ts.map +1 -1
- package/build-types/filters.d.ts +3 -3
- package/build-types/filters.d.ts.map +1 -1
- package/build-types/index.d.ts +1 -0
- package/build-types/index.d.ts.map +1 -1
- package/build-types/item-actions.d.ts +10 -10
- package/build-types/item-actions.d.ts.map +1 -1
- package/build-types/normalize-fields.d.ts +2 -2
- package/build-types/normalize-fields.d.ts.map +1 -1
- package/build-types/private-types.d.ts +3 -0
- package/build-types/private-types.d.ts.map +1 -0
- package/build-types/single-selection-checkbox.d.ts +5 -5
- package/build-types/single-selection-checkbox.d.ts.map +1 -1
- package/build-types/stories/fixtures.d.ts +14 -1
- package/build-types/stories/fixtures.d.ts.map +1 -1
- package/build-types/stories/index.story.d.ts +15 -1
- package/build-types/stories/index.story.d.ts.map +1 -1
- package/build-types/types.d.ts +68 -27
- package/build-types/types.d.ts.map +1 -1
- package/build-types/utils.d.ts +2 -2
- package/build-types/utils.d.ts.map +1 -1
- package/build-types/view-actions.d.ts +4 -4
- package/build-types/view-actions.d.ts.map +1 -1
- package/build-types/view-grid.d.ts +2 -2
- package/build-types/view-grid.d.ts.map +1 -1
- package/build-types/view-list.d.ts +2 -2
- package/build-types/view-list.d.ts.map +1 -1
- package/build-types/view-table.d.ts +2 -2
- package/build-types/view-table.d.ts.map +1 -1
- package/package.json +10 -10
- package/src/add-filter.tsx +1 -1
- package/src/bulk-actions-toolbar.tsx +13 -13
- package/src/bulk-actions.tsx +18 -13
- package/src/dataform.tsx +106 -0
- package/src/dataviews.tsx +43 -49
- package/src/filter-and-sort-data-view.ts +13 -3
- package/src/filter-summary.tsx +18 -12
- package/src/filters.tsx +4 -4
- package/src/index.ts +1 -0
- package/src/item-actions.tsx +15 -16
- package/src/normalize-fields.ts +5 -3
- package/src/pagination.tsx +2 -2
- package/src/private-types.tsx +2 -0
- package/src/reset-filters.tsx +1 -1
- package/src/search-widget.tsx +6 -6
- package/src/single-selection-checkbox.tsx +14 -29
- package/src/stories/fixtures.js +17 -1
- package/src/stories/index.story.js +15 -28
- package/src/style.scss +10 -22
- package/src/test/filter-and-sort-data-view.js +16 -1
- package/src/types.ts +68 -34
- package/src/utils.ts +2 -4
- package/src/view-actions.tsx +105 -102
- package/src/view-grid.tsx +21 -38
- package/src/view-list.tsx +12 -15
- package/src/view-table.tsx +31 -42
- package/tsconfig.tsbuildinfo +1 -1
package/src/view-actions.tsx
CHANGED
|
@@ -9,10 +9,11 @@ import type { ChangeEvent } from 'react';
|
|
|
9
9
|
import {
|
|
10
10
|
Button,
|
|
11
11
|
privateApis as componentsPrivateApis,
|
|
12
|
+
__experimentalHStack as HStack,
|
|
12
13
|
} from '@wordpress/components';
|
|
13
|
-
import { __ } from '@wordpress/i18n';
|
|
14
|
+
import { __, _x } from '@wordpress/i18n';
|
|
14
15
|
import { memo } from '@wordpress/element';
|
|
15
|
-
import {
|
|
16
|
+
import { cog } from '@wordpress/icons';
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
19
|
* Internal dependencies
|
|
@@ -20,7 +21,7 @@ import { settings } from '@wordpress/icons';
|
|
|
20
21
|
import { unlock } from './lock-unlock';
|
|
21
22
|
import { SORTING_DIRECTIONS, sortLabels } from './constants';
|
|
22
23
|
import { VIEW_LAYOUTS } from './layouts';
|
|
23
|
-
import type {
|
|
24
|
+
import type { NormalizedField, View, SupportedLayouts } from './types';
|
|
24
25
|
|
|
25
26
|
const {
|
|
26
27
|
DropdownMenuV2: DropdownMenu,
|
|
@@ -34,7 +35,7 @@ const {
|
|
|
34
35
|
interface ViewTypeMenuProps {
|
|
35
36
|
view: View;
|
|
36
37
|
onChangeView: ( view: View ) => void;
|
|
37
|
-
|
|
38
|
+
defaultLayouts?: SupportedLayouts;
|
|
38
39
|
}
|
|
39
40
|
|
|
40
41
|
interface PageSizeMenuProps {
|
|
@@ -42,84 +43,64 @@ interface PageSizeMenuProps {
|
|
|
42
43
|
onChangeView: ( view: View ) => void;
|
|
43
44
|
}
|
|
44
45
|
|
|
45
|
-
interface FieldsVisibilityMenuProps< Item
|
|
46
|
+
interface FieldsVisibilityMenuProps< Item > {
|
|
46
47
|
view: View;
|
|
47
48
|
onChangeView: ( view: View ) => void;
|
|
48
49
|
fields: NormalizedField< Item >[];
|
|
49
50
|
}
|
|
50
51
|
|
|
51
|
-
interface SortMenuProps< Item
|
|
52
|
+
interface SortMenuProps< Item > {
|
|
52
53
|
fields: NormalizedField< Item >[];
|
|
53
54
|
view: View;
|
|
54
55
|
onChangeView: ( view: View ) => void;
|
|
55
56
|
}
|
|
56
57
|
|
|
57
|
-
interface ViewActionsProps< Item
|
|
58
|
+
interface ViewActionsProps< Item > {
|
|
58
59
|
fields: NormalizedField< Item >[];
|
|
59
60
|
view: View;
|
|
60
61
|
onChangeView: ( view: View ) => void;
|
|
61
|
-
|
|
62
|
+
defaultLayouts?: SupportedLayouts;
|
|
62
63
|
}
|
|
63
64
|
|
|
64
65
|
function ViewTypeMenu( {
|
|
65
66
|
view,
|
|
66
67
|
onChangeView,
|
|
67
|
-
|
|
68
|
+
defaultLayouts = { list: {}, grid: {}, table: {} },
|
|
68
69
|
}: ViewTypeMenuProps ) {
|
|
69
|
-
|
|
70
|
-
if (
|
|
71
|
-
_availableViews = _availableViews.filter( ( _view ) =>
|
|
72
|
-
supportedLayouts.includes( _view.type )
|
|
73
|
-
);
|
|
74
|
-
}
|
|
75
|
-
if ( _availableViews.length === 1 ) {
|
|
70
|
+
const availableLayouts = Object.keys( defaultLayouts );
|
|
71
|
+
if ( availableLayouts.length <= 1 ) {
|
|
76
72
|
return null;
|
|
77
73
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
74
|
+
return availableLayouts.map( ( layout ) => {
|
|
75
|
+
const config = VIEW_LAYOUTS.find( ( v ) => v.type === layout );
|
|
76
|
+
if ( ! config ) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
return (
|
|
80
|
+
<DropdownMenuRadioItem
|
|
81
|
+
key={ layout }
|
|
82
|
+
value={ layout }
|
|
83
|
+
name="view-actions-available-view"
|
|
84
|
+
checked={ layout === view.type }
|
|
85
|
+
hideOnClick
|
|
86
|
+
onChange={ ( e: ChangeEvent< HTMLInputElement > ) => {
|
|
87
|
+
switch ( e.target.value ) {
|
|
88
|
+
case 'list':
|
|
89
|
+
case 'grid':
|
|
90
|
+
case 'table':
|
|
91
|
+
return onChangeView( {
|
|
92
|
+
...view,
|
|
93
|
+
type: e.target.value,
|
|
94
|
+
...defaultLayouts[ e.target.value ],
|
|
95
|
+
} );
|
|
85
96
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
{ _availableViews.map( ( availableView ) => {
|
|
94
|
-
return (
|
|
95
|
-
<DropdownMenuRadioItem
|
|
96
|
-
key={ availableView.type }
|
|
97
|
-
value={ availableView.type }
|
|
98
|
-
name="view-actions-available-view"
|
|
99
|
-
checked={ availableView.type === view.type }
|
|
100
|
-
hideOnClick
|
|
101
|
-
onChange={ ( e: ChangeEvent< HTMLInputElement > ) => {
|
|
102
|
-
switch ( e.target.value ) {
|
|
103
|
-
case 'list':
|
|
104
|
-
case 'grid':
|
|
105
|
-
case 'table':
|
|
106
|
-
return onChangeView( {
|
|
107
|
-
...view,
|
|
108
|
-
type: e.target.value,
|
|
109
|
-
layout: {},
|
|
110
|
-
} );
|
|
111
|
-
}
|
|
112
|
-
throw new Error( 'Invalid dataview' );
|
|
113
|
-
} }
|
|
114
|
-
>
|
|
115
|
-
<DropdownMenuItemLabel>
|
|
116
|
-
{ availableView.label }
|
|
117
|
-
</DropdownMenuItemLabel>
|
|
118
|
-
</DropdownMenuRadioItem>
|
|
119
|
-
);
|
|
120
|
-
} ) }
|
|
121
|
-
</DropdownMenu>
|
|
122
|
-
);
|
|
97
|
+
throw new Error( 'Invalid dataview' );
|
|
98
|
+
} }
|
|
99
|
+
>
|
|
100
|
+
<DropdownMenuItemLabel>{ config.label }</DropdownMenuItemLabel>
|
|
101
|
+
</DropdownMenuRadioItem>
|
|
102
|
+
);
|
|
103
|
+
} );
|
|
123
104
|
}
|
|
124
105
|
|
|
125
106
|
const PAGE_SIZE_VALUES = [ 10, 20, 50, 100 ];
|
|
@@ -161,15 +142,17 @@ function PageSizeMenu( { view, onChangeView }: PageSizeMenuProps ) {
|
|
|
161
142
|
);
|
|
162
143
|
}
|
|
163
144
|
|
|
164
|
-
function FieldsVisibilityMenu< Item
|
|
145
|
+
function FieldsVisibilityMenu< Item >( {
|
|
165
146
|
view,
|
|
166
147
|
onChangeView,
|
|
167
148
|
fields,
|
|
168
149
|
}: FieldsVisibilityMenuProps< Item > ) {
|
|
169
150
|
const hidableFields = fields.filter(
|
|
170
151
|
( field ) =>
|
|
171
|
-
field.enableHiding !== false &&
|
|
152
|
+
field.enableHiding !== false &&
|
|
153
|
+
field.id !== view?.layout?.mediaField
|
|
172
154
|
);
|
|
155
|
+
const viewFields = view.fields || fields.map( ( field ) => field.id );
|
|
173
156
|
if ( ! hidableFields?.length ) {
|
|
174
157
|
return null;
|
|
175
158
|
}
|
|
@@ -188,20 +171,15 @@ function FieldsVisibilityMenu< Item extends AnyItem >( {
|
|
|
188
171
|
<DropdownMenuCheckboxItem
|
|
189
172
|
key={ field.id }
|
|
190
173
|
value={ field.id }
|
|
191
|
-
checked={
|
|
174
|
+
checked={ viewFields.includes( field.id ) }
|
|
192
175
|
onChange={ () => {
|
|
193
176
|
onChangeView( {
|
|
194
177
|
...view,
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
)
|
|
198
|
-
? view.hiddenFields.filter(
|
|
178
|
+
fields: viewFields.includes( field.id )
|
|
179
|
+
? viewFields.filter(
|
|
199
180
|
( id ) => id !== field.id
|
|
200
181
|
)
|
|
201
|
-
: [
|
|
202
|
-
...( view.hiddenFields || [] ),
|
|
203
|
-
field.id,
|
|
204
|
-
],
|
|
182
|
+
: [ ...viewFields, field.id ],
|
|
205
183
|
} );
|
|
206
184
|
} }
|
|
207
185
|
>
|
|
@@ -215,7 +193,7 @@ function FieldsVisibilityMenu< Item extends AnyItem >( {
|
|
|
215
193
|
);
|
|
216
194
|
}
|
|
217
195
|
|
|
218
|
-
function SortMenu< Item
|
|
196
|
+
function SortMenu< Item >( {
|
|
219
197
|
fields,
|
|
220
198
|
view,
|
|
221
199
|
onChangeView,
|
|
@@ -303,41 +281,66 @@ function SortMenu< Item extends AnyItem >( {
|
|
|
303
281
|
);
|
|
304
282
|
}
|
|
305
283
|
|
|
306
|
-
function _ViewActions< Item
|
|
284
|
+
function _ViewActions< Item >( {
|
|
307
285
|
fields,
|
|
308
286
|
view,
|
|
309
287
|
onChangeView,
|
|
310
|
-
|
|
288
|
+
defaultLayouts,
|
|
311
289
|
}: ViewActionsProps< Item > ) {
|
|
290
|
+
const activeView = VIEW_LAYOUTS.find( ( v ) => view.type === v.type );
|
|
312
291
|
return (
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
292
|
+
<>
|
|
293
|
+
<HStack
|
|
294
|
+
spacing={ 1 }
|
|
295
|
+
expanded={ false }
|
|
296
|
+
style={ { flexShrink: 0 } }
|
|
297
|
+
>
|
|
298
|
+
<DropdownMenu
|
|
299
|
+
trigger={
|
|
300
|
+
<Button
|
|
301
|
+
size="compact"
|
|
302
|
+
icon={ activeView?.icon }
|
|
303
|
+
label={ __( 'Layout' ) }
|
|
304
|
+
/>
|
|
305
|
+
}
|
|
306
|
+
>
|
|
307
|
+
<ViewTypeMenu
|
|
308
|
+
view={ view }
|
|
309
|
+
onChangeView={ onChangeView }
|
|
310
|
+
defaultLayouts={ defaultLayouts }
|
|
311
|
+
/>
|
|
312
|
+
</DropdownMenu>
|
|
313
|
+
<DropdownMenu
|
|
314
|
+
trigger={
|
|
315
|
+
<Button
|
|
316
|
+
size="compact"
|
|
317
|
+
icon={ cog }
|
|
318
|
+
label={ _x(
|
|
319
|
+
'View options',
|
|
320
|
+
'View is used as a noun'
|
|
321
|
+
) }
|
|
322
|
+
/>
|
|
323
|
+
}
|
|
324
|
+
>
|
|
325
|
+
<DropdownMenuGroup>
|
|
326
|
+
<SortMenu
|
|
327
|
+
fields={ fields }
|
|
328
|
+
view={ view }
|
|
329
|
+
onChangeView={ onChangeView }
|
|
330
|
+
/>
|
|
331
|
+
<FieldsVisibilityMenu
|
|
332
|
+
fields={ fields }
|
|
333
|
+
view={ view }
|
|
334
|
+
onChangeView={ onChangeView }
|
|
335
|
+
/>
|
|
336
|
+
<PageSizeMenu
|
|
337
|
+
view={ view }
|
|
338
|
+
onChangeView={ onChangeView }
|
|
339
|
+
/>
|
|
340
|
+
</DropdownMenuGroup>
|
|
341
|
+
</DropdownMenu>
|
|
342
|
+
</HStack>
|
|
343
|
+
</>
|
|
341
344
|
);
|
|
342
345
|
}
|
|
343
346
|
|
package/src/view-grid.tsx
CHANGED
|
@@ -22,12 +22,12 @@ import { __ } from '@wordpress/i18n';
|
|
|
22
22
|
import ItemActions from './item-actions';
|
|
23
23
|
import SingleSelectionCheckbox from './single-selection-checkbox';
|
|
24
24
|
import { useHasAPossibleBulkAction } from './bulk-actions';
|
|
25
|
-
import type { Action,
|
|
25
|
+
import type { Action, NormalizedField, ViewGridProps } from './types';
|
|
26
|
+
import type { SetSelection } from './private-types';
|
|
26
27
|
|
|
27
|
-
interface GridItemProps< Item
|
|
28
|
+
interface GridItemProps< Item > {
|
|
28
29
|
selection: string[];
|
|
29
|
-
|
|
30
|
-
onSelectionChange: ( items: Item[] ) => void;
|
|
30
|
+
onSelectionChange: SetSelection;
|
|
31
31
|
getItemId: ( item: Item ) => string;
|
|
32
32
|
item: Item;
|
|
33
33
|
actions: Action< Item >[];
|
|
@@ -38,9 +38,8 @@ interface GridItemProps< Item extends AnyItem > {
|
|
|
38
38
|
columnFields?: string[];
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
function GridItem< Item
|
|
41
|
+
function GridItem< Item >( {
|
|
42
42
|
selection,
|
|
43
|
-
data,
|
|
44
43
|
onSelectionChange,
|
|
45
44
|
getItemId,
|
|
46
45
|
item,
|
|
@@ -68,27 +67,11 @@ function GridItem< Item extends AnyItem >( {
|
|
|
68
67
|
if ( ! hasBulkAction ) {
|
|
69
68
|
return;
|
|
70
69
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
itemId === id ||
|
|
77
|
-
selection.includes( itemId )
|
|
78
|
-
);
|
|
79
|
-
} )
|
|
80
|
-
);
|
|
81
|
-
} else {
|
|
82
|
-
onSelectionChange(
|
|
83
|
-
data.filter( ( _item ) => {
|
|
84
|
-
const itemId = getItemId?.( _item );
|
|
85
|
-
return (
|
|
86
|
-
itemId !== id &&
|
|
87
|
-
selection.includes( itemId )
|
|
88
|
-
);
|
|
89
|
-
} )
|
|
90
|
-
);
|
|
91
|
-
}
|
|
70
|
+
onSelectionChange(
|
|
71
|
+
selection.includes( id )
|
|
72
|
+
? selection.filter( ( itemId ) => id !== itemId )
|
|
73
|
+
: [ ...selection, id ]
|
|
74
|
+
);
|
|
92
75
|
}
|
|
93
76
|
} }
|
|
94
77
|
>
|
|
@@ -104,7 +87,6 @@ function GridItem< Item extends AnyItem >( {
|
|
|
104
87
|
selection={ selection }
|
|
105
88
|
onSelectionChange={ onSelectionChange }
|
|
106
89
|
getItemId={ getItemId }
|
|
107
|
-
data={ data }
|
|
108
90
|
primaryField={ primaryField }
|
|
109
91
|
disabled={ ! hasBulkAction }
|
|
110
92
|
/>
|
|
@@ -187,7 +169,7 @@ function GridItem< Item extends AnyItem >( {
|
|
|
187
169
|
);
|
|
188
170
|
}
|
|
189
171
|
|
|
190
|
-
export default function ViewGrid< Item
|
|
172
|
+
export default function ViewGrid< Item >( {
|
|
191
173
|
actions,
|
|
192
174
|
data,
|
|
193
175
|
fields,
|
|
@@ -198,24 +180,26 @@ export default function ViewGrid< Item extends AnyItem >( {
|
|
|
198
180
|
view,
|
|
199
181
|
}: ViewGridProps< Item > ) {
|
|
200
182
|
const mediaField = fields.find(
|
|
201
|
-
( field ) => field.id === view.layout
|
|
183
|
+
( field ) => field.id === view.layout?.mediaField
|
|
202
184
|
);
|
|
203
185
|
const primaryField = fields.find(
|
|
204
|
-
( field ) => field.id === view.layout
|
|
186
|
+
( field ) => field.id === view.layout?.primaryField
|
|
205
187
|
);
|
|
188
|
+
const viewFields = view.fields || fields.map( ( field ) => field.id );
|
|
206
189
|
const { visibleFields, badgeFields } = fields.reduce(
|
|
207
190
|
( accumulator: Record< string, NormalizedField< Item >[] >, field ) => {
|
|
208
191
|
if (
|
|
209
|
-
|
|
210
|
-
[
|
|
211
|
-
|
|
212
|
-
|
|
192
|
+
! viewFields.includes( field.id ) ||
|
|
193
|
+
[
|
|
194
|
+
view.layout?.mediaField,
|
|
195
|
+
view?.layout?.primaryField,
|
|
196
|
+
].includes( field.id )
|
|
213
197
|
) {
|
|
214
198
|
return accumulator;
|
|
215
199
|
}
|
|
216
200
|
// If the field is a badge field, add it to the badgeFields array
|
|
217
201
|
// otherwise add it to the rest visibleFields array.
|
|
218
|
-
const key = view.layout
|
|
202
|
+
const key = view.layout?.badgeFields?.includes( field.id )
|
|
219
203
|
? 'badgeFields'
|
|
220
204
|
: 'visibleFields';
|
|
221
205
|
accumulator[ key ].push( field );
|
|
@@ -239,7 +223,6 @@ export default function ViewGrid< Item extends AnyItem >( {
|
|
|
239
223
|
<GridItem
|
|
240
224
|
key={ getItemId( item ) }
|
|
241
225
|
selection={ selection }
|
|
242
|
-
data={ data }
|
|
243
226
|
onSelectionChange={ onSelectionChange }
|
|
244
227
|
getItemId={ getItemId }
|
|
245
228
|
item={ item }
|
|
@@ -248,7 +231,7 @@ export default function ViewGrid< Item extends AnyItem >( {
|
|
|
248
231
|
primaryField={ primaryField }
|
|
249
232
|
visibleFields={ visibleFields }
|
|
250
233
|
badgeFields={ badgeFields }
|
|
251
|
-
columnFields={ view.layout
|
|
234
|
+
columnFields={ view.layout?.columnFields }
|
|
252
235
|
/>
|
|
253
236
|
);
|
|
254
237
|
} ) }
|
package/src/view-list.tsx
CHANGED
|
@@ -33,11 +33,11 @@ import { useRegistry } from '@wordpress/data';
|
|
|
33
33
|
* Internal dependencies
|
|
34
34
|
*/
|
|
35
35
|
import { unlock } from './lock-unlock';
|
|
36
|
-
import type { Action,
|
|
36
|
+
import type { Action, NormalizedField, ViewListProps } from './types';
|
|
37
37
|
|
|
38
38
|
import { ActionsDropdownMenuGroup, ActionModal } from './item-actions';
|
|
39
39
|
|
|
40
|
-
interface ListViewItemProps< Item
|
|
40
|
+
interface ListViewItemProps< Item > {
|
|
41
41
|
actions: Action< Item >[];
|
|
42
42
|
id?: string;
|
|
43
43
|
isSelected: boolean;
|
|
@@ -57,7 +57,7 @@ const {
|
|
|
57
57
|
DropdownMenuV2: DropdownMenu,
|
|
58
58
|
} = unlock( componentsPrivateApis );
|
|
59
59
|
|
|
60
|
-
function ListItem< Item
|
|
60
|
+
function ListItem< Item >( {
|
|
61
61
|
actions,
|
|
62
62
|
id,
|
|
63
63
|
isSelected,
|
|
@@ -258,7 +258,7 @@ function ListItem< Item extends AnyItem >( {
|
|
|
258
258
|
size="compact"
|
|
259
259
|
icon={ moreVertical }
|
|
260
260
|
label={ __( 'Actions' ) }
|
|
261
|
-
|
|
261
|
+
accessibleWhenDisabled
|
|
262
262
|
disabled={ ! actions.length }
|
|
263
263
|
onKeyDown={ ( event: {
|
|
264
264
|
key: string;
|
|
@@ -303,9 +303,7 @@ function ListItem< Item extends AnyItem >( {
|
|
|
303
303
|
);
|
|
304
304
|
}
|
|
305
305
|
|
|
306
|
-
export default function ViewList< Item
|
|
307
|
-
props: ViewListProps< Item >
|
|
308
|
-
) {
|
|
306
|
+
export default function ViewList< Item >( props: ViewListProps< Item > ) {
|
|
309
307
|
const {
|
|
310
308
|
actions,
|
|
311
309
|
data,
|
|
@@ -322,23 +320,22 @@ export default function ViewList< Item extends AnyItem >(
|
|
|
322
320
|
);
|
|
323
321
|
|
|
324
322
|
const mediaField = fields.find(
|
|
325
|
-
( field ) => field.id === view.layout
|
|
323
|
+
( field ) => field.id === view.layout?.mediaField
|
|
326
324
|
);
|
|
327
325
|
const primaryField = fields.find(
|
|
328
|
-
( field ) => field.id === view.layout
|
|
326
|
+
( field ) => field.id === view.layout?.primaryField
|
|
329
327
|
);
|
|
328
|
+
const viewFields = view.fields || fields.map( ( field ) => field.id );
|
|
330
329
|
const visibleFields = fields.filter(
|
|
331
330
|
( field ) =>
|
|
332
|
-
|
|
333
|
-
! [ view.layout
|
|
331
|
+
viewFields.includes( field.id ) &&
|
|
332
|
+
! [ view.layout?.primaryField, view.layout?.mediaField ].includes(
|
|
334
333
|
field.id
|
|
335
334
|
)
|
|
336
335
|
);
|
|
337
336
|
|
|
338
|
-
const onSelect =
|
|
339
|
-
(
|
|
340
|
-
[ onSelectionChange ]
|
|
341
|
-
);
|
|
337
|
+
const onSelect = ( item: Item ) =>
|
|
338
|
+
onSelectionChange( [ getItemId( item ) ] );
|
|
342
339
|
|
|
343
340
|
const getItemDomId = useCallback(
|
|
344
341
|
( item?: Item ) =>
|