@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.
Files changed (153) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +5 -5
  3. package/build/add-filter.js +1 -1
  4. package/build/add-filter.js.map +1 -1
  5. package/build/bulk-actions-toolbar.js +0 -1
  6. package/build/bulk-actions-toolbar.js.map +1 -1
  7. package/build/bulk-actions.js +1 -1
  8. package/build/bulk-actions.js.map +1 -1
  9. package/build/dataform.js +78 -0
  10. package/build/dataform.js.map +1 -0
  11. package/build/dataviews.js +17 -28
  12. package/build/dataviews.js.map +1 -1
  13. package/build/filter-and-sort-data-view.js +4 -1
  14. package/build/filter-and-sort-data-view.js.map +1 -1
  15. package/build/filter-summary.js +6 -5
  16. package/build/filter-summary.js.map +1 -1
  17. package/build/filters.js +1 -1
  18. package/build/filters.js.map +1 -1
  19. package/build/index.js +7 -0
  20. package/build/index.js.map +1 -1
  21. package/build/item-actions.js +1 -1
  22. package/build/item-actions.js.map +1 -1
  23. package/build/normalize-fields.js.map +1 -1
  24. package/build/pagination.js +2 -2
  25. package/build/pagination.js.map +1 -1
  26. package/build/private-types.js +6 -0
  27. package/build/private-types.js.map +1 -0
  28. package/build/reset-filters.js +1 -1
  29. package/build/reset-filters.js.map +1 -1
  30. package/build/search-widget.js +8 -6
  31. package/build/search-widget.js.map +1 -1
  32. package/build/single-selection-checkbox.js +5 -16
  33. package/build/single-selection-checkbox.js.map +1 -1
  34. package/build/types.js.map +1 -1
  35. package/build/utils.js.map +1 -1
  36. package/build/view-actions.js +76 -65
  37. package/build/view-actions.js.map +1 -1
  38. package/build/view-grid.js +7 -19
  39. package/build/view-grid.js.map +1 -1
  40. package/build/view-list.js +6 -5
  41. package/build/view-list.js.map +1 -1
  42. package/build/view-table.js +11 -20
  43. package/build/view-table.js.map +1 -1
  44. package/build-module/add-filter.js +1 -1
  45. package/build-module/add-filter.js.map +1 -1
  46. package/build-module/bulk-actions-toolbar.js +0 -1
  47. package/build-module/bulk-actions-toolbar.js.map +1 -1
  48. package/build-module/bulk-actions.js +1 -1
  49. package/build-module/bulk-actions.js.map +1 -1
  50. package/build-module/dataform.js +72 -0
  51. package/build-module/dataform.js.map +1 -0
  52. package/build-module/dataviews.js +15 -28
  53. package/build-module/dataviews.js.map +1 -1
  54. package/build-module/filter-and-sort-data-view.js +4 -1
  55. package/build-module/filter-and-sort-data-view.js.map +1 -1
  56. package/build-module/filter-summary.js +6 -5
  57. package/build-module/filter-summary.js.map +1 -1
  58. package/build-module/filters.js +1 -1
  59. package/build-module/filters.js.map +1 -1
  60. package/build-module/index.js +1 -0
  61. package/build-module/index.js.map +1 -1
  62. package/build-module/item-actions.js +1 -1
  63. package/build-module/item-actions.js.map +1 -1
  64. package/build-module/normalize-fields.js.map +1 -1
  65. package/build-module/pagination.js +2 -2
  66. package/build-module/pagination.js.map +1 -1
  67. package/build-module/private-types.js +2 -0
  68. package/build-module/private-types.js.map +1 -0
  69. package/build-module/reset-filters.js +1 -1
  70. package/build-module/reset-filters.js.map +1 -1
  71. package/build-module/search-widget.js +8 -6
  72. package/build-module/search-widget.js.map +1 -1
  73. package/build-module/single-selection-checkbox.js +5 -16
  74. package/build-module/single-selection-checkbox.js.map +1 -1
  75. package/build-module/types.js.map +1 -1
  76. package/build-module/utils.js.map +1 -1
  77. package/build-module/view-actions.js +80 -68
  78. package/build-module/view-actions.js.map +1 -1
  79. package/build-module/view-grid.js +7 -19
  80. package/build-module/view-grid.js.map +1 -1
  81. package/build-module/view-list.js +6 -5
  82. package/build-module/view-list.js.map +1 -1
  83. package/build-module/view-table.js +11 -20
  84. package/build-module/view-table.js.map +1 -1
  85. package/build-style/style-rtl.css +8 -24
  86. package/build-style/style.css +8 -24
  87. package/build-types/bulk-actions-toolbar.d.ts +5 -4
  88. package/build-types/bulk-actions-toolbar.d.ts.map +1 -1
  89. package/build-types/bulk-actions.d.ts +7 -6
  90. package/build-types/bulk-actions.d.ts.map +1 -1
  91. package/build-types/dataform.d.ts +17 -0
  92. package/build-types/dataform.d.ts.map +1 -0
  93. package/build-types/dataviews.d.ts +14 -7
  94. package/build-types/dataviews.d.ts.map +1 -1
  95. package/build-types/filter-and-sort-data-view.d.ts +2 -2
  96. package/build-types/filter-and-sort-data-view.d.ts.map +1 -1
  97. package/build-types/filter-summary.d.ts.map +1 -1
  98. package/build-types/filters.d.ts +3 -3
  99. package/build-types/filters.d.ts.map +1 -1
  100. package/build-types/index.d.ts +1 -0
  101. package/build-types/index.d.ts.map +1 -1
  102. package/build-types/item-actions.d.ts +10 -10
  103. package/build-types/item-actions.d.ts.map +1 -1
  104. package/build-types/normalize-fields.d.ts +2 -2
  105. package/build-types/normalize-fields.d.ts.map +1 -1
  106. package/build-types/private-types.d.ts +3 -0
  107. package/build-types/private-types.d.ts.map +1 -0
  108. package/build-types/single-selection-checkbox.d.ts +5 -5
  109. package/build-types/single-selection-checkbox.d.ts.map +1 -1
  110. package/build-types/stories/fixtures.d.ts +14 -1
  111. package/build-types/stories/fixtures.d.ts.map +1 -1
  112. package/build-types/stories/index.story.d.ts +15 -1
  113. package/build-types/stories/index.story.d.ts.map +1 -1
  114. package/build-types/types.d.ts +68 -27
  115. package/build-types/types.d.ts.map +1 -1
  116. package/build-types/utils.d.ts +2 -2
  117. package/build-types/utils.d.ts.map +1 -1
  118. package/build-types/view-actions.d.ts +4 -4
  119. package/build-types/view-actions.d.ts.map +1 -1
  120. package/build-types/view-grid.d.ts +2 -2
  121. package/build-types/view-grid.d.ts.map +1 -1
  122. package/build-types/view-list.d.ts +2 -2
  123. package/build-types/view-list.d.ts.map +1 -1
  124. package/build-types/view-table.d.ts +2 -2
  125. package/build-types/view-table.d.ts.map +1 -1
  126. package/package.json +10 -10
  127. package/src/add-filter.tsx +1 -1
  128. package/src/bulk-actions-toolbar.tsx +13 -13
  129. package/src/bulk-actions.tsx +18 -13
  130. package/src/dataform.tsx +106 -0
  131. package/src/dataviews.tsx +43 -49
  132. package/src/filter-and-sort-data-view.ts +13 -3
  133. package/src/filter-summary.tsx +18 -12
  134. package/src/filters.tsx +4 -4
  135. package/src/index.ts +1 -0
  136. package/src/item-actions.tsx +15 -16
  137. package/src/normalize-fields.ts +5 -3
  138. package/src/pagination.tsx +2 -2
  139. package/src/private-types.tsx +2 -0
  140. package/src/reset-filters.tsx +1 -1
  141. package/src/search-widget.tsx +6 -6
  142. package/src/single-selection-checkbox.tsx +14 -29
  143. package/src/stories/fixtures.js +17 -1
  144. package/src/stories/index.story.js +15 -28
  145. package/src/style.scss +10 -22
  146. package/src/test/filter-and-sort-data-view.js +16 -1
  147. package/src/types.ts +68 -34
  148. package/src/utils.ts +2 -4
  149. package/src/view-actions.tsx +105 -102
  150. package/src/view-grid.tsx +21 -38
  151. package/src/view-list.tsx +12 -15
  152. package/src/view-table.tsx +31 -42
  153. package/tsconfig.tsbuildinfo +1 -1
@@ -46,12 +46,12 @@ import {
46
46
  } from './bulk-actions';
47
47
  import type {
48
48
  Action,
49
- AnyItem,
50
49
  NormalizedField,
51
50
  SortDirection,
52
51
  ViewTable as ViewTableType,
53
52
  ViewTableProps,
54
53
  } from './types';
54
+ import type { SetSelection } from './private-types';
55
55
 
56
56
  const {
57
57
  DropdownMenuV2: DropdownMenu,
@@ -62,23 +62,24 @@ const {
62
62
  DropdownMenuSeparatorV2: DropdownMenuSeparator,
63
63
  } = unlock( componentsPrivateApis );
64
64
 
65
- interface HeaderMenuProps< Item extends AnyItem > {
65
+ interface HeaderMenuProps< Item > {
66
66
  field: NormalizedField< Item >;
67
67
  view: ViewTableType;
68
+ fields: NormalizedField< Item >[];
68
69
  onChangeView: ( view: ViewTableType ) => void;
69
70
  onHide: ( field: NormalizedField< Item > ) => void;
70
71
  setOpenedFilter: ( fieldId: string ) => void;
71
72
  }
72
73
 
73
- interface BulkSelectionCheckboxProps< Item extends AnyItem > {
74
+ interface BulkSelectionCheckboxProps< Item > {
74
75
  selection: string[];
75
- onSelectionChange: ( items: Item[] ) => void;
76
+ onSelectionChange: SetSelection;
76
77
  data: Item[];
77
78
  actions: Action< Item >[];
78
79
  getItemId: ( item: Item ) => string;
79
80
  }
80
81
 
81
- interface TableRowProps< Item extends AnyItem > {
82
+ interface TableRowProps< Item > {
82
83
  hasBulkActions: boolean;
83
84
  item: Item;
84
85
  actions: Action< Item >[];
@@ -87,8 +88,7 @@ interface TableRowProps< Item extends AnyItem > {
87
88
  primaryField?: NormalizedField< Item >;
88
89
  selection: string[];
89
90
  getItemId: ( item: Item ) => string;
90
- onSelectionChange: ( items: Item[] ) => void;
91
- data: Item[];
91
+ onSelectionChange: SetSelection;
92
92
  }
93
93
 
94
94
  function WithDropDownMenuSeparators( { children }: { children: ReactNode } ) {
@@ -102,10 +102,11 @@ function WithDropDownMenuSeparators( { children }: { children: ReactNode } ) {
102
102
  ) );
103
103
  }
104
104
 
105
- const _HeaderMenu = forwardRef( function HeaderMenu< Item extends AnyItem >(
105
+ const _HeaderMenu = forwardRef( function HeaderMenu< Item >(
106
106
  {
107
107
  field,
108
108
  view,
109
+ fields,
109
110
  onChangeView,
110
111
  onHide,
111
112
  setOpenedFilter,
@@ -220,11 +221,13 @@ const _HeaderMenu = forwardRef( function HeaderMenu< Item extends AnyItem >(
220
221
  <DropdownMenuItem
221
222
  prefix={ <Icon icon={ unseen } /> }
222
223
  onClick={ () => {
224
+ const viewFields =
225
+ view.fields || fields.map( ( f ) => f.id );
223
226
  onHide( field );
224
227
  onChangeView( {
225
228
  ...view,
226
- hiddenFields: view.hiddenFields.concat(
227
- field.id
229
+ fields: viewFields.filter(
230
+ ( fieldId ) => fieldId !== field.id
228
231
  ),
229
232
  } );
230
233
  } }
@@ -240,12 +243,12 @@ const _HeaderMenu = forwardRef( function HeaderMenu< Item extends AnyItem >(
240
243
  } );
241
244
 
242
245
  // @ts-expect-error Lift the `Item` type argument through the forwardRef.
243
- const HeaderMenu: < Item extends AnyItem >(
246
+ const HeaderMenu: < Item >(
244
247
  props: PropsWithoutRef< HeaderMenuProps< Item > > &
245
248
  RefAttributes< HTMLButtonElement >
246
249
  ) => ReturnType< typeof _HeaderMenu > = _HeaderMenu;
247
250
 
248
- function BulkSelectionCheckbox< Item extends AnyItem >( {
251
+ function BulkSelectionCheckbox< Item >( {
249
252
  selection,
250
253
  onSelectionChange,
251
254
  data,
@@ -277,7 +280,9 @@ function BulkSelectionCheckbox< Item extends AnyItem >( {
277
280
  if ( areAllSelected ) {
278
281
  onSelectionChange( [] );
279
282
  } else {
280
- onSelectionChange( selectableItems );
283
+ onSelectionChange(
284
+ selectableItems.map( ( item ) => getItemId( item ) )
285
+ );
281
286
  }
282
287
  } }
283
288
  aria-label={
@@ -287,7 +292,7 @@ function BulkSelectionCheckbox< Item extends AnyItem >( {
287
292
  );
288
293
  }
289
294
 
290
- function TableRow< Item extends AnyItem >( {
295
+ function TableRow< Item >( {
291
296
  hasBulkActions,
292
297
  item,
293
298
  actions,
@@ -297,7 +302,6 @@ function TableRow< Item extends AnyItem >( {
297
302
  selection,
298
303
  getItemId,
299
304
  onSelectionChange,
300
- data,
301
305
  }: TableRowProps< Item > ) {
302
306
  const hasPossibleBulkAction = useHasAPossibleBulkAction( actions, item );
303
307
  const isSelected = hasPossibleBulkAction && selection.includes( id );
@@ -337,27 +341,11 @@ function TableRow< Item extends AnyItem >( {
337
341
  ! isTouchDevice.current &&
338
342
  document.getSelection()?.type !== 'Range'
339
343
  ) {
340
- if ( ! isSelected ) {
341
- onSelectionChange(
342
- data.filter( ( _item ) => {
343
- const itemId = getItemId?.( _item );
344
- return (
345
- itemId === id ||
346
- selection.includes( itemId )
347
- );
348
- } )
349
- );
350
- } else {
351
- onSelectionChange(
352
- data.filter( ( _item ) => {
353
- const itemId = getItemId?.( _item );
354
- return (
355
- itemId !== id &&
356
- selection.includes( itemId )
357
- );
358
- } )
359
- );
360
- }
344
+ onSelectionChange(
345
+ selection.includes( id )
346
+ ? selection.filter( ( itemId ) => id !== itemId )
347
+ : [ ...selection, id ]
348
+ );
361
349
  }
362
350
  } }
363
351
  >
@@ -374,7 +362,6 @@ function TableRow< Item extends AnyItem >( {
374
362
  selection={ selection }
375
363
  onSelectionChange={ onSelectionChange }
376
364
  getItemId={ getItemId }
377
- data={ data }
378
365
  primaryField={ primaryField }
379
366
  disabled={ ! hasPossibleBulkAction }
380
367
  />
@@ -425,7 +412,7 @@ function TableRow< Item extends AnyItem >( {
425
412
  );
426
413
  }
427
414
 
428
- function ViewTable< Item extends AnyItem >( {
415
+ function ViewTable< Item >( {
429
416
  actions,
430
417
  data,
431
418
  fields,
@@ -471,15 +458,17 @@ function ViewTable< Item extends AnyItem >( {
471
458
  : undefined;
472
459
  setNextHeaderMenuToFocus( fallback?.node );
473
460
  };
461
+
462
+ const viewFields = view.fields || fields.map( ( f ) => f.id );
474
463
  const visibleFields = fields.filter(
475
464
  ( field ) =>
476
- ! view.hiddenFields.includes( field.id ) &&
477
- ! [ view.layout.mediaField ].includes( field.id )
465
+ viewFields.includes( field.id ) ||
466
+ [ view.layout?.mediaField ].includes( field.id )
478
467
  );
479
468
  const hasData = !! data?.length;
480
469
 
481
470
  const primaryField = fields.find(
482
- ( field ) => field.id === view.layout.primaryField
471
+ ( field ) => field.id === view.layout?.primaryField
483
472
  );
484
473
 
485
474
  return (
@@ -548,6 +537,7 @@ function ViewTable< Item extends AnyItem >( {
548
537
  } }
549
538
  field={ field }
550
539
  view={ view }
540
+ fields={ fields }
551
541
  onChangeView={ onChangeView }
552
542
  onHide={ onHide }
553
543
  setOpenedFilter={ setOpenedFilter }
@@ -580,7 +570,6 @@ function ViewTable< Item extends AnyItem >( {
580
570
  selection={ selection }
581
571
  getItemId={ getItemId }
582
572
  onSelectionChange={ onSelectionChange }
583
- data={ data }
584
573
  />
585
574
  ) ) }
586
575
  </tbody>