@wordpress/dataviews 1.1.0 → 1.2.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 (124) hide show
  1. package/CHANGELOG.md +11 -5
  2. package/build/bulk-actions-toolbar.js +182 -0
  3. package/build/bulk-actions-toolbar.js.map +1 -0
  4. package/build/bulk-actions.js +8 -8
  5. package/build/bulk-actions.js.map +1 -1
  6. package/build/dataviews.js +11 -4
  7. package/build/dataviews.js.map +1 -1
  8. package/build/filter-and-sort-data-view.js +2 -2
  9. package/build/filter-and-sort-data-view.js.map +1 -1
  10. package/build/filter-summary.js +3 -3
  11. package/build/filter-summary.js.map +1 -1
  12. package/build/item-actions.js +41 -22
  13. package/build/item-actions.js.map +1 -1
  14. package/build/lock-unlock.js.map +1 -1
  15. package/build/normalize-fields.js.map +1 -1
  16. package/build/pagination.js +13 -7
  17. package/build/pagination.js.map +1 -1
  18. package/build/single-selection-checkbox.js +4 -0
  19. package/build/single-selection-checkbox.js.map +1 -1
  20. package/build/types.js.map +1 -1
  21. package/build/view-grid.js +9 -10
  22. package/build/view-grid.js.map +1 -1
  23. package/build/view-list.js +134 -21
  24. package/build/view-list.js.map +1 -1
  25. package/build/view-table.js +9 -9
  26. package/build/view-table.js.map +1 -1
  27. package/build-module/bulk-actions-toolbar.js +175 -0
  28. package/build-module/bulk-actions-toolbar.js.map +1 -0
  29. package/build-module/bulk-actions.js +8 -8
  30. package/build-module/bulk-actions.js.map +1 -1
  31. package/build-module/dataviews.js +11 -4
  32. package/build-module/dataviews.js.map +1 -1
  33. package/build-module/filter-and-sort-data-view.js +2 -2
  34. package/build-module/filter-and-sort-data-view.js.map +1 -1
  35. package/build-module/filter-summary.js +3 -3
  36. package/build-module/filter-summary.js.map +1 -1
  37. package/build-module/item-actions.js +40 -24
  38. package/build-module/item-actions.js.map +1 -1
  39. package/build-module/lock-unlock.js.map +1 -1
  40. package/build-module/normalize-fields.js.map +1 -1
  41. package/build-module/pagination.js +14 -7
  42. package/build-module/pagination.js.map +1 -1
  43. package/build-module/single-selection-checkbox.js +5 -0
  44. package/build-module/single-selection-checkbox.js.map +1 -1
  45. package/build-module/types.js.map +1 -1
  46. package/build-module/view-grid.js +9 -10
  47. package/build-module/view-grid.js.map +1 -1
  48. package/build-module/view-list.js +135 -23
  49. package/build-module/view-list.js.map +1 -1
  50. package/build-module/view-table.js +9 -9
  51. package/build-module/view-table.js.map +1 -1
  52. package/build-style/style-rtl.css +62 -27
  53. package/build-style/style.css +62 -27
  54. package/build-types/add-filter.d.ts +8 -0
  55. package/build-types/add-filter.d.ts.map +1 -0
  56. package/build-types/bulk-actions-toolbar.d.ts +8 -0
  57. package/build-types/bulk-actions-toolbar.d.ts.map +1 -0
  58. package/build-types/bulk-actions.d.ts +14 -0
  59. package/build-types/bulk-actions.d.ts.map +1 -0
  60. package/build-types/dataviews.d.ts +15 -0
  61. package/build-types/dataviews.d.ts.map +1 -0
  62. package/build-types/dropdown-menu-helper.d.ts +6 -0
  63. package/build-types/dropdown-menu-helper.d.ts.map +1 -0
  64. package/build-types/filter-and-sort-data-view.d.ts +3 -3
  65. package/build-types/filter-and-sort-data-view.d.ts.map +1 -1
  66. package/build-types/filter-summary.d.ts +6 -0
  67. package/build-types/filter-summary.d.ts.map +1 -0
  68. package/build-types/filters.d.ts +3 -0
  69. package/build-types/filters.d.ts.map +1 -0
  70. package/build-types/index.d.ts +4 -0
  71. package/build-types/index.d.ts.map +1 -0
  72. package/build-types/item-actions.d.ts +37 -0
  73. package/build-types/item-actions.d.ts.map +1 -0
  74. package/build-types/layouts.d.ts +20 -0
  75. package/build-types/layouts.d.ts.map +1 -0
  76. package/build-types/lock-unlock.d.ts +2 -0
  77. package/build-types/lock-unlock.d.ts.map +1 -0
  78. package/build-types/normalize-fields.d.ts +2 -2
  79. package/build-types/normalize-fields.d.ts.map +1 -1
  80. package/build-types/pagination.d.ts +16 -0
  81. package/build-types/pagination.d.ts.map +1 -0
  82. package/build-types/reset-filters.d.ts +6 -0
  83. package/build-types/reset-filters.d.ts.map +1 -0
  84. package/build-types/search-widget.d.ts +2 -0
  85. package/build-types/search-widget.d.ts.map +1 -0
  86. package/build-types/search.d.ts +3 -0
  87. package/build-types/search.d.ts.map +1 -0
  88. package/build-types/single-selection-checkbox.d.ts +17 -0
  89. package/build-types/single-selection-checkbox.d.ts.map +1 -0
  90. package/build-types/stories/fixtures.d.ts +114 -0
  91. package/build-types/stories/fixtures.d.ts.map +1 -0
  92. package/build-types/stories/index.story.d.ts +15 -0
  93. package/build-types/stories/index.story.d.ts.map +1 -0
  94. package/build-types/types.d.ts +152 -20
  95. package/build-types/types.d.ts.map +1 -1
  96. package/build-types/utils.d.ts +2 -0
  97. package/build-types/utils.d.ts.map +1 -0
  98. package/build-types/view-actions.d.ts +3 -0
  99. package/build-types/view-actions.d.ts.map +1 -0
  100. package/build-types/view-grid.d.ts +15 -0
  101. package/build-types/view-grid.d.ts.map +1 -0
  102. package/build-types/view-list.d.ts +16 -0
  103. package/build-types/view-list.d.ts.map +1 -0
  104. package/build-types/view-table.d.ts +14 -0
  105. package/build-types/view-table.d.ts.map +1 -0
  106. package/package.json +12 -12
  107. package/src/bulk-actions-toolbar.js +244 -0
  108. package/src/{bulk-actions.js → bulk-actions.tsx} +73 -17
  109. package/src/dataviews.js +14 -3
  110. package/src/filter-and-sort-data-view.ts +13 -8
  111. package/src/filter-summary.js +3 -3
  112. package/src/{item-actions.js → item-actions.tsx} +112 -28
  113. package/src/normalize-fields.ts +4 -2
  114. package/src/{pagination.js → pagination.tsx} +28 -7
  115. package/src/{single-selection-checkbox.js → single-selection-checkbox.tsx} +17 -2
  116. package/src/style.scss +77 -28
  117. package/src/types.ts +190 -20
  118. package/src/{view-grid.js → view-grid.tsx} +45 -16
  119. package/src/view-list.tsx +421 -0
  120. package/src/view-table.js +8 -8
  121. package/tsconfig.json +4 -2
  122. package/tsconfig.tsbuildinfo +1 -1
  123. package/src/view-list.js +0 -207
  124. /package/src/{lock-unlock.js → lock-unlock.ts} +0 -0
package/src/view-list.js DELETED
@@ -1,207 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import classNames from 'classnames';
5
-
6
- /**
7
- * WordPress dependencies
8
- */
9
- import { useInstanceId } from '@wordpress/compose';
10
- import {
11
- __experimentalHStack as HStack,
12
- __experimentalVStack as VStack,
13
- privateApis as componentsPrivateApis,
14
- Spinner,
15
- VisuallyHidden,
16
- } from '@wordpress/components';
17
- import { useCallback, useEffect, useRef } from '@wordpress/element';
18
- import { __ } from '@wordpress/i18n';
19
-
20
- /**
21
- * Internal dependencies
22
- */
23
- import { unlock } from './lock-unlock';
24
-
25
- const {
26
- useCompositeStoreV2: useCompositeStore,
27
- CompositeV2: Composite,
28
- CompositeItemV2: CompositeItem,
29
- CompositeRowV2: CompositeRow,
30
- } = unlock( componentsPrivateApis );
31
-
32
- function ListItem( {
33
- id,
34
- item,
35
- isSelected,
36
- onSelect,
37
- mediaField,
38
- primaryField,
39
- visibleFields,
40
- } ) {
41
- const itemRef = useRef( null );
42
- const labelId = `${ id }-label`;
43
- const descriptionId = `${ id }-description`;
44
-
45
- useEffect( () => {
46
- if ( isSelected ) {
47
- itemRef.current?.scrollIntoView( {
48
- behavior: 'auto',
49
- block: 'nearest',
50
- inline: 'nearest',
51
- } );
52
- }
53
- }, [ isSelected ] );
54
-
55
- return (
56
- <CompositeRow
57
- ref={ itemRef }
58
- render={ <li /> }
59
- role="row"
60
- className={ classNames( {
61
- 'is-selected': isSelected,
62
- } ) }
63
- >
64
- <HStack className="dataviews-view-list__item-wrapper">
65
- <div role="gridcell">
66
- <CompositeItem
67
- render={ <div /> }
68
- role="button"
69
- id={ id }
70
- aria-pressed={ isSelected }
71
- aria-labelledby={ labelId }
72
- aria-describedby={ descriptionId }
73
- className="dataviews-view-list__item"
74
- onClick={ () => onSelect( item ) }
75
- >
76
- <HStack
77
- spacing={ 3 }
78
- justify="start"
79
- alignment="flex-start"
80
- >
81
- <div className="dataviews-view-list__media-wrapper">
82
- { mediaField?.render( { item } ) || (
83
- <div className="dataviews-view-list__media-placeholder"></div>
84
- ) }
85
- </div>
86
- <VStack spacing={ 1 }>
87
- <span
88
- className="dataviews-view-list__primary-field"
89
- id={ labelId }
90
- >
91
- { primaryField?.render( { item } ) }
92
- </span>
93
- <div
94
- className="dataviews-view-list__fields"
95
- id={ descriptionId }
96
- >
97
- { visibleFields.map( ( field ) => (
98
- <div
99
- key={ field.id }
100
- className="dataviews-view-list__field"
101
- >
102
- <VisuallyHidden
103
- as="span"
104
- className="dataviews-view-list__field-label"
105
- >
106
- { field.header }
107
- </VisuallyHidden>
108
- <span className="dataviews-view-list__field-value">
109
- { field.render( { item } ) }
110
- </span>
111
- </div>
112
- ) ) }
113
- </div>
114
- </VStack>
115
- </HStack>
116
- </CompositeItem>
117
- </div>
118
- </HStack>
119
- </CompositeRow>
120
- );
121
- }
122
-
123
- export default function ViewList( {
124
- view,
125
- fields,
126
- data,
127
- isLoading,
128
- getItemId,
129
- onSelectionChange,
130
- selection,
131
- id: preferredId,
132
- } ) {
133
- const baseId = useInstanceId( ViewList, 'view-list', preferredId );
134
- const selectedItem = data?.findLast( ( item ) =>
135
- selection.includes( item.id )
136
- );
137
-
138
- const mediaField = fields.find(
139
- ( field ) => field.id === view.layout.mediaField
140
- );
141
- const primaryField = fields.find(
142
- ( field ) => field.id === view.layout.primaryField
143
- );
144
- const visibleFields = fields.filter(
145
- ( field ) =>
146
- ! view.hiddenFields.includes( field.id ) &&
147
- ! [ view.layout.primaryField, view.layout.mediaField ].includes(
148
- field.id
149
- )
150
- );
151
-
152
- const onSelect = useCallback(
153
- ( item ) => onSelectionChange( [ item ] ),
154
- [ onSelectionChange ]
155
- );
156
-
157
- const getItemDomId = useCallback(
158
- ( item ) => ( item ? `${ baseId }-${ getItemId( item ) }` : undefined ),
159
- [ baseId, getItemId ]
160
- );
161
-
162
- const store = useCompositeStore( {
163
- defaultActiveId: getItemDomId( selectedItem ),
164
- } );
165
-
166
- const hasData = data?.length;
167
- if ( ! hasData ) {
168
- return (
169
- <div
170
- className={ classNames( {
171
- 'dataviews-loading': isLoading,
172
- 'dataviews-no-results': ! hasData && ! isLoading,
173
- } ) }
174
- >
175
- { ! hasData && (
176
- <p>{ isLoading ? <Spinner /> : __( 'No results' ) }</p>
177
- ) }
178
- </div>
179
- );
180
- }
181
-
182
- return (
183
- <Composite
184
- id={ baseId }
185
- render={ <ul /> }
186
- className="dataviews-view-list"
187
- role="grid"
188
- store={ store }
189
- >
190
- { data.map( ( item ) => {
191
- const id = getItemDomId( item );
192
- return (
193
- <ListItem
194
- key={ id }
195
- id={ id }
196
- item={ item }
197
- isSelected={ item === selectedItem }
198
- onSelect={ onSelect }
199
- mediaField={ mediaField }
200
- primaryField={ primaryField }
201
- visibleFields={ visibleFields }
202
- />
203
- );
204
- } ) }
205
- </Composite>
206
- );
207
- }
File without changes