@wordpress/dataviews 0.2.0 → 0.3.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/LICENSE.md +1 -1
- package/README.md +30 -6
- package/build/add-filter.js +109 -49
- package/build/add-filter.js.map +1 -1
- package/build/constants.js +24 -2
- package/build/constants.js.map +1 -1
- package/build/dataviews.js +12 -9
- package/build/dataviews.js.map +1 -1
- package/build/dropdown-menu-helper.js +72 -0
- package/build/dropdown-menu-helper.js.map +1 -0
- package/build/filter-summary.js +43 -54
- package/build/filter-summary.js.map +1 -1
- package/build/filters.js +27 -17
- package/build/filters.js.map +1 -1
- package/build/index.js +13 -0
- package/build/index.js.map +1 -1
- package/build/item-actions.js +12 -12
- package/build/item-actions.js.map +1 -1
- package/build/pagination.js +31 -65
- package/build/pagination.js.map +1 -1
- package/build/reset-filters.js +8 -8
- package/build/reset-filters.js.map +1 -1
- package/build/search.js +8 -6
- package/build/search.js.map +1 -1
- package/build/utils.js +71 -0
- package/build/utils.js.map +1 -0
- package/build/view-actions.js +72 -95
- package/build/view-actions.js.map +1 -1
- package/build/view-grid.js +4 -6
- package/build/view-grid.js.map +1 -1
- package/build/view-list.js +26 -13
- package/build/view-list.js.map +1 -1
- package/build/view-table.js +153 -154
- package/build/view-table.js.map +1 -1
- package/build-module/add-filter.js +113 -53
- package/build-module/add-filter.js.map +1 -1
- package/build-module/constants.js +20 -0
- package/build-module/constants.js.map +1 -1
- package/build-module/dataviews.js +13 -10
- package/build-module/dataviews.js.map +1 -1
- package/build-module/dropdown-menu-helper.js +64 -0
- package/build-module/dropdown-menu-helper.js.map +1 -0
- package/build-module/filter-summary.js +45 -56
- package/build-module/filter-summary.js.map +1 -1
- package/build-module/filters.js +26 -17
- package/build-module/filters.js.map +1 -1
- package/build-module/index.js +1 -0
- package/build-module/index.js.map +1 -1
- package/build-module/item-actions.js +12 -12
- package/build-module/item-actions.js.map +1 -1
- package/build-module/pagination.js +35 -69
- package/build-module/pagination.js.map +1 -1
- package/build-module/reset-filters.js +6 -6
- package/build-module/reset-filters.js.map +1 -1
- package/build-module/search.js +7 -6
- package/build-module/search.js.map +1 -1
- package/build-module/utils.js +63 -0
- package/build-module/utils.js.map +1 -0
- package/build-module/view-actions.js +73 -97
- package/build-module/view-actions.js.map +1 -1
- package/build-module/view-grid.js +4 -6
- package/build-module/view-grid.js.map +1 -1
- package/build-module/view-list.js +27 -14
- package/build-module/view-list.js.map +1 -1
- package/build-module/view-table.js +156 -157
- package/build-module/view-table.js.map +1 -1
- package/build-style/style-rtl.css +180 -70
- package/build-style/style.css +180 -70
- package/package.json +11 -10
- package/src/add-filter.js +227 -68
- package/src/constants.js +16 -0
- package/src/dataviews.js +19 -12
- package/src/dropdown-menu-helper.js +61 -0
- package/src/filter-summary.js +70 -103
- package/src/filters.js +41 -24
- package/src/index.js +1 -0
- package/src/item-actions.js +30 -25
- package/src/pagination.js +75 -123
- package/src/reset-filters.js +5 -5
- package/src/search.js +8 -6
- package/src/style.scss +182 -48
- package/src/utils.js +51 -0
- package/src/view-actions.js +113 -114
- package/src/view-grid.js +4 -4
- package/src/view-list.js +42 -28
- package/src/view-table.js +280 -238
package/src/view-actions.js
CHANGED
|
@@ -3,24 +3,24 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import {
|
|
5
5
|
Button,
|
|
6
|
-
Icon,
|
|
7
6
|
privateApis as componentsPrivateApis,
|
|
8
7
|
} from '@wordpress/components';
|
|
9
|
-
import { chevronRightSmall, check, arrowUp, arrowDown } from '@wordpress/icons';
|
|
10
8
|
import { __ } from '@wordpress/i18n';
|
|
9
|
+
import { memo } from '@wordpress/element';
|
|
11
10
|
|
|
12
11
|
/**
|
|
13
12
|
* Internal dependencies
|
|
14
13
|
*/
|
|
15
14
|
import { unlock } from './lock-unlock';
|
|
16
|
-
import { VIEW_LAYOUTS, LAYOUT_TABLE } from './constants';
|
|
15
|
+
import { VIEW_LAYOUTS, LAYOUT_TABLE, SORTING_DIRECTIONS } from './constants';
|
|
17
16
|
|
|
18
17
|
const {
|
|
19
18
|
DropdownMenuV2: DropdownMenu,
|
|
20
19
|
DropdownMenuGroupV2: DropdownMenuGroup,
|
|
21
20
|
DropdownMenuItemV2: DropdownMenuItem,
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
DropdownMenuRadioItemV2: DropdownMenuRadioItem,
|
|
22
|
+
DropdownMenuCheckboxItemV2: DropdownMenuCheckboxItem,
|
|
23
|
+
DropdownMenuItemLabelV2: DropdownMenuItemLabel,
|
|
24
24
|
} = unlock( componentsPrivateApis );
|
|
25
25
|
|
|
26
26
|
function ViewTypeMenu( { view, onChangeView, supportedLayouts } ) {
|
|
@@ -35,86 +35,81 @@ function ViewTypeMenu( { view, onChangeView, supportedLayouts } ) {
|
|
|
35
35
|
}
|
|
36
36
|
const activeView = _availableViews.find( ( v ) => view.type === v.type );
|
|
37
37
|
return (
|
|
38
|
-
<
|
|
38
|
+
<DropdownMenu
|
|
39
39
|
trigger={
|
|
40
|
-
<
|
|
40
|
+
<DropdownMenuItem
|
|
41
41
|
suffix={
|
|
42
|
-
|
|
43
|
-
{ activeView.label }
|
|
44
|
-
<Icon icon={ chevronRightSmall } />
|
|
45
|
-
</>
|
|
42
|
+
<span aria-hidden="true">{ activeView.label }</span>
|
|
46
43
|
}
|
|
47
44
|
>
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
<DropdownMenuItemLabel>
|
|
46
|
+
{ __( 'Layout' ) }
|
|
47
|
+
</DropdownMenuItemLabel>
|
|
48
|
+
</DropdownMenuItem>
|
|
50
49
|
}
|
|
51
50
|
>
|
|
52
51
|
{ _availableViews.map( ( availableView ) => {
|
|
53
52
|
return (
|
|
54
|
-
<
|
|
53
|
+
<DropdownMenuRadioItem
|
|
55
54
|
key={ availableView.type }
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
)
|
|
62
|
-
}
|
|
63
|
-
onSelect={ ( event ) => {
|
|
64
|
-
// We need to handle this on DropDown component probably..
|
|
65
|
-
event.preventDefault();
|
|
55
|
+
value={ availableView.type }
|
|
56
|
+
name="view-actions-available-view"
|
|
57
|
+
checked={ availableView.type === view.type }
|
|
58
|
+
hideOnClick={ true }
|
|
59
|
+
onChange={ ( e ) => {
|
|
66
60
|
onChangeView( {
|
|
67
61
|
...view,
|
|
68
|
-
type:
|
|
62
|
+
type: e.target.value,
|
|
69
63
|
} );
|
|
70
64
|
} }
|
|
71
65
|
>
|
|
72
|
-
|
|
73
|
-
|
|
66
|
+
<DropdownMenuItemLabel>
|
|
67
|
+
{ availableView.label }
|
|
68
|
+
</DropdownMenuItemLabel>
|
|
69
|
+
</DropdownMenuRadioItem>
|
|
74
70
|
);
|
|
75
71
|
} ) }
|
|
76
|
-
</
|
|
72
|
+
</DropdownMenu>
|
|
77
73
|
);
|
|
78
74
|
}
|
|
79
75
|
|
|
80
76
|
const PAGE_SIZE_VALUES = [ 10, 20, 50, 100 ];
|
|
81
77
|
function PageSizeMenu( { view, onChangeView } ) {
|
|
82
78
|
return (
|
|
83
|
-
<
|
|
79
|
+
<DropdownMenu
|
|
84
80
|
trigger={
|
|
85
|
-
<
|
|
86
|
-
suffix={
|
|
87
|
-
<>
|
|
88
|
-
{ view.perPage }
|
|
89
|
-
<Icon icon={ chevronRightSmall } />
|
|
90
|
-
</>
|
|
91
|
-
}
|
|
81
|
+
<DropdownMenuItem
|
|
82
|
+
suffix={ <span aria-hidden="true">{ view.perPage }</span> }
|
|
92
83
|
>
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
84
|
+
<DropdownMenuItemLabel>
|
|
85
|
+
{ /* TODO: probably label per view type. */ }
|
|
86
|
+
{ __( 'Rows per page' ) }
|
|
87
|
+
</DropdownMenuItemLabel>
|
|
88
|
+
</DropdownMenuItem>
|
|
96
89
|
}
|
|
97
90
|
>
|
|
98
91
|
{ PAGE_SIZE_VALUES.map( ( size ) => {
|
|
99
92
|
return (
|
|
100
|
-
<
|
|
93
|
+
<DropdownMenuRadioItem
|
|
101
94
|
key={ size }
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
95
|
+
value={ size }
|
|
96
|
+
name="view-actions-page-size"
|
|
97
|
+
checked={ view.perPage === size }
|
|
98
|
+
onChange={ () => {
|
|
99
|
+
onChangeView( {
|
|
100
|
+
...view,
|
|
101
|
+
// `e.target.value` holds the same value as `size` but as a string,
|
|
102
|
+
// so we use `size` directly to avoid parsing to int.
|
|
103
|
+
perPage: size,
|
|
104
|
+
page: 1,
|
|
105
|
+
} );
|
|
111
106
|
} }
|
|
112
107
|
>
|
|
113
|
-
{ size }
|
|
114
|
-
</
|
|
108
|
+
<DropdownMenuItemLabel>{ size }</DropdownMenuItemLabel>
|
|
109
|
+
</DropdownMenuRadioItem>
|
|
115
110
|
);
|
|
116
111
|
} ) }
|
|
117
|
-
</
|
|
112
|
+
</DropdownMenu>
|
|
118
113
|
);
|
|
119
114
|
}
|
|
120
115
|
|
|
@@ -127,27 +122,22 @@ function FieldsVisibilityMenu( { view, onChangeView, fields } ) {
|
|
|
127
122
|
return null;
|
|
128
123
|
}
|
|
129
124
|
return (
|
|
130
|
-
<
|
|
125
|
+
<DropdownMenu
|
|
131
126
|
trigger={
|
|
132
|
-
<
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
</
|
|
127
|
+
<DropdownMenuItem>
|
|
128
|
+
<DropdownMenuItemLabel>
|
|
129
|
+
{ __( 'Fields' ) }
|
|
130
|
+
</DropdownMenuItemLabel>
|
|
131
|
+
</DropdownMenuItem>
|
|
137
132
|
}
|
|
138
133
|
>
|
|
139
134
|
{ hidableFields?.map( ( field ) => {
|
|
140
135
|
return (
|
|
141
|
-
<
|
|
136
|
+
<DropdownMenuCheckboxItem
|
|
142
137
|
key={ field.id }
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
<Icon icon={ check } />
|
|
147
|
-
)
|
|
148
|
-
}
|
|
149
|
-
onSelect={ ( event ) => {
|
|
150
|
-
event.preventDefault();
|
|
138
|
+
value={ field.id }
|
|
139
|
+
checked={ ! view.hiddenFields?.includes( field.id ) }
|
|
140
|
+
onChange={ () => {
|
|
151
141
|
onChangeView( {
|
|
152
142
|
...view,
|
|
153
143
|
hiddenFields: view.hiddenFields?.includes(
|
|
@@ -163,19 +153,16 @@ function FieldsVisibilityMenu( { view, onChangeView, fields } ) {
|
|
|
163
153
|
} );
|
|
164
154
|
} }
|
|
165
155
|
>
|
|
166
|
-
|
|
167
|
-
|
|
156
|
+
<DropdownMenuItemLabel>
|
|
157
|
+
{ field.header }
|
|
158
|
+
</DropdownMenuItemLabel>
|
|
159
|
+
</DropdownMenuCheckboxItem>
|
|
168
160
|
);
|
|
169
161
|
} ) }
|
|
170
|
-
</
|
|
162
|
+
</DropdownMenu>
|
|
171
163
|
);
|
|
172
164
|
}
|
|
173
165
|
|
|
174
|
-
// This object is used to construct the sorting options per sortable field.
|
|
175
|
-
const sortingItemsInfo = {
|
|
176
|
-
asc: { icon: arrowUp, label: __( 'Sort ascending' ) },
|
|
177
|
-
desc: { icon: arrowDown, label: __( 'Sort descending' ) },
|
|
178
|
-
};
|
|
179
166
|
function SortMenu( { fields, view, onChangeView } ) {
|
|
180
167
|
const sortableFields = fields.filter(
|
|
181
168
|
( field ) => field.enableSorting !== false
|
|
@@ -187,51 +174,58 @@ function SortMenu( { fields, view, onChangeView } ) {
|
|
|
187
174
|
( field ) => field.id === view.sort?.field
|
|
188
175
|
);
|
|
189
176
|
return (
|
|
190
|
-
<
|
|
177
|
+
<DropdownMenu
|
|
191
178
|
trigger={
|
|
192
|
-
<
|
|
179
|
+
<DropdownMenuItem
|
|
193
180
|
suffix={
|
|
194
|
-
|
|
181
|
+
<span aria-hidden="true">
|
|
195
182
|
{ currentSortedField?.header }
|
|
196
|
-
|
|
197
|
-
</>
|
|
183
|
+
</span>
|
|
198
184
|
}
|
|
199
185
|
>
|
|
200
|
-
|
|
201
|
-
|
|
186
|
+
<DropdownMenuItemLabel>
|
|
187
|
+
{ __( 'Sort by' ) }
|
|
188
|
+
</DropdownMenuItemLabel>
|
|
189
|
+
</DropdownMenuItem>
|
|
202
190
|
}
|
|
203
191
|
>
|
|
204
192
|
{ sortableFields?.map( ( field ) => {
|
|
205
193
|
const sortedDirection = view.sort?.direction;
|
|
206
194
|
return (
|
|
207
|
-
<
|
|
195
|
+
<DropdownMenu
|
|
208
196
|
key={ field.id }
|
|
209
197
|
trigger={
|
|
210
|
-
<
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
</
|
|
198
|
+
<DropdownMenuItem>
|
|
199
|
+
<DropdownMenuItemLabel>
|
|
200
|
+
{ field.header }
|
|
201
|
+
</DropdownMenuItemLabel>
|
|
202
|
+
</DropdownMenuItem>
|
|
215
203
|
}
|
|
216
|
-
|
|
204
|
+
style={ {
|
|
205
|
+
minWidth: '220px',
|
|
206
|
+
} }
|
|
217
207
|
>
|
|
218
|
-
{ Object.entries(
|
|
208
|
+
{ Object.entries( SORTING_DIRECTIONS ).map(
|
|
219
209
|
( [ direction, info ] ) => {
|
|
220
|
-
const
|
|
221
|
-
currentSortedField &&
|
|
210
|
+
const isChecked =
|
|
211
|
+
currentSortedField !== undefined &&
|
|
222
212
|
sortedDirection === direction &&
|
|
223
213
|
field.id === currentSortedField.id;
|
|
214
|
+
|
|
215
|
+
const value = `${ field.id }-${ direction }`;
|
|
216
|
+
|
|
224
217
|
return (
|
|
225
|
-
<
|
|
226
|
-
key={
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
218
|
+
<DropdownMenuRadioItem
|
|
219
|
+
key={ value }
|
|
220
|
+
// All sorting radio items share the same name, so that
|
|
221
|
+
// selecting a sorting option automatically deselects the
|
|
222
|
+
// previously selected one, even if it is displayed in
|
|
223
|
+
// another submenu. The field and direction are passed via
|
|
224
|
+
// the `value` prop.
|
|
225
|
+
name="view-actions-sorting"
|
|
226
|
+
value={ value }
|
|
227
|
+
checked={ isChecked }
|
|
228
|
+
onChange={ () => {
|
|
235
229
|
onChangeView( {
|
|
236
230
|
...view,
|
|
237
231
|
sort: {
|
|
@@ -241,19 +235,21 @@ function SortMenu( { fields, view, onChangeView } ) {
|
|
|
241
235
|
} );
|
|
242
236
|
} }
|
|
243
237
|
>
|
|
244
|
-
|
|
245
|
-
|
|
238
|
+
<DropdownMenuItemLabel>
|
|
239
|
+
{ info.label }
|
|
240
|
+
</DropdownMenuItemLabel>
|
|
241
|
+
</DropdownMenuRadioItem>
|
|
246
242
|
);
|
|
247
243
|
}
|
|
248
244
|
) }
|
|
249
|
-
</
|
|
245
|
+
</DropdownMenu>
|
|
250
246
|
);
|
|
251
247
|
} ) }
|
|
252
|
-
</
|
|
248
|
+
</DropdownMenu>
|
|
253
249
|
);
|
|
254
250
|
}
|
|
255
251
|
|
|
256
|
-
|
|
252
|
+
const ViewActions = memo( function ViewActions( {
|
|
257
253
|
fields,
|
|
258
254
|
view,
|
|
259
255
|
onChangeView,
|
|
@@ -263,7 +259,6 @@ export default function ViewActions( {
|
|
|
263
259
|
<DropdownMenu
|
|
264
260
|
trigger={
|
|
265
261
|
<Button
|
|
266
|
-
variant="tertiary"
|
|
267
262
|
size="compact"
|
|
268
263
|
icon={
|
|
269
264
|
VIEW_LAYOUTS.find( ( v ) => v.type === view.type )
|
|
@@ -276,11 +271,13 @@ export default function ViewActions( {
|
|
|
276
271
|
}
|
|
277
272
|
>
|
|
278
273
|
<DropdownMenuGroup>
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
274
|
+
{ window?.__experimentalAdminViews && (
|
|
275
|
+
<ViewTypeMenu
|
|
276
|
+
view={ view }
|
|
277
|
+
onChangeView={ onChangeView }
|
|
278
|
+
supportedLayouts={ supportedLayouts }
|
|
279
|
+
/>
|
|
280
|
+
) }
|
|
284
281
|
<SortMenu
|
|
285
282
|
fields={ fields }
|
|
286
283
|
view={ view }
|
|
@@ -295,4 +292,6 @@ export default function ViewActions( {
|
|
|
295
292
|
</DropdownMenuGroup>
|
|
296
293
|
</DropdownMenu>
|
|
297
294
|
);
|
|
298
|
-
}
|
|
295
|
+
} );
|
|
296
|
+
|
|
297
|
+
export default ViewActions;
|
package/src/view-grid.js
CHANGED
|
@@ -42,12 +42,12 @@ export default function ViewGrid( {
|
|
|
42
42
|
gap={ 8 }
|
|
43
43
|
columns={ 2 }
|
|
44
44
|
alignment="top"
|
|
45
|
-
className="dataviews-grid
|
|
45
|
+
className="dataviews-view-grid"
|
|
46
46
|
>
|
|
47
|
-
{ usedData.map( ( item
|
|
47
|
+
{ usedData.map( ( item ) => (
|
|
48
48
|
<VStack
|
|
49
49
|
spacing={ 3 }
|
|
50
|
-
key={ getItemId
|
|
50
|
+
key={ getItemId( item ) }
|
|
51
51
|
className="dataviews-view-grid__card"
|
|
52
52
|
>
|
|
53
53
|
<div className="dataviews-view-grid__media">
|
|
@@ -87,7 +87,7 @@ export default function ViewGrid( {
|
|
|
87
87
|
{ field.header }
|
|
88
88
|
</div>
|
|
89
89
|
<div className="dataviews-view-grid__field-value">
|
|
90
|
-
{
|
|
90
|
+
{ renderedValue }
|
|
91
91
|
</div>
|
|
92
92
|
</VStack>
|
|
93
93
|
);
|
package/src/view-list.js
CHANGED
|
@@ -10,8 +10,11 @@ import { useAsyncList } from '@wordpress/compose';
|
|
|
10
10
|
import {
|
|
11
11
|
__experimentalHStack as HStack,
|
|
12
12
|
__experimentalVStack as VStack,
|
|
13
|
+
Button,
|
|
13
14
|
} from '@wordpress/components';
|
|
14
15
|
import { ENTER, SPACE } from '@wordpress/keycodes';
|
|
16
|
+
import { info } from '@wordpress/icons';
|
|
17
|
+
import { __ } from '@wordpress/i18n';
|
|
15
18
|
|
|
16
19
|
export default function ViewList( {
|
|
17
20
|
view,
|
|
@@ -19,6 +22,7 @@ export default function ViewList( {
|
|
|
19
22
|
data,
|
|
20
23
|
getItemId,
|
|
21
24
|
onSelectionChange,
|
|
25
|
+
onDetailsChange,
|
|
22
26
|
selection,
|
|
23
27
|
deferredRendering,
|
|
24
28
|
} ) {
|
|
@@ -46,39 +50,38 @@ export default function ViewList( {
|
|
|
46
50
|
};
|
|
47
51
|
|
|
48
52
|
return (
|
|
49
|
-
<ul className="dataviews-list
|
|
50
|
-
{ usedData.map( ( item
|
|
53
|
+
<ul className="dataviews-view-list">
|
|
54
|
+
{ usedData.map( ( item ) => {
|
|
51
55
|
return (
|
|
52
|
-
<li
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
<HStack>
|
|
56
|
+
<li
|
|
57
|
+
key={ getItemId( item ) }
|
|
58
|
+
className={ classNames( {
|
|
59
|
+
'is-selected': selection.includes( item.id ),
|
|
60
|
+
} ) }
|
|
61
|
+
>
|
|
62
|
+
<HStack className="dataviews-view-list__item-wrapper">
|
|
63
|
+
<div
|
|
64
|
+
role="button"
|
|
65
|
+
tabIndex={ 0 }
|
|
66
|
+
aria-pressed={ selection.includes( item.id ) }
|
|
67
|
+
onKeyDown={ onEnter( item ) }
|
|
68
|
+
className="dataviews-view-list__item"
|
|
69
|
+
onClick={ () => onSelectionChange( [ item ] ) }
|
|
70
|
+
>
|
|
71
|
+
<HStack spacing={ 3 } justify="start">
|
|
72
|
+
<div className="dataviews-view-list__media-wrapper">
|
|
73
|
+
{ mediaField?.render( { item } ) || (
|
|
74
|
+
<div className="dataviews-view-list__media-placeholder"></div>
|
|
75
|
+
) }
|
|
76
|
+
</div>
|
|
74
77
|
<VStack spacing={ 1 }>
|
|
75
78
|
{ primaryField?.render( { item } ) }
|
|
76
|
-
<div className="dataviews-
|
|
79
|
+
<div className="dataviews-view-list__fields">
|
|
77
80
|
{ visibleFields.map( ( field ) => {
|
|
78
81
|
return (
|
|
79
82
|
<span
|
|
80
83
|
key={ field.id }
|
|
81
|
-
className="dataviews-
|
|
84
|
+
className="dataviews-view-list__field"
|
|
82
85
|
>
|
|
83
86
|
{ field.render( {
|
|
84
87
|
item,
|
|
@@ -89,8 +92,19 @@ export default function ViewList( {
|
|
|
89
92
|
</div>
|
|
90
93
|
</VStack>
|
|
91
94
|
</HStack>
|
|
92
|
-
</
|
|
93
|
-
|
|
95
|
+
</div>
|
|
96
|
+
{ onDetailsChange && (
|
|
97
|
+
<Button
|
|
98
|
+
className="dataviews-view-list__details-button"
|
|
99
|
+
onClick={ () =>
|
|
100
|
+
onDetailsChange( [ item ] )
|
|
101
|
+
}
|
|
102
|
+
icon={ info }
|
|
103
|
+
label={ __( 'View details' ) }
|
|
104
|
+
size="compact"
|
|
105
|
+
/>
|
|
106
|
+
) }
|
|
107
|
+
</HStack>
|
|
94
108
|
</li>
|
|
95
109
|
);
|
|
96
110
|
} ) }
|