@wordpress/dataviews 0.6.0 → 0.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 +2 -0
- package/build/add-filter.js +0 -2
- package/build/add-filter.js.map +1 -1
- package/build/bulk-actions.js +41 -3
- package/build/bulk-actions.js.map +1 -1
- package/build/dataviews.js +23 -16
- package/build/dataviews.js.map +1 -1
- package/build/filters.js +8 -1
- package/build/filters.js.map +1 -1
- package/build/pagination.js +2 -1
- package/build/pagination.js.map +1 -1
- package/build/reset-filters.js +2 -1
- package/build/reset-filters.js.map +1 -1
- package/build/search-widget.js +89 -4
- package/build/search-widget.js.map +1 -1
- package/build/single-selection-checkbox.js +7 -2
- package/build/single-selection-checkbox.js.map +1 -1
- package/build/view-actions.js.map +1 -1
- package/build/view-grid.js +10 -14
- package/build/view-grid.js.map +1 -1
- package/build/view-list.js +1 -1
- package/build/view-list.js.map +1 -1
- package/build/view-table.js +78 -45
- package/build/view-table.js.map +1 -1
- package/build-module/add-filter.js +0 -2
- package/build-module/add-filter.js.map +1 -1
- package/build-module/bulk-actions.js +40 -4
- package/build-module/bulk-actions.js.map +1 -1
- package/build-module/dataviews.js +24 -17
- package/build-module/dataviews.js.map +1 -1
- package/build-module/filters.js +8 -1
- package/build-module/filters.js.map +1 -1
- package/build-module/pagination.js +2 -1
- package/build-module/pagination.js.map +1 -1
- package/build-module/reset-filters.js +2 -1
- package/build-module/reset-filters.js.map +1 -1
- package/build-module/search-widget.js +91 -6
- package/build-module/search-widget.js.map +1 -1
- package/build-module/single-selection-checkbox.js +7 -2
- package/build-module/single-selection-checkbox.js.map +1 -1
- package/build-module/view-actions.js.map +1 -1
- package/build-module/view-grid.js +11 -15
- package/build-module/view-grid.js.map +1 -1
- package/build-module/view-list.js +2 -2
- package/build-module/view-list.js.map +1 -1
- package/build-module/view-table.js +80 -47
- package/build-module/view-table.js.map +1 -1
- package/build-style/style-rtl.css +67 -43
- package/build-style/style.css +67 -43
- package/package.json +11 -11
- package/src/add-filter.js +0 -2
- package/src/bulk-actions.js +54 -4
- package/src/dataviews.js +55 -44
- package/src/filters.js +6 -1
- package/src/pagination.js +6 -1
- package/src/reset-filters.js +2 -1
- package/src/search-widget.js +131 -6
- package/src/single-selection-checkbox.js +7 -1
- package/src/style.scss +99 -70
- package/src/view-actions.js +1 -1
- package/src/view-grid.js +11 -13
- package/src/view-list.js +2 -1
- package/src/view-table.js +113 -78
package/src/view-table.js
CHANGED
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
Icon,
|
|
15
15
|
privateApis as componentsPrivateApis,
|
|
16
16
|
CheckboxControl,
|
|
17
|
+
Spinner,
|
|
17
18
|
} from '@wordpress/components';
|
|
18
19
|
import {
|
|
19
20
|
forwardRef,
|
|
@@ -23,6 +24,7 @@ import {
|
|
|
23
24
|
useState,
|
|
24
25
|
Children,
|
|
25
26
|
Fragment,
|
|
27
|
+
useMemo,
|
|
26
28
|
} from '@wordpress/element';
|
|
27
29
|
|
|
28
30
|
/**
|
|
@@ -33,6 +35,10 @@ import { unlock } from './lock-unlock';
|
|
|
33
35
|
import ItemActions from './item-actions';
|
|
34
36
|
import { sanitizeOperators } from './utils';
|
|
35
37
|
import { ENUMERATION_TYPE, SORTING_DIRECTIONS } from './constants';
|
|
38
|
+
import {
|
|
39
|
+
useSomeItemHasAPossibleBulkAction,
|
|
40
|
+
useHasAPossibleBulkAction,
|
|
41
|
+
} from './bulk-actions';
|
|
36
42
|
|
|
37
43
|
const {
|
|
38
44
|
DropdownMenuV2: DropdownMenu,
|
|
@@ -186,8 +192,20 @@ const HeaderMenu = forwardRef( function HeaderMenu(
|
|
|
186
192
|
);
|
|
187
193
|
} );
|
|
188
194
|
|
|
189
|
-
function BulkSelectionCheckbox( {
|
|
190
|
-
|
|
195
|
+
function BulkSelectionCheckbox( {
|
|
196
|
+
selection,
|
|
197
|
+
onSelectionChange,
|
|
198
|
+
data,
|
|
199
|
+
actions,
|
|
200
|
+
} ) {
|
|
201
|
+
const selectableItems = useMemo( () => {
|
|
202
|
+
return data.filter( ( item ) => {
|
|
203
|
+
return actions.some(
|
|
204
|
+
( action ) => action.supportsBulk && action.isEligible( item )
|
|
205
|
+
);
|
|
206
|
+
} );
|
|
207
|
+
}, [ data, actions ] );
|
|
208
|
+
const areAllSelected = selection.length === selectableItems.length;
|
|
191
209
|
return (
|
|
192
210
|
<CheckboxControl
|
|
193
211
|
className="dataviews-view-table-selection-checkbox"
|
|
@@ -198,7 +216,7 @@ function BulkSelectionCheckbox( { selection, onSelectionChange, data } ) {
|
|
|
198
216
|
if ( areAllSelected ) {
|
|
199
217
|
onSelectionChange( [] );
|
|
200
218
|
} else {
|
|
201
|
-
onSelectionChange(
|
|
219
|
+
onSelectionChange( selectableItems );
|
|
202
220
|
}
|
|
203
221
|
} }
|
|
204
222
|
label={ areAllSelected ? __( 'Deselect all' ) : __( 'Select all' ) }
|
|
@@ -206,6 +224,81 @@ function BulkSelectionCheckbox( { selection, onSelectionChange, data } ) {
|
|
|
206
224
|
);
|
|
207
225
|
}
|
|
208
226
|
|
|
227
|
+
function TableRow( {
|
|
228
|
+
hasBulkActions,
|
|
229
|
+
item,
|
|
230
|
+
actions,
|
|
231
|
+
id,
|
|
232
|
+
visibleFields,
|
|
233
|
+
primaryField,
|
|
234
|
+
selection,
|
|
235
|
+
getItemId,
|
|
236
|
+
onSelectionChange,
|
|
237
|
+
data,
|
|
238
|
+
} ) {
|
|
239
|
+
const hasPossibleBulkAction = useHasAPossibleBulkAction( actions, item );
|
|
240
|
+
return (
|
|
241
|
+
<tr
|
|
242
|
+
className={ classnames( 'dataviews-view-table__row', {
|
|
243
|
+
'is-selected':
|
|
244
|
+
hasPossibleBulkAction && selection.includes( id ),
|
|
245
|
+
} ) }
|
|
246
|
+
>
|
|
247
|
+
{ hasBulkActions && (
|
|
248
|
+
<td
|
|
249
|
+
className="dataviews-view-table__checkbox-column"
|
|
250
|
+
style={ {
|
|
251
|
+
width: 20,
|
|
252
|
+
minWidth: 20,
|
|
253
|
+
} }
|
|
254
|
+
>
|
|
255
|
+
<div className="dataviews-view-table__cell-content-wrapper">
|
|
256
|
+
<SingleSelectionCheckbox
|
|
257
|
+
id={ id }
|
|
258
|
+
item={ item }
|
|
259
|
+
selection={ selection }
|
|
260
|
+
onSelectionChange={ onSelectionChange }
|
|
261
|
+
getItemId={ getItemId }
|
|
262
|
+
data={ data }
|
|
263
|
+
primaryField={ primaryField }
|
|
264
|
+
disabled={ ! hasPossibleBulkAction }
|
|
265
|
+
/>
|
|
266
|
+
</div>
|
|
267
|
+
</td>
|
|
268
|
+
) }
|
|
269
|
+
{ visibleFields.map( ( field ) => (
|
|
270
|
+
<td
|
|
271
|
+
key={ field.id }
|
|
272
|
+
style={ {
|
|
273
|
+
width: field.width || undefined,
|
|
274
|
+
minWidth: field.minWidth || undefined,
|
|
275
|
+
maxWidth: field.maxWidth || undefined,
|
|
276
|
+
} }
|
|
277
|
+
>
|
|
278
|
+
<div
|
|
279
|
+
className={ classnames(
|
|
280
|
+
'dataviews-view-table__cell-content-wrapper',
|
|
281
|
+
{
|
|
282
|
+
'dataviews-view-table__primary-field':
|
|
283
|
+
primaryField?.id === field.id,
|
|
284
|
+
}
|
|
285
|
+
) }
|
|
286
|
+
>
|
|
287
|
+
{ field.render( {
|
|
288
|
+
item,
|
|
289
|
+
} ) }
|
|
290
|
+
</div>
|
|
291
|
+
</td>
|
|
292
|
+
) ) }
|
|
293
|
+
{ !! actions?.length && (
|
|
294
|
+
<td className="dataviews-view-table__actions-column">
|
|
295
|
+
<ItemActions item={ item } actions={ actions } />
|
|
296
|
+
</td>
|
|
297
|
+
) }
|
|
298
|
+
</tr>
|
|
299
|
+
);
|
|
300
|
+
}
|
|
301
|
+
|
|
209
302
|
function ViewTable( {
|
|
210
303
|
view,
|
|
211
304
|
onChangeView,
|
|
@@ -219,10 +312,10 @@ function ViewTable( {
|
|
|
219
312
|
onSelectionChange,
|
|
220
313
|
setOpenedFilter,
|
|
221
314
|
} ) {
|
|
222
|
-
const hasBulkActions = actions?.some( ( action ) => action.supportsBulk );
|
|
223
315
|
const headerMenuRefs = useRef( new Map() );
|
|
224
316
|
const headerMenuToFocusRef = useRef();
|
|
225
317
|
const [ nextHeaderMenuToFocus, setNextHeaderMenuToFocus ] = useState();
|
|
318
|
+
const hasBulkActions = useSomeItemHasAPossibleBulkAction( actions, data );
|
|
226
319
|
|
|
227
320
|
useEffect( () => {
|
|
228
321
|
if ( headerMenuToFocusRef.current ) {
|
|
@@ -263,7 +356,7 @@ function ViewTable( {
|
|
|
263
356
|
);
|
|
264
357
|
|
|
265
358
|
return (
|
|
266
|
-
|
|
359
|
+
<>
|
|
267
360
|
<table
|
|
268
361
|
className="dataviews-view-table"
|
|
269
362
|
aria-busy={ isLoading }
|
|
@@ -285,6 +378,7 @@ function ViewTable( {
|
|
|
285
378
|
selection={ selection }
|
|
286
379
|
onSelectionChange={ onSelectionChange }
|
|
287
380
|
data={ data }
|
|
381
|
+
actions={ actions }
|
|
288
382
|
/>
|
|
289
383
|
</th>
|
|
290
384
|
) }
|
|
@@ -347,78 +441,19 @@ function ViewTable( {
|
|
|
347
441
|
<tbody>
|
|
348
442
|
{ hasData &&
|
|
349
443
|
usedData.map( ( item, index ) => (
|
|
350
|
-
<
|
|
444
|
+
<TableRow
|
|
351
445
|
key={ getItemId( item ) }
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
{
|
|
362
|
-
|
|
363
|
-
className="dataviews-view-table__checkbox-column"
|
|
364
|
-
style={ {
|
|
365
|
-
width: 20,
|
|
366
|
-
minWidth: 20,
|
|
367
|
-
} }
|
|
368
|
-
>
|
|
369
|
-
<div className="dataviews-view-table__cell-content-wrapper">
|
|
370
|
-
<SingleSelectionCheckbox
|
|
371
|
-
id={
|
|
372
|
-
getItemId( item ) || index
|
|
373
|
-
}
|
|
374
|
-
item={ item }
|
|
375
|
-
selection={ selection }
|
|
376
|
-
onSelectionChange={
|
|
377
|
-
onSelectionChange
|
|
378
|
-
}
|
|
379
|
-
getItemId={ getItemId }
|
|
380
|
-
data={ data }
|
|
381
|
-
primaryField={ primaryField }
|
|
382
|
-
/>
|
|
383
|
-
</div>
|
|
384
|
-
</td>
|
|
385
|
-
) }
|
|
386
|
-
{ visibleFields.map( ( field ) => (
|
|
387
|
-
<td
|
|
388
|
-
key={ field.id }
|
|
389
|
-
style={ {
|
|
390
|
-
width: field.width || undefined,
|
|
391
|
-
minWidth:
|
|
392
|
-
field.minWidth || undefined,
|
|
393
|
-
maxWidth:
|
|
394
|
-
field.maxWidth || undefined,
|
|
395
|
-
} }
|
|
396
|
-
>
|
|
397
|
-
<div
|
|
398
|
-
className={ classnames(
|
|
399
|
-
'dataviews-view-table__cell-content-wrapper',
|
|
400
|
-
{
|
|
401
|
-
'dataviews-view-table__primary-field':
|
|
402
|
-
primaryField?.id ===
|
|
403
|
-
field.id,
|
|
404
|
-
}
|
|
405
|
-
) }
|
|
406
|
-
>
|
|
407
|
-
{ field.render( {
|
|
408
|
-
item,
|
|
409
|
-
} ) }
|
|
410
|
-
</div>
|
|
411
|
-
</td>
|
|
412
|
-
) ) }
|
|
413
|
-
{ !! actions?.length && (
|
|
414
|
-
<td className="dataviews-view-table__actions-column">
|
|
415
|
-
<ItemActions
|
|
416
|
-
item={ item }
|
|
417
|
-
actions={ actions }
|
|
418
|
-
/>
|
|
419
|
-
</td>
|
|
420
|
-
) }
|
|
421
|
-
</tr>
|
|
446
|
+
item={ item }
|
|
447
|
+
hasBulkActions={ hasBulkActions }
|
|
448
|
+
actions={ actions }
|
|
449
|
+
id={ getItemId( item ) || index }
|
|
450
|
+
visibleFields={ visibleFields }
|
|
451
|
+
primaryField={ primaryField }
|
|
452
|
+
selection={ selection }
|
|
453
|
+
getItemId={ getItemId }
|
|
454
|
+
onSelectionChange={ onSelectionChange }
|
|
455
|
+
data={ data }
|
|
456
|
+
/>
|
|
422
457
|
) ) }
|
|
423
458
|
</tbody>
|
|
424
459
|
</table>
|
|
@@ -430,10 +465,10 @@ function ViewTable( {
|
|
|
430
465
|
id={ tableNoticeId }
|
|
431
466
|
>
|
|
432
467
|
{ ! hasData && (
|
|
433
|
-
<p>{ isLoading ?
|
|
468
|
+
<p>{ isLoading ? <Spinner /> : __( 'No results' ) }</p>
|
|
434
469
|
) }
|
|
435
470
|
</div>
|
|
436
|
-
|
|
471
|
+
</>
|
|
437
472
|
);
|
|
438
473
|
}
|
|
439
474
|
|