@wordpress/dataviews 4.5.0 → 4.7.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 +6 -0
- package/build/components/dataviews-bulk-actions/index.js +8 -8
- package/build/components/dataviews-bulk-actions/index.js.map +1 -1
- package/build/components/dataviews-filters/add-filter.js +7 -7
- package/build/components/dataviews-filters/add-filter.js.map +1 -1
- package/build/components/dataviews-filters/filter-summary.js +8 -8
- package/build/components/dataviews-filters/filter-summary.js.map +1 -1
- package/build/components/dataviews-filters/index.js +3 -3
- package/build/components/dataviews-filters/index.js.map +1 -1
- package/build/components/dataviews-filters/search-widget.js +1 -1
- package/build/components/dataviews-filters/search-widget.js.map +1 -1
- package/build/components/dataviews-item-actions/index.js +11 -11
- package/build/components/dataviews-item-actions/index.js.map +1 -1
- package/build/components/dataviews-selection-checkbox/index.js +1 -2
- package/build/components/dataviews-selection-checkbox/index.js.map +1 -1
- package/build/components/dataviews-view-config/index.js +10 -10
- package/build/components/dataviews-view-config/index.js.map +1 -1
- package/build/dataforms-layouts/panel/index.js +1 -1
- package/build/dataforms-layouts/panel/index.js.map +1 -1
- package/build/dataviews-layouts/grid/index.js.map +1 -1
- package/build/dataviews-layouts/list/index.js +74 -81
- package/build/dataviews-layouts/list/index.js.map +1 -1
- package/build/dataviews-layouts/table/column-header-menu.js +18 -18
- package/build/dataviews-layouts/table/column-header-menu.js.map +1 -1
- package/build/types.js.map +1 -1
- package/build-module/components/dataform-combined-edit/index.js +1 -3
- package/build-module/components/dataform-combined-edit/index.js.map +1 -1
- package/build-module/components/dataviews/index.js +1 -2
- package/build-module/components/dataviews/index.js.map +1 -1
- package/build-module/components/dataviews-bulk-actions/index.js +9 -10
- package/build-module/components/dataviews-bulk-actions/index.js.map +1 -1
- package/build-module/components/dataviews-filters/add-filter.js +6 -6
- package/build-module/components/dataviews-filters/add-filter.js.map +1 -1
- package/build-module/components/dataviews-filters/filter-summary.js +9 -10
- package/build-module/components/dataviews-filters/filter-summary.js.map +1 -1
- package/build-module/components/dataviews-filters/index.js +6 -7
- package/build-module/components/dataviews-filters/index.js.map +1 -1
- package/build-module/components/dataviews-filters/search-widget.js +2 -3
- package/build-module/components/dataviews-filters/search-widget.js.map +1 -1
- package/build-module/components/dataviews-footer/index.js +1 -2
- package/build-module/components/dataviews-footer/index.js.map +1 -1
- package/build-module/components/dataviews-item-actions/index.js +11 -13
- package/build-module/components/dataviews-item-actions/index.js.map +1 -1
- package/build-module/components/dataviews-pagination/index.js +1 -2
- package/build-module/components/dataviews-pagination/index.js.map +1 -1
- package/build-module/components/dataviews-selection-checkbox/index.js +1 -2
- package/build-module/components/dataviews-selection-checkbox/index.js.map +1 -1
- package/build-module/components/dataviews-view-config/index.js +11 -13
- package/build-module/components/dataviews-view-config/index.js.map +1 -1
- package/build-module/dataform-controls/datetime.js +1 -2
- package/build-module/dataform-controls/datetime.js.map +1 -1
- package/build-module/dataforms-layouts/panel/index.js +3 -5
- package/build-module/dataforms-layouts/panel/index.js.map +1 -1
- package/build-module/dataviews-layouts/grid/index.js +1 -3
- package/build-module/dataviews-layouts/grid/index.js.map +1 -1
- package/build-module/dataviews-layouts/list/index.js +76 -84
- package/build-module/dataviews-layouts/list/index.js.map +1 -1
- package/build-module/dataviews-layouts/table/column-header-menu.js +19 -20
- package/build-module/dataviews-layouts/table/column-header-menu.js.map +1 -1
- package/build-module/dataviews-layouts/table/index.js +1 -3
- package/build-module/dataviews-layouts/table/index.js.map +1 -1
- package/build-module/types.js.map +1 -1
- package/build-style/style-rtl.css +30 -38
- package/build-style/style.css +30 -38
- package/build-types/components/dataviews-filters/add-filter.d.ts +1 -1
- package/build-types/components/dataviews-filters/add-filter.d.ts.map +1 -1
- package/build-types/components/dataviews-item-actions/index.d.ts +2 -2
- package/build-types/components/dataviews-item-actions/index.d.ts.map +1 -1
- package/build-types/components/dataviews-selection-checkbox/index.d.ts.map +1 -1
- package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
- package/build-types/dataviews-layouts/list/index.d.ts.map +1 -1
- package/build-types/dataviews-layouts/table/column-header-menu.d.ts.map +1 -1
- package/build-types/types.d.ts +5 -6
- package/build-types/types.d.ts.map +1 -1
- package/package.json +13 -12
- package/src/components/dataviews-bulk-actions/index.tsx +6 -6
- package/src/components/dataviews-filters/add-filter.tsx +8 -10
- package/src/components/dataviews-filters/index.tsx +4 -4
- package/src/components/dataviews-item-actions/index.tsx +15 -15
- package/src/components/dataviews-selection-checkbox/index.tsx +3 -2
- package/src/components/dataviews-view-config/index.tsx +9 -11
- package/src/dataforms-layouts/panel/index.tsx +2 -2
- package/src/dataviews-layouts/list/index.tsx +85 -106
- package/src/dataviews-layouts/list/style.scss +32 -49
- package/src/dataviews-layouts/table/column-header-menu.tsx +31 -35
- package/src/types.ts +6 -2
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -32,7 +32,7 @@ import { useRegistry } from '@wordpress/data';
|
|
|
32
32
|
*/
|
|
33
33
|
import { unlock } from '../../lock-unlock';
|
|
34
34
|
import {
|
|
35
|
-
|
|
35
|
+
ActionsMenuGroup,
|
|
36
36
|
ActionModal,
|
|
37
37
|
} from '../../components/dataviews-item-actions';
|
|
38
38
|
import type { Action, NormalizedField, ViewListProps } from '../../types';
|
|
@@ -49,7 +49,7 @@ interface ListViewItemProps< Item > {
|
|
|
49
49
|
onDropdownTriggerKeyDown: React.KeyboardEventHandler< HTMLButtonElement >;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
const {
|
|
52
|
+
const { Menu } = unlock( componentsPrivateApis );
|
|
53
53
|
|
|
54
54
|
function generateItemWrapperCompositeId( idPrefix: string ) {
|
|
55
55
|
return `${ idPrefix }-item-wrapper`;
|
|
@@ -145,11 +145,9 @@ function ListItem< Item >( {
|
|
|
145
145
|
const descriptionId = `${ idPrefix }-description`;
|
|
146
146
|
|
|
147
147
|
const [ isHovered, setIsHovered ] = useState( false );
|
|
148
|
-
const
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
const handleMouseLeave = () => {
|
|
152
|
-
setIsHovered( false );
|
|
148
|
+
const handleHover: React.MouseEventHandler = ( { type } ) => {
|
|
149
|
+
const isHover = type === 'mouseenter';
|
|
150
|
+
setIsHovered( isHover );
|
|
153
151
|
};
|
|
154
152
|
|
|
155
153
|
useEffect( () => {
|
|
@@ -178,15 +176,54 @@ function ListItem< Item >( {
|
|
|
178
176
|
}, [ actions, item ] );
|
|
179
177
|
|
|
180
178
|
const renderedMediaField = mediaField?.render ? (
|
|
181
|
-
<
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
);
|
|
179
|
+
<div className="dataviews-view-list__media-wrapper">
|
|
180
|
+
<mediaField.render item={ item } />
|
|
181
|
+
</div>
|
|
182
|
+
) : null;
|
|
185
183
|
|
|
186
184
|
const renderedPrimaryField = primaryField?.render ? (
|
|
187
185
|
<primaryField.render item={ item } />
|
|
188
186
|
) : null;
|
|
189
187
|
|
|
188
|
+
const usedActions = eligibleActions?.length > 0 && (
|
|
189
|
+
<HStack spacing={ 3 } className="dataviews-view-list__item-actions">
|
|
190
|
+
{ primaryAction && (
|
|
191
|
+
<PrimaryActionGridCell
|
|
192
|
+
idPrefix={ idPrefix }
|
|
193
|
+
primaryAction={ primaryAction }
|
|
194
|
+
item={ item }
|
|
195
|
+
/>
|
|
196
|
+
) }
|
|
197
|
+
<div role="gridcell">
|
|
198
|
+
<Menu
|
|
199
|
+
trigger={
|
|
200
|
+
<Composite.Item
|
|
201
|
+
id={ generateDropdownTriggerCompositeId(
|
|
202
|
+
idPrefix
|
|
203
|
+
) }
|
|
204
|
+
render={
|
|
205
|
+
<Button
|
|
206
|
+
size="small"
|
|
207
|
+
icon={ moreVertical }
|
|
208
|
+
label={ __( 'Actions' ) }
|
|
209
|
+
accessibleWhenDisabled
|
|
210
|
+
disabled={ ! actions.length }
|
|
211
|
+
onKeyDown={ onDropdownTriggerKeyDown }
|
|
212
|
+
/>
|
|
213
|
+
}
|
|
214
|
+
/>
|
|
215
|
+
}
|
|
216
|
+
placement="bottom-end"
|
|
217
|
+
>
|
|
218
|
+
<ActionsMenuGroup
|
|
219
|
+
actions={ eligibleActions }
|
|
220
|
+
item={ item }
|
|
221
|
+
/>
|
|
222
|
+
</Menu>
|
|
223
|
+
</div>
|
|
224
|
+
</HStack>
|
|
225
|
+
);
|
|
226
|
+
|
|
190
227
|
return (
|
|
191
228
|
<Composite.Row
|
|
192
229
|
ref={ itemRef }
|
|
@@ -196,116 +233,58 @@ function ListItem< Item >( {
|
|
|
196
233
|
'is-selected': isSelected,
|
|
197
234
|
'is-hovered': isHovered,
|
|
198
235
|
} ) }
|
|
199
|
-
onMouseEnter={
|
|
200
|
-
onMouseLeave={
|
|
236
|
+
onMouseEnter={ handleHover }
|
|
237
|
+
onMouseLeave={ handleHover }
|
|
201
238
|
>
|
|
202
|
-
<HStack
|
|
203
|
-
className="dataviews-view-list__item-wrapper"
|
|
204
|
-
alignment="center"
|
|
205
|
-
spacing={ 0 }
|
|
206
|
-
>
|
|
239
|
+
<HStack className="dataviews-view-list__item-wrapper" spacing={ 0 }>
|
|
207
240
|
<div role="gridcell">
|
|
208
241
|
<Composite.Item
|
|
209
|
-
render={ <div /> }
|
|
210
|
-
role="button"
|
|
211
242
|
id={ generateItemWrapperCompositeId( idPrefix ) }
|
|
212
243
|
aria-pressed={ isSelected }
|
|
213
244
|
aria-labelledby={ labelId }
|
|
214
245
|
aria-describedby={ descriptionId }
|
|
215
246
|
className="dataviews-view-list__item"
|
|
216
247
|
onClick={ () => onSelect( item ) }
|
|
248
|
+
/>
|
|
249
|
+
</div>
|
|
250
|
+
<HStack spacing={ 3 } justify="start" alignment="flex-start">
|
|
251
|
+
{ renderedMediaField }
|
|
252
|
+
<VStack
|
|
253
|
+
spacing={ 1 }
|
|
254
|
+
className="dataviews-view-list__field-wrapper"
|
|
217
255
|
>
|
|
218
|
-
<HStack
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
>
|
|
223
|
-
<div className="dataviews-view-list__media-wrapper">
|
|
224
|
-
{ renderedMediaField }
|
|
225
|
-
</div>
|
|
226
|
-
<VStack
|
|
227
|
-
spacing={ 1 }
|
|
228
|
-
className="dataviews-view-list__field-wrapper"
|
|
256
|
+
<HStack spacing={ 0 }>
|
|
257
|
+
<div
|
|
258
|
+
className="dataviews-view-list__primary-field"
|
|
259
|
+
id={ labelId }
|
|
229
260
|
>
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
261
|
+
{ renderedPrimaryField }
|
|
262
|
+
</div>
|
|
263
|
+
{ usedActions }
|
|
264
|
+
</HStack>
|
|
265
|
+
<div
|
|
266
|
+
className="dataviews-view-list__fields"
|
|
267
|
+
id={ descriptionId }
|
|
268
|
+
>
|
|
269
|
+
{ visibleFields.map( ( field ) => (
|
|
236
270
|
<div
|
|
237
|
-
|
|
238
|
-
|
|
271
|
+
key={ field.id }
|
|
272
|
+
className="dataviews-view-list__field"
|
|
239
273
|
>
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
{ field.label }
|
|
250
|
-
</VisuallyHidden>
|
|
251
|
-
<span className="dataviews-view-list__field-value">
|
|
252
|
-
<field.render item={ item } />
|
|
253
|
-
</span>
|
|
254
|
-
</div>
|
|
255
|
-
) ) }
|
|
274
|
+
<VisuallyHidden
|
|
275
|
+
as="span"
|
|
276
|
+
className="dataviews-view-list__field-label"
|
|
277
|
+
>
|
|
278
|
+
{ field.label }
|
|
279
|
+
</VisuallyHidden>
|
|
280
|
+
<span className="dataviews-view-list__field-value">
|
|
281
|
+
<field.render item={ item } />
|
|
282
|
+
</span>
|
|
256
283
|
</div>
|
|
257
|
-
|
|
258
|
-
</HStack>
|
|
259
|
-
</Composite.Item>
|
|
260
|
-
</div>
|
|
261
|
-
{ eligibleActions?.length > 0 && (
|
|
262
|
-
<HStack
|
|
263
|
-
spacing={ 3 }
|
|
264
|
-
justify="flex-end"
|
|
265
|
-
className="dataviews-view-list__item-actions"
|
|
266
|
-
style={ {
|
|
267
|
-
flexShrink: '0',
|
|
268
|
-
width: 'auto',
|
|
269
|
-
} }
|
|
270
|
-
>
|
|
271
|
-
{ primaryAction && (
|
|
272
|
-
<PrimaryActionGridCell
|
|
273
|
-
idPrefix={ idPrefix }
|
|
274
|
-
primaryAction={ primaryAction }
|
|
275
|
-
item={ item }
|
|
276
|
-
/>
|
|
277
|
-
) }
|
|
278
|
-
<div role="gridcell">
|
|
279
|
-
<DropdownMenu
|
|
280
|
-
trigger={
|
|
281
|
-
<Composite.Item
|
|
282
|
-
id={ generateDropdownTriggerCompositeId(
|
|
283
|
-
idPrefix
|
|
284
|
-
) }
|
|
285
|
-
render={
|
|
286
|
-
<Button
|
|
287
|
-
size="small"
|
|
288
|
-
icon={ moreVertical }
|
|
289
|
-
label={ __( 'Actions' ) }
|
|
290
|
-
accessibleWhenDisabled
|
|
291
|
-
disabled={ ! actions.length }
|
|
292
|
-
onKeyDown={
|
|
293
|
-
onDropdownTriggerKeyDown
|
|
294
|
-
}
|
|
295
|
-
/>
|
|
296
|
-
}
|
|
297
|
-
/>
|
|
298
|
-
}
|
|
299
|
-
placement="bottom-end"
|
|
300
|
-
>
|
|
301
|
-
<ActionsDropdownMenuGroup
|
|
302
|
-
actions={ eligibleActions }
|
|
303
|
-
item={ item }
|
|
304
|
-
/>
|
|
305
|
-
</DropdownMenu>
|
|
284
|
+
) ) }
|
|
306
285
|
</div>
|
|
307
|
-
</
|
|
308
|
-
|
|
286
|
+
</VStack>
|
|
287
|
+
</HStack>
|
|
309
288
|
</HStack>
|
|
310
289
|
</Composite.Row>
|
|
311
290
|
);
|
|
@@ -7,63 +7,40 @@ ul.dataviews-view-list {
|
|
|
7
7
|
|
|
8
8
|
li {
|
|
9
9
|
margin: 0;
|
|
10
|
-
cursor: pointer;
|
|
11
10
|
border-top: 1px solid $gray-100;
|
|
12
11
|
|
|
13
12
|
.dataviews-view-list__item-wrapper {
|
|
14
13
|
position: relative;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
> * {
|
|
18
|
-
width: 100%;
|
|
19
|
-
}
|
|
14
|
+
padding: $grid-unit-20 $grid-unit-30;
|
|
20
15
|
}
|
|
21
16
|
|
|
22
17
|
.dataviews-view-list__item-actions {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
right: 0;
|
|
26
|
-
|
|
18
|
+
flex: 0;
|
|
19
|
+
overflow: hidden;
|
|
27
20
|
|
|
28
21
|
> div {
|
|
29
22
|
height: $button-size-small;
|
|
30
23
|
}
|
|
31
24
|
|
|
32
25
|
.components-button {
|
|
26
|
+
position: relative;
|
|
27
|
+
z-index: 1;
|
|
33
28
|
opacity: 0;
|
|
34
29
|
}
|
|
35
30
|
}
|
|
36
31
|
|
|
37
|
-
&:
|
|
32
|
+
&:where(.is-selected, .is-hovered, :focus-within) {
|
|
38
33
|
.dataviews-view-list__item-actions {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
&.is-selected,
|
|
45
|
-
&.is-hovered,
|
|
46
|
-
&:focus-within {
|
|
47
|
-
.dataviews-view-list__item-actions {
|
|
48
|
-
background: #f8f8f8;
|
|
49
|
-
padding-left: $grid-unit-10;
|
|
50
|
-
margin-right: $grid-unit-30;
|
|
51
|
-
box-shadow: -12px 0 8px 0 #f8f8f8;
|
|
34
|
+
flex-basis: min-content;
|
|
35
|
+
overflow: unset;
|
|
36
|
+
padding-inline-end: $grid-unit-05;
|
|
52
37
|
|
|
53
38
|
.components-button {
|
|
54
39
|
opacity: 1;
|
|
55
|
-
position: static;
|
|
56
40
|
}
|
|
57
41
|
}
|
|
58
42
|
}
|
|
59
43
|
|
|
60
|
-
&.is-selected {
|
|
61
|
-
.dataviews-view-list__item-actions {
|
|
62
|
-
background-color: rgb(247 248 255);
|
|
63
|
-
box-shadow: -12px 0 8px 0 rgb(247 248 255);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
44
|
&.is-selected.is-selected {
|
|
68
45
|
border-top: 1px solid rgba(var(--wp-admin-theme-color--rgb), 0.12);
|
|
69
46
|
|
|
@@ -105,27 +82,38 @@ ul.dataviews-view-list {
|
|
|
105
82
|
}
|
|
106
83
|
|
|
107
84
|
.dataviews-view-list__item {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
85
|
+
position: absolute;
|
|
86
|
+
z-index: 1;
|
|
87
|
+
inset: 0;
|
|
111
88
|
scroll-margin: $grid-unit-10 0;
|
|
89
|
+
appearance: none;
|
|
90
|
+
border: none;
|
|
91
|
+
background: none;
|
|
92
|
+
padding: 0;
|
|
93
|
+
cursor: pointer;
|
|
112
94
|
|
|
113
95
|
&:focus-visible {
|
|
96
|
+
outline: none;
|
|
97
|
+
|
|
114
98
|
&::before {
|
|
115
99
|
position: absolute;
|
|
116
100
|
content: "";
|
|
117
|
-
|
|
118
|
-
right: var(--wp-admin-border-width-focus);
|
|
119
|
-
bottom: var(--wp-admin-border-width-focus);
|
|
120
|
-
left: var(--wp-admin-border-width-focus);
|
|
101
|
+
inset: var(--wp-admin-border-width-focus);
|
|
121
102
|
box-shadow: inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
|
|
122
103
|
border-radius: $radius-small;
|
|
104
|
+
// Windows High Contrast mode will show this outline, but not the box-shadow.
|
|
105
|
+
outline: 2px solid transparent;
|
|
123
106
|
}
|
|
124
107
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
108
|
+
}
|
|
109
|
+
.dataviews-view-list__primary-field {
|
|
110
|
+
flex: 1;
|
|
111
|
+
min-height: $grid-unit-30;
|
|
112
|
+
line-height: $grid-unit-30;
|
|
113
|
+
overflow: hidden;
|
|
114
|
+
// The field should be in front of the main button in case it has a link/button.
|
|
115
|
+
&:has(a, button) {
|
|
116
|
+
z-index: 1;
|
|
129
117
|
}
|
|
130
118
|
}
|
|
131
119
|
|
|
@@ -156,14 +144,9 @@ ul.dataviews-view-list {
|
|
|
156
144
|
}
|
|
157
145
|
}
|
|
158
146
|
|
|
159
|
-
.dataviews-view-list__media-placeholder {
|
|
160
|
-
width: $grid-unit-05 * 13;
|
|
161
|
-
height: $grid-unit-05 * 13;
|
|
162
|
-
background-color: $gray-200;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
147
|
.dataviews-view-list__field-wrapper {
|
|
166
148
|
min-height: $grid-unit-05 * 13; // Ensures title is centrally aligned when all fields are hidden
|
|
149
|
+
flex-grow: 1;
|
|
167
150
|
}
|
|
168
151
|
|
|
169
152
|
.dataviews-view-list__fields {
|
|
@@ -29,7 +29,7 @@ import type {
|
|
|
29
29
|
} from '../../types';
|
|
30
30
|
import { getVisibleFieldIds } from '../index';
|
|
31
31
|
|
|
32
|
-
const {
|
|
32
|
+
const { Menu } = unlock( componentsPrivateApis );
|
|
33
33
|
|
|
34
34
|
interface HeaderMenuProps< Item > {
|
|
35
35
|
fieldId: string;
|
|
@@ -40,12 +40,12 @@ interface HeaderMenuProps< Item > {
|
|
|
40
40
|
setOpenedFilter: ( fieldId: string ) => void;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
function
|
|
43
|
+
function WithMenuSeparators( { children }: { children: ReactNode } ) {
|
|
44
44
|
return Children.toArray( children )
|
|
45
45
|
.filter( Boolean )
|
|
46
46
|
.map( ( child, i ) => (
|
|
47
47
|
<Fragment key={ i }>
|
|
48
|
-
{ i > 0 && <
|
|
48
|
+
{ i > 0 && <Menu.Separator /> }
|
|
49
49
|
{ child }
|
|
50
50
|
</Fragment>
|
|
51
51
|
) );
|
|
@@ -101,7 +101,7 @@ const _HeaderMenu = forwardRef( function HeaderMenu< Item >(
|
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
return (
|
|
104
|
-
<
|
|
104
|
+
<Menu
|
|
105
105
|
align="start"
|
|
106
106
|
trigger={
|
|
107
107
|
<Button
|
|
@@ -120,9 +120,9 @@ const _HeaderMenu = forwardRef( function HeaderMenu< Item >(
|
|
|
120
120
|
}
|
|
121
121
|
style={ { minWidth: '240px' } }
|
|
122
122
|
>
|
|
123
|
-
<
|
|
123
|
+
<WithMenuSeparators>
|
|
124
124
|
{ isSortable && (
|
|
125
|
-
<
|
|
125
|
+
<Menu.Group>
|
|
126
126
|
{ SORTING_DIRECTIONS.map(
|
|
127
127
|
( direction: SortDirection ) => {
|
|
128
128
|
const isChecked =
|
|
@@ -133,7 +133,7 @@ const _HeaderMenu = forwardRef( function HeaderMenu< Item >(
|
|
|
133
133
|
const value = `${ fieldId }-${ direction }`;
|
|
134
134
|
|
|
135
135
|
return (
|
|
136
|
-
<
|
|
136
|
+
<Menu.RadioItem
|
|
137
137
|
key={ value }
|
|
138
138
|
// All sorting radio items share the same name, so that
|
|
139
139
|
// selecting a sorting option automatically deselects the
|
|
@@ -153,18 +153,18 @@ const _HeaderMenu = forwardRef( function HeaderMenu< Item >(
|
|
|
153
153
|
} );
|
|
154
154
|
} }
|
|
155
155
|
>
|
|
156
|
-
<
|
|
156
|
+
<Menu.ItemLabel>
|
|
157
157
|
{ sortLabels[ direction ] }
|
|
158
|
-
</
|
|
159
|
-
</
|
|
158
|
+
</Menu.ItemLabel>
|
|
159
|
+
</Menu.RadioItem>
|
|
160
160
|
);
|
|
161
161
|
}
|
|
162
162
|
) }
|
|
163
|
-
</
|
|
163
|
+
</Menu.Group>
|
|
164
164
|
) }
|
|
165
165
|
{ canAddFilter && (
|
|
166
|
-
<
|
|
167
|
-
<
|
|
166
|
+
<Menu.Group>
|
|
167
|
+
<Menu.Item
|
|
168
168
|
prefix={ <Icon icon={ funnel } /> }
|
|
169
169
|
onClick={ () => {
|
|
170
170
|
setOpenedFilter( fieldId );
|
|
@@ -182,14 +182,14 @@ const _HeaderMenu = forwardRef( function HeaderMenu< Item >(
|
|
|
182
182
|
} );
|
|
183
183
|
} }
|
|
184
184
|
>
|
|
185
|
-
<
|
|
185
|
+
<Menu.ItemLabel>
|
|
186
186
|
{ __( 'Add filter' ) }
|
|
187
|
-
</
|
|
188
|
-
</
|
|
189
|
-
</
|
|
187
|
+
</Menu.ItemLabel>
|
|
188
|
+
</Menu.Item>
|
|
189
|
+
</Menu.Group>
|
|
190
190
|
) }
|
|
191
|
-
<
|
|
192
|
-
<
|
|
191
|
+
<Menu.Group>
|
|
192
|
+
<Menu.Item
|
|
193
193
|
prefix={ <Icon icon={ arrowLeft } /> }
|
|
194
194
|
disabled={ index < 1 }
|
|
195
195
|
onClick={ () => {
|
|
@@ -207,11 +207,9 @@ const _HeaderMenu = forwardRef( function HeaderMenu< Item >(
|
|
|
207
207
|
} );
|
|
208
208
|
} }
|
|
209
209
|
>
|
|
210
|
-
<
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
</DropdownMenuV2.Item>
|
|
214
|
-
<DropdownMenuV2.Item
|
|
210
|
+
<Menu.ItemLabel>{ __( 'Move left' ) }</Menu.ItemLabel>
|
|
211
|
+
</Menu.Item>
|
|
212
|
+
<Menu.Item
|
|
215
213
|
prefix={ <Icon icon={ arrowRight } /> }
|
|
216
214
|
disabled={ index >= visibleFieldIds.length - 1 }
|
|
217
215
|
onClick={ () => {
|
|
@@ -227,12 +225,10 @@ const _HeaderMenu = forwardRef( function HeaderMenu< Item >(
|
|
|
227
225
|
} );
|
|
228
226
|
} }
|
|
229
227
|
>
|
|
230
|
-
<
|
|
231
|
-
|
|
232
|
-
</DropdownMenuV2.ItemLabel>
|
|
233
|
-
</DropdownMenuV2.Item>
|
|
228
|
+
<Menu.ItemLabel>{ __( 'Move right' ) }</Menu.ItemLabel>
|
|
229
|
+
</Menu.Item>
|
|
234
230
|
{ isHidable && field && (
|
|
235
|
-
<
|
|
231
|
+
<Menu.Item
|
|
236
232
|
prefix={ <Icon icon={ unseen } /> }
|
|
237
233
|
onClick={ () => {
|
|
238
234
|
onHide( field );
|
|
@@ -244,14 +240,14 @@ const _HeaderMenu = forwardRef( function HeaderMenu< Item >(
|
|
|
244
240
|
} );
|
|
245
241
|
} }
|
|
246
242
|
>
|
|
247
|
-
<
|
|
243
|
+
<Menu.ItemLabel>
|
|
248
244
|
{ __( 'Hide column' ) }
|
|
249
|
-
</
|
|
250
|
-
</
|
|
245
|
+
</Menu.ItemLabel>
|
|
246
|
+
</Menu.Item>
|
|
251
247
|
) }
|
|
252
|
-
</
|
|
253
|
-
</
|
|
254
|
-
</
|
|
248
|
+
</Menu.Group>
|
|
249
|
+
</WithMenuSeparators>
|
|
250
|
+
</Menu>
|
|
255
251
|
);
|
|
256
252
|
} );
|
|
257
253
|
|
package/src/types.ts
CHANGED
|
@@ -106,7 +106,7 @@ export type Field< Item > = {
|
|
|
106
106
|
/**
|
|
107
107
|
* Callback used to render the field. Defaults to `field.getValue`.
|
|
108
108
|
*/
|
|
109
|
-
render?: ComponentType<
|
|
109
|
+
render?: ComponentType< DataViewRenderFieldProps< Item > >;
|
|
110
110
|
|
|
111
111
|
/**
|
|
112
112
|
* Callback used to render an edit control for the field.
|
|
@@ -159,7 +159,7 @@ export type NormalizedField< Item > = Field< Item > & {
|
|
|
159
159
|
label: string;
|
|
160
160
|
header: string | ReactElement;
|
|
161
161
|
getValue: ( args: { item: Item } ) => any;
|
|
162
|
-
render: ComponentType<
|
|
162
|
+
render: ComponentType< DataViewRenderFieldProps< 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;
|
|
@@ -181,6 +181,10 @@ export type DataFormControlProps< Item > = {
|
|
|
181
181
|
hideLabelFromVision?: boolean;
|
|
182
182
|
};
|
|
183
183
|
|
|
184
|
+
export type DataViewRenderFieldProps< Item > = {
|
|
185
|
+
item: Item;
|
|
186
|
+
};
|
|
187
|
+
|
|
184
188
|
/**
|
|
185
189
|
* The filters applied to the dataset.
|
|
186
190
|
*/
|