@wordpress/dataviews 0.9.0 → 1.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 +6 -0
- package/README.md +0 -8
- package/build/add-filter.js.map +1 -1
- package/build/bulk-actions.js.map +1 -1
- package/build/constants.js.map +1 -1
- package/build/dataviews.js +1 -5
- package/build/dataviews.js.map +1 -1
- package/build/dropdown-menu-helper.js.map +1 -1
- package/build/filter-and-sort-data-view.js.map +1 -1
- package/build/filter-summary.js +4 -2
- package/build/filter-summary.js.map +1 -1
- package/build/filters.js.map +1 -1
- package/build/index.js.map +1 -1
- package/build/item-actions.js.map +1 -1
- package/build/lock-unlock.js.map +1 -1
- package/build/normalize-fields.js.map +1 -1
- package/build/pagination.js.map +1 -1
- package/build/reset-filters.js.map +1 -1
- package/build/search-widget.js +5 -4
- package/build/search-widget.js.map +1 -1
- package/build/search.js.map +1 -1
- package/build/single-selection-checkbox.js +1 -1
- package/build/single-selection-checkbox.js.map +1 -1
- package/build/utils.js.map +1 -1
- package/build/view-actions.js.map +1 -1
- package/build/view-grid.js +43 -15
- package/build/view-grid.js.map +1 -1
- package/build/view-list.js +4 -22
- package/build/view-list.js.map +1 -1
- package/build/view-table.js +5 -11
- package/build/view-table.js.map +1 -1
- package/build-module/add-filter.js.map +1 -1
- package/build-module/bulk-actions.js.map +1 -1
- package/build-module/constants.js.map +1 -1
- package/build-module/dataviews.js +1 -5
- package/build-module/dataviews.js.map +1 -1
- package/build-module/dropdown-menu-helper.js.map +1 -1
- package/build-module/filter-and-sort-data-view.js.map +1 -1
- package/build-module/filter-summary.js +3 -2
- package/build-module/filter-summary.js.map +1 -1
- package/build-module/filters.js.map +1 -1
- package/build-module/index.js.map +1 -1
- package/build-module/item-actions.js.map +1 -1
- package/build-module/lock-unlock.js.map +1 -1
- package/build-module/normalize-fields.js.map +1 -1
- package/build-module/pagination.js.map +1 -1
- package/build-module/reset-filters.js.map +1 -1
- package/build-module/search-widget.js +4 -3
- package/build-module/search-widget.js.map +1 -1
- package/build-module/search.js.map +1 -1
- package/build-module/single-selection-checkbox.js +1 -1
- package/build-module/single-selection-checkbox.js.map +1 -1
- package/build-module/utils.js.map +1 -1
- package/build-module/view-actions.js.map +1 -1
- package/build-module/view-grid.js +43 -15
- package/build-module/view-grid.js.map +1 -1
- package/build-module/view-list.js +6 -24
- package/build-module/view-list.js.map +1 -1
- package/build-module/view-table.js +5 -11
- package/build-module/view-table.js.map +1 -1
- package/build-style/style-rtl.css +43 -31
- package/build-style/style.css +43 -31
- package/package.json +11 -11
- package/src/dataviews.js +0 -4
- package/src/filter-summary.js +4 -4
- package/src/search-widget.js +4 -3
- package/src/single-selection-checkbox.js +1 -1
- package/src/style.scss +45 -38
- package/src/view-grid.js +91 -52
- package/src/view-list.js +4 -24
- package/src/view-table.js +7 -11
package/src/view-grid.js
CHANGED
|
@@ -15,7 +15,6 @@ import {
|
|
|
15
15
|
FlexItem,
|
|
16
16
|
} from '@wordpress/components';
|
|
17
17
|
import { __ } from '@wordpress/i18n';
|
|
18
|
-
import { useAsyncList } from '@wordpress/compose';
|
|
19
18
|
|
|
20
19
|
/**
|
|
21
20
|
* Internal dependencies
|
|
@@ -35,7 +34,8 @@ function GridItem( {
|
|
|
35
34
|
mediaField,
|
|
36
35
|
primaryField,
|
|
37
36
|
visibleFields,
|
|
38
|
-
|
|
37
|
+
badgeFields,
|
|
38
|
+
columnFields,
|
|
39
39
|
} ) {
|
|
40
40
|
const hasBulkAction = useHasAPossibleBulkAction( actions, item );
|
|
41
41
|
const id = getItemId( item );
|
|
@@ -100,46 +100,76 @@ function GridItem( {
|
|
|
100
100
|
</HStack>
|
|
101
101
|
<ItemActions item={ item } actions={ actions } isCompact />
|
|
102
102
|
</HStack>
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
key={ field.id }
|
|
120
|
-
gap={ 1 }
|
|
121
|
-
justify="flex-start"
|
|
122
|
-
expanded
|
|
123
|
-
style={ { height: 'auto' } }
|
|
124
|
-
direction={
|
|
125
|
-
displayAsColumnFields?.includes( field.id )
|
|
126
|
-
? 'column'
|
|
127
|
-
: 'row'
|
|
128
|
-
}
|
|
129
|
-
>
|
|
130
|
-
<FlexItem className="dataviews-view-grid__field-name">
|
|
131
|
-
{ field.header }
|
|
132
|
-
</FlexItem>
|
|
103
|
+
{ !! badgeFields?.length && (
|
|
104
|
+
<HStack
|
|
105
|
+
className="dataviews-view-grid__badge-fields"
|
|
106
|
+
spacing={ 2 }
|
|
107
|
+
wrap
|
|
108
|
+
align="top"
|
|
109
|
+
justify="flex-start"
|
|
110
|
+
>
|
|
111
|
+
{ badgeFields.map( ( field ) => {
|
|
112
|
+
const renderedValue = field.render( {
|
|
113
|
+
item,
|
|
114
|
+
} );
|
|
115
|
+
if ( ! renderedValue ) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
return (
|
|
133
119
|
<FlexItem
|
|
134
|
-
|
|
135
|
-
|
|
120
|
+
key={ field.id }
|
|
121
|
+
className={ 'dataviews-view-grid__field-value' }
|
|
136
122
|
>
|
|
137
123
|
{ renderedValue }
|
|
138
124
|
</FlexItem>
|
|
139
|
-
|
|
140
|
-
)
|
|
141
|
-
|
|
142
|
-
|
|
125
|
+
);
|
|
126
|
+
} ) }
|
|
127
|
+
</HStack>
|
|
128
|
+
) }
|
|
129
|
+
{ !! visibleFields?.length && (
|
|
130
|
+
<VStack className="dataviews-view-grid__fields" spacing={ 3 }>
|
|
131
|
+
{ visibleFields.map( ( field ) => {
|
|
132
|
+
const renderedValue = field.render( {
|
|
133
|
+
item,
|
|
134
|
+
} );
|
|
135
|
+
if ( ! renderedValue ) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
return (
|
|
139
|
+
<Flex
|
|
140
|
+
className={ classnames(
|
|
141
|
+
'dataviews-view-grid__field',
|
|
142
|
+
columnFields?.includes( field.id )
|
|
143
|
+
? 'is-column'
|
|
144
|
+
: 'is-row'
|
|
145
|
+
) }
|
|
146
|
+
key={ field.id }
|
|
147
|
+
gap={ 1 }
|
|
148
|
+
justify="flex-start"
|
|
149
|
+
expanded
|
|
150
|
+
style={ { height: 'auto' } }
|
|
151
|
+
direction={
|
|
152
|
+
columnFields?.includes( field.id )
|
|
153
|
+
? 'column'
|
|
154
|
+
: 'row'
|
|
155
|
+
}
|
|
156
|
+
>
|
|
157
|
+
<>
|
|
158
|
+
<FlexItem className="dataviews-view-grid__field-name">
|
|
159
|
+
{ field.header }
|
|
160
|
+
</FlexItem>
|
|
161
|
+
<FlexItem
|
|
162
|
+
className="dataviews-view-grid__field-value"
|
|
163
|
+
style={ { maxHeight: 'none' } }
|
|
164
|
+
>
|
|
165
|
+
{ renderedValue }
|
|
166
|
+
</FlexItem>
|
|
167
|
+
</>
|
|
168
|
+
</Flex>
|
|
169
|
+
);
|
|
170
|
+
} ) }
|
|
171
|
+
</VStack>
|
|
172
|
+
) }
|
|
143
173
|
</VStack>
|
|
144
174
|
);
|
|
145
175
|
}
|
|
@@ -151,7 +181,6 @@ export default function ViewGrid( {
|
|
|
151
181
|
actions,
|
|
152
182
|
isLoading,
|
|
153
183
|
getItemId,
|
|
154
|
-
deferredRendering,
|
|
155
184
|
selection,
|
|
156
185
|
onSelectionChange,
|
|
157
186
|
} ) {
|
|
@@ -161,16 +190,27 @@ export default function ViewGrid( {
|
|
|
161
190
|
const primaryField = fields.find(
|
|
162
191
|
( field ) => field.id === view.layout.primaryField
|
|
163
192
|
);
|
|
164
|
-
const visibleFields = fields.
|
|
165
|
-
( field ) =>
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
193
|
+
const { visibleFields, badgeFields } = fields.reduce(
|
|
194
|
+
( accumulator, field ) => {
|
|
195
|
+
if (
|
|
196
|
+
view.hiddenFields.includes( field.id ) ||
|
|
197
|
+
[ view.layout.mediaField, view.layout.primaryField ].includes(
|
|
198
|
+
field.id
|
|
199
|
+
)
|
|
200
|
+
) {
|
|
201
|
+
return accumulator;
|
|
202
|
+
}
|
|
203
|
+
// If the field is a badge field, add it to the badgeFields array
|
|
204
|
+
// otherwise add it to the rest visibleFields array.
|
|
205
|
+
const key = view.layout.badgeFields?.includes( field.id )
|
|
206
|
+
? 'badgeFields'
|
|
207
|
+
: 'visibleFields';
|
|
208
|
+
accumulator[ key ].push( field );
|
|
209
|
+
return accumulator;
|
|
210
|
+
},
|
|
211
|
+
{ visibleFields: [], badgeFields: [] }
|
|
170
212
|
);
|
|
171
|
-
const
|
|
172
|
-
const usedData = deferredRendering ? shownData : data;
|
|
173
|
-
const hasData = !! usedData?.length;
|
|
213
|
+
const hasData = !! data?.length;
|
|
174
214
|
return (
|
|
175
215
|
<>
|
|
176
216
|
{ hasData && (
|
|
@@ -181,7 +221,7 @@ export default function ViewGrid( {
|
|
|
181
221
|
className="dataviews-view-grid"
|
|
182
222
|
aria-busy={ isLoading }
|
|
183
223
|
>
|
|
184
|
-
{
|
|
224
|
+
{ data.map( ( item ) => {
|
|
185
225
|
return (
|
|
186
226
|
<GridItem
|
|
187
227
|
key={ getItemId( item ) }
|
|
@@ -194,9 +234,8 @@ export default function ViewGrid( {
|
|
|
194
234
|
mediaField={ mediaField }
|
|
195
235
|
primaryField={ primaryField }
|
|
196
236
|
visibleFields={ visibleFields }
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
}
|
|
237
|
+
badgeFields={ badgeFields }
|
|
238
|
+
columnFields={ view.layout.columnFields }
|
|
200
239
|
/>
|
|
201
240
|
);
|
|
202
241
|
} ) }
|
package/src/view-list.js
CHANGED
|
@@ -6,17 +6,15 @@ import classNames from 'classnames';
|
|
|
6
6
|
/**
|
|
7
7
|
* WordPress dependencies
|
|
8
8
|
*/
|
|
9
|
-
import {
|
|
9
|
+
import { useInstanceId } from '@wordpress/compose';
|
|
10
10
|
import {
|
|
11
11
|
__experimentalHStack as HStack,
|
|
12
12
|
__experimentalVStack as VStack,
|
|
13
13
|
privateApis as componentsPrivateApis,
|
|
14
|
-
Button,
|
|
15
14
|
Spinner,
|
|
16
15
|
VisuallyHidden,
|
|
17
16
|
} from '@wordpress/components';
|
|
18
17
|
import { useCallback, useEffect, useRef } from '@wordpress/element';
|
|
19
|
-
import { info } from '@wordpress/icons';
|
|
20
18
|
import { __ } from '@wordpress/i18n';
|
|
21
19
|
|
|
22
20
|
/**
|
|
@@ -36,7 +34,6 @@ function ListItem( {
|
|
|
36
34
|
item,
|
|
37
35
|
isSelected,
|
|
38
36
|
onSelect,
|
|
39
|
-
onDetailsChange,
|
|
40
37
|
mediaField,
|
|
41
38
|
primaryField,
|
|
42
39
|
visibleFields,
|
|
@@ -118,18 +115,6 @@ function ListItem( {
|
|
|
118
115
|
</HStack>
|
|
119
116
|
</CompositeItem>
|
|
120
117
|
</div>
|
|
121
|
-
{ onDetailsChange && (
|
|
122
|
-
<div role="gridcell">
|
|
123
|
-
<CompositeItem
|
|
124
|
-
render={ <Button /> }
|
|
125
|
-
className="dataviews-view-list__details-button"
|
|
126
|
-
onClick={ () => onDetailsChange( [ item ] ) }
|
|
127
|
-
icon={ info }
|
|
128
|
-
label={ __( 'View details' ) }
|
|
129
|
-
size="compact"
|
|
130
|
-
/>
|
|
131
|
-
</div>
|
|
132
|
-
) }
|
|
133
118
|
</HStack>
|
|
134
119
|
</CompositeRow>
|
|
135
120
|
);
|
|
@@ -142,15 +127,11 @@ export default function ViewList( {
|
|
|
142
127
|
isLoading,
|
|
143
128
|
getItemId,
|
|
144
129
|
onSelectionChange,
|
|
145
|
-
onDetailsChange,
|
|
146
130
|
selection,
|
|
147
|
-
deferredRendering,
|
|
148
131
|
id: preferredId,
|
|
149
132
|
} ) {
|
|
150
133
|
const baseId = useInstanceId( ViewList, 'view-list', preferredId );
|
|
151
|
-
const
|
|
152
|
-
const usedData = deferredRendering ? shownData : data;
|
|
153
|
-
const selectedItem = usedData?.findLast( ( item ) =>
|
|
134
|
+
const selectedItem = data?.findLast( ( item ) =>
|
|
154
135
|
selection.includes( item.id )
|
|
155
136
|
);
|
|
156
137
|
|
|
@@ -182,7 +163,7 @@ export default function ViewList( {
|
|
|
182
163
|
defaultActiveId: getItemDomId( selectedItem ),
|
|
183
164
|
} );
|
|
184
165
|
|
|
185
|
-
const hasData =
|
|
166
|
+
const hasData = data?.length;
|
|
186
167
|
if ( ! hasData ) {
|
|
187
168
|
return (
|
|
188
169
|
<div
|
|
@@ -206,7 +187,7 @@ export default function ViewList( {
|
|
|
206
187
|
role="grid"
|
|
207
188
|
store={ store }
|
|
208
189
|
>
|
|
209
|
-
{
|
|
190
|
+
{ data.map( ( item ) => {
|
|
210
191
|
const id = getItemDomId( item );
|
|
211
192
|
return (
|
|
212
193
|
<ListItem
|
|
@@ -215,7 +196,6 @@ export default function ViewList( {
|
|
|
215
196
|
item={ item }
|
|
216
197
|
isSelected={ item === selectedItem }
|
|
217
198
|
onSelect={ onSelect }
|
|
218
|
-
onDetailsChange={ onDetailsChange }
|
|
219
199
|
mediaField={ mediaField }
|
|
220
200
|
primaryField={ primaryField }
|
|
221
201
|
visibleFields={ visibleFields }
|
package/src/view-table.js
CHANGED
|
@@ -7,7 +7,6 @@ import classnames from 'classnames';
|
|
|
7
7
|
* WordPress dependencies
|
|
8
8
|
*/
|
|
9
9
|
import { __ } from '@wordpress/i18n';
|
|
10
|
-
import { useAsyncList } from '@wordpress/compose';
|
|
11
10
|
import { unseen, funnel } from '@wordpress/icons';
|
|
12
11
|
import {
|
|
13
12
|
Button,
|
|
@@ -219,7 +218,9 @@ function BulkSelectionCheckbox( {
|
|
|
219
218
|
onSelectionChange( selectableItems );
|
|
220
219
|
}
|
|
221
220
|
} }
|
|
222
|
-
label={
|
|
221
|
+
aria-label={
|
|
222
|
+
areAllSelected ? __( 'Deselect all' ) : __( 'Select all' )
|
|
223
|
+
}
|
|
223
224
|
/>
|
|
224
225
|
);
|
|
225
226
|
}
|
|
@@ -299,8 +300,7 @@ function TableRow( {
|
|
|
299
300
|
<td
|
|
300
301
|
className="dataviews-view-table__checkbox-column"
|
|
301
302
|
style={ {
|
|
302
|
-
width:
|
|
303
|
-
minWidth: 20,
|
|
303
|
+
width: '1%',
|
|
304
304
|
} }
|
|
305
305
|
>
|
|
306
306
|
<div className="dataviews-view-table__cell-content-wrapper">
|
|
@@ -369,7 +369,6 @@ function ViewTable( {
|
|
|
369
369
|
data,
|
|
370
370
|
getItemId,
|
|
371
371
|
isLoading = false,
|
|
372
|
-
deferredRendering,
|
|
373
372
|
selection,
|
|
374
373
|
onSelectionChange,
|
|
375
374
|
setOpenedFilter,
|
|
@@ -386,7 +385,6 @@ function ViewTable( {
|
|
|
386
385
|
}
|
|
387
386
|
} );
|
|
388
387
|
|
|
389
|
-
const asyncData = useAsyncList( data );
|
|
390
388
|
const tableNoticeId = useId();
|
|
391
389
|
|
|
392
390
|
if ( nextHeaderMenuToFocus ) {
|
|
@@ -409,8 +407,7 @@ function ViewTable( {
|
|
|
409
407
|
! view.hiddenFields.includes( field.id ) &&
|
|
410
408
|
! [ view.layout.mediaField ].includes( field.id )
|
|
411
409
|
);
|
|
412
|
-
const
|
|
413
|
-
const hasData = !! usedData?.length;
|
|
410
|
+
const hasData = !! data?.length;
|
|
414
411
|
const sortValues = { asc: 'ascending', desc: 'descending' };
|
|
415
412
|
|
|
416
413
|
const primaryField = fields.find(
|
|
@@ -430,8 +427,7 @@ function ViewTable( {
|
|
|
430
427
|
<th
|
|
431
428
|
className="dataviews-view-table__checkbox-column"
|
|
432
429
|
style={ {
|
|
433
|
-
width:
|
|
434
|
-
minWidth: 20,
|
|
430
|
+
width: '1%',
|
|
435
431
|
} }
|
|
436
432
|
data-field-id="selection"
|
|
437
433
|
scope="col"
|
|
@@ -502,7 +498,7 @@ function ViewTable( {
|
|
|
502
498
|
</thead>
|
|
503
499
|
<tbody>
|
|
504
500
|
{ hasData &&
|
|
505
|
-
|
|
501
|
+
data.map( ( item, index ) => (
|
|
506
502
|
<TableRow
|
|
507
503
|
key={ getItemId( item ) }
|
|
508
504
|
item={ item }
|