@wordpress/dataviews 1.1.0 → 2.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 +27 -5
- package/README.md +33 -30
- package/build/add-filter.js +30 -22
- package/build/add-filter.js.map +1 -1
- package/build/bulk-actions-toolbar.js +187 -0
- package/build/bulk-actions-toolbar.js.map +1 -0
- package/build/bulk-actions.js +75 -62
- package/build/bulk-actions.js.map +1 -1
- package/build/constants.js +17 -10
- package/build/constants.js.map +1 -1
- package/build/dataviews.js +64 -50
- package/build/dataviews.js.map +1 -1
- package/build/filter-and-sort-data-view.js +2 -2
- package/build/filter-and-sort-data-view.js.map +1 -1
- package/build/filter-summary.js +106 -96
- package/build/filter-summary.js.map +1 -1
- package/build/filters.js +18 -17
- package/build/filters.js.map +1 -1
- package/build/index.js.map +1 -1
- package/build/item-actions.js +101 -69
- package/build/item-actions.js.map +1 -1
- package/build/layouts.js.map +1 -1
- package/build/lock-unlock.js.map +1 -1
- package/build/normalize-fields.js.map +1 -1
- package/build/pagination.js +66 -57
- package/build/pagination.js.map +1 -1
- package/build/reset-filters.js +9 -4
- package/build/reset-filters.js.map +1 -1
- package/build/search-widget.js +108 -89
- package/build/search-widget.js.map +1 -1
- package/build/search.js +13 -6
- package/build/search.js.map +1 -1
- package/build/single-selection-checkbox.js +6 -2
- package/build/single-selection-checkbox.js.map +1 -1
- package/build/types.js.map +1 -1
- package/build/utils.js +3 -15
- package/build/utils.js.map +1 -1
- package/build/view-actions.js +168 -120
- package/build/view-actions.js.map +1 -1
- package/build/view-grid.js +119 -106
- package/build/view-grid.js.map +1 -1
- package/build/view-list.js +217 -83
- package/build/view-list.js.map +1 -1
- package/build/view-table.js +227 -199
- package/build/view-table.js.map +1 -1
- package/build-module/add-filter.js +30 -22
- package/build-module/add-filter.js.map +1 -1
- package/build-module/bulk-actions-toolbar.js +182 -0
- package/build-module/bulk-actions-toolbar.js.map +1 -0
- package/build-module/bulk-actions.js +77 -62
- package/build-module/bulk-actions.js.map +1 -1
- package/build-module/constants.js +16 -9
- package/build-module/constants.js.map +1 -1
- package/build-module/dataviews.js +65 -50
- package/build-module/dataviews.js.map +1 -1
- package/build-module/filter-and-sort-data-view.js +2 -2
- package/build-module/filter-and-sort-data-view.js.map +1 -1
- package/build-module/filter-summary.js +107 -97
- package/build-module/filter-summary.js.map +1 -1
- package/build-module/filters.js +18 -17
- package/build-module/filters.js.map +1 -1
- package/build-module/index.js.map +1 -1
- package/build-module/item-actions.js +102 -71
- package/build-module/item-actions.js.map +1 -1
- package/build-module/layouts.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 +67 -57
- package/build-module/pagination.js.map +1 -1
- package/build-module/reset-filters.js +9 -4
- package/build-module/reset-filters.js.map +1 -1
- package/build-module/search-widget.js +109 -89
- package/build-module/search-widget.js.map +1 -1
- package/build-module/search.js +13 -6
- package/build-module/search.js.map +1 -1
- package/build-module/single-selection-checkbox.js +6 -2
- package/build-module/single-selection-checkbox.js.map +1 -1
- package/build-module/types.js.map +1 -1
- package/build-module/utils.js +2 -13
- package/build-module/utils.js.map +1 -1
- package/build-module/view-actions.js +170 -121
- package/build-module/view-actions.js.map +1 -1
- package/build-module/view-grid.js +121 -106
- package/build-module/view-grid.js.map +1 -1
- package/build-module/view-list.js +219 -85
- package/build-module/view-list.js.map +1 -1
- package/build-module/view-table.js +230 -201
- package/build-module/view-table.js.map +1 -1
- package/build-style/style-rtl.css +168 -44
- package/build-style/style.css +168 -44
- package/build-types/add-filter.d.ts +11 -0
- package/build-types/add-filter.d.ts.map +1 -0
- package/build-types/bulk-actions-toolbar.d.ts +12 -0
- package/build-types/bulk-actions-toolbar.d.ts.map +1 -0
- package/build-types/bulk-actions.d.ts +14 -0
- package/build-types/bulk-actions.d.ts.map +1 -0
- package/build-types/constants.d.ts +19 -32
- package/build-types/constants.d.ts.map +1 -1
- package/build-types/dataviews.d.ts +22 -0
- package/build-types/dataviews.d.ts.map +1 -0
- package/build-types/filter-and-sort-data-view.d.ts +3 -3
- package/build-types/filter-and-sort-data-view.d.ts.map +1 -1
- package/build-types/filter-summary.d.ts +14 -0
- package/build-types/filter-summary.d.ts.map +1 -0
- package/build-types/filters.d.ts +13 -0
- package/build-types/filters.d.ts.map +1 -0
- package/build-types/index.d.ts +4 -0
- package/build-types/index.d.ts.map +1 -0
- package/build-types/item-actions.d.ts +35 -0
- package/build-types/item-actions.d.ts.map +1 -0
- package/build-types/layouts.d.ts +24 -0
- package/build-types/layouts.d.ts.map +1 -0
- package/build-types/lock-unlock.d.ts +2 -0
- package/build-types/lock-unlock.d.ts.map +1 -0
- package/build-types/normalize-fields.d.ts +2 -2
- package/build-types/normalize-fields.d.ts.map +1 -1
- package/build-types/pagination.d.ts +16 -0
- package/build-types/pagination.d.ts.map +1 -0
- package/build-types/reset-filters.d.ts +13 -0
- package/build-types/reset-filters.d.ts.map +1 -0
- package/build-types/search-widget.d.ts +10 -0
- package/build-types/search-widget.d.ts.map +1 -0
- package/build-types/search.d.ts +13 -0
- package/build-types/search.d.ts.map +1 -0
- package/build-types/single-selection-checkbox.d.ts +17 -0
- package/build-types/single-selection-checkbox.d.ts.map +1 -0
- package/build-types/stories/fixtures.d.ts +114 -0
- package/build-types/stories/fixtures.d.ts.map +1 -0
- package/build-types/stories/index.story.d.ts +15 -0
- package/build-types/stories/index.story.d.ts.map +1 -0
- package/build-types/types.d.ts +221 -21
- package/build-types/types.d.ts.map +1 -1
- package/build-types/utils.d.ts +3 -0
- package/build-types/utils.d.ts.map +1 -0
- package/build-types/view-actions.d.ts +12 -0
- package/build-types/view-actions.d.ts.map +1 -0
- package/build-types/view-grid.d.ts +4 -0
- package/build-types/view-grid.d.ts.map +1 -0
- package/build-types/view-list.d.ts +4 -0
- package/build-types/view-list.d.ts.map +1 -0
- package/build-types/view-table.d.ts +5 -0
- package/build-types/view-table.d.ts.map +1 -0
- package/package.json +12 -13
- package/src/{add-filter.js → add-filter.tsx} +17 -1
- package/src/bulk-actions-toolbar.tsx +272 -0
- package/src/{bulk-actions.js → bulk-actions.tsx} +77 -17
- package/src/constants.ts +12 -5
- package/src/{dataviews.js → dataviews.tsx} +54 -14
- package/src/filter-and-sort-data-view.ts +13 -8
- package/src/{filter-summary.js → filter-summary.tsx} +38 -9
- package/src/{filters.js → filters.tsx} +18 -6
- package/src/{item-actions.js → item-actions.tsx} +119 -30
- package/src/normalize-fields.ts +4 -2
- package/src/{pagination.js → pagination.tsx} +29 -8
- package/src/{reset-filters.js → reset-filters.tsx} +17 -2
- package/src/{search-widget.js → search-widget.tsx} +27 -7
- package/src/{search.js → search.tsx} +22 -5
- package/src/{single-selection-checkbox.js → single-selection-checkbox.tsx} +17 -2
- package/src/style.scss +166 -43
- package/src/types.ts +286 -21
- package/src/{utils.js → utils.ts} +5 -13
- package/src/{view-actions.js → view-actions.tsx} +105 -49
- package/src/{view-grid.js → view-grid.tsx} +31 -18
- package/src/view-list.tsx +410 -0
- package/src/{view-table.js → view-table.tsx} +99 -40
- package/tsconfig.json +3 -4
- package/tsconfig.tsbuildinfo +1 -1
- package/build/dropdown-menu-helper.js +0 -71
- package/build/dropdown-menu-helper.js.map +0 -1
- package/build-module/dropdown-menu-helper.js +0 -64
- package/build-module/dropdown-menu-helper.js.map +0 -1
- package/src/dropdown-menu-helper.js +0 -61
- package/src/view-list.js +0 -207
- /package/src/{index.js → index.ts} +0 -0
- /package/src/{layouts.js → layouts.ts} +0 -0
- /package/src/{lock-unlock.js → lock-unlock.ts} +0 -0
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { createElement } from "react";
|
|
2
1
|
/**
|
|
3
2
|
* External dependencies
|
|
4
3
|
*/
|
|
5
|
-
import
|
|
6
|
-
|
|
4
|
+
import clsx from 'clsx';
|
|
7
5
|
/**
|
|
8
6
|
* WordPress dependencies
|
|
9
7
|
*/
|
|
@@ -19,8 +17,11 @@ import SingleSelectionCheckbox from './single-selection-checkbox';
|
|
|
19
17
|
import { unlock } from './lock-unlock';
|
|
20
18
|
import ItemActions from './item-actions';
|
|
21
19
|
import { sanitizeOperators } from './utils';
|
|
22
|
-
import { SORTING_DIRECTIONS } from './constants';
|
|
20
|
+
import { SORTING_DIRECTIONS, sortArrows, sortLabels, sortValues } from './constants';
|
|
23
21
|
import { useSomeItemHasAPossibleBulkAction, useHasAPossibleBulkAction } from './bulk-actions';
|
|
22
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
23
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
24
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
24
25
|
const {
|
|
25
26
|
DropdownMenuV2: DropdownMenu,
|
|
26
27
|
DropdownMenuGroupV2: DropdownMenuGroup,
|
|
@@ -32,15 +33,11 @@ const {
|
|
|
32
33
|
function WithDropDownMenuSeparators({
|
|
33
34
|
children
|
|
34
35
|
}) {
|
|
35
|
-
return Children.toArray(children).filter(Boolean).map((child, i) =>
|
|
36
|
-
|
|
37
|
-
}, i
|
|
36
|
+
return Children.toArray(children).filter(Boolean).map((child, i) => /*#__PURE__*/_jsxs(Fragment, {
|
|
37
|
+
children: [i > 0 && /*#__PURE__*/_jsx(DropdownMenuSeparator, {}), child]
|
|
38
|
+
}, i));
|
|
38
39
|
}
|
|
39
|
-
const
|
|
40
|
-
asc: '↑',
|
|
41
|
-
desc: '↓'
|
|
42
|
-
};
|
|
43
|
-
const HeaderMenu = forwardRef(function HeaderMenu({
|
|
40
|
+
const _HeaderMenu = forwardRef(function HeaderMenu({
|
|
44
41
|
field,
|
|
45
42
|
view,
|
|
46
43
|
onChangeView,
|
|
@@ -59,72 +56,91 @@ const HeaderMenu = forwardRef(function HeaderMenu({
|
|
|
59
56
|
if (!isSortable && !isHidable && !canAddFilter) {
|
|
60
57
|
return field.header;
|
|
61
58
|
}
|
|
62
|
-
return
|
|
59
|
+
return /*#__PURE__*/_jsx(DropdownMenu, {
|
|
63
60
|
align: "start",
|
|
64
|
-
trigger:
|
|
61
|
+
trigger: /*#__PURE__*/_jsxs(Button, {
|
|
65
62
|
size: "compact",
|
|
66
63
|
className: "dataviews-view-table-header-button",
|
|
67
64
|
ref: ref,
|
|
68
|
-
variant: "tertiary"
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
65
|
+
variant: "tertiary",
|
|
66
|
+
children: [field.header, view.sort && isSorted && /*#__PURE__*/_jsx("span", {
|
|
67
|
+
"aria-hidden": "true",
|
|
68
|
+
children: sortArrows[view.sort.direction]
|
|
69
|
+
})]
|
|
70
|
+
}),
|
|
72
71
|
style: {
|
|
73
72
|
minWidth: '240px'
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
})
|
|
125
|
-
|
|
126
|
-
|
|
73
|
+
},
|
|
74
|
+
children: /*#__PURE__*/_jsxs(WithDropDownMenuSeparators, {
|
|
75
|
+
children: [isSortable && /*#__PURE__*/_jsx(DropdownMenuGroup, {
|
|
76
|
+
children: SORTING_DIRECTIONS.map(direction => {
|
|
77
|
+
const isChecked = view.sort && isSorted && view.sort.direction === direction;
|
|
78
|
+
const value = `${field.id}-${direction}`;
|
|
79
|
+
return /*#__PURE__*/_jsx(DropdownMenuRadioItem, {
|
|
80
|
+
// All sorting radio items share the same name, so that
|
|
81
|
+
// selecting a sorting option automatically deselects the
|
|
82
|
+
// previously selected one, even if it is displayed in
|
|
83
|
+
// another submenu. The field and direction are passed via
|
|
84
|
+
// the `value` prop.
|
|
85
|
+
name: "view-table-sorting",
|
|
86
|
+
value: value,
|
|
87
|
+
checked: isChecked,
|
|
88
|
+
onChange: () => {
|
|
89
|
+
onChangeView({
|
|
90
|
+
...view,
|
|
91
|
+
sort: {
|
|
92
|
+
field: field.id,
|
|
93
|
+
direction
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
},
|
|
97
|
+
children: /*#__PURE__*/_jsx(DropdownMenuItemLabel, {
|
|
98
|
+
children: sortLabels[direction]
|
|
99
|
+
})
|
|
100
|
+
}, value);
|
|
101
|
+
})
|
|
102
|
+
}), canAddFilter && /*#__PURE__*/_jsx(DropdownMenuGroup, {
|
|
103
|
+
children: /*#__PURE__*/_jsx(DropdownMenuItem, {
|
|
104
|
+
prefix: /*#__PURE__*/_jsx(Icon, {
|
|
105
|
+
icon: funnel
|
|
106
|
+
}),
|
|
107
|
+
onClick: () => {
|
|
108
|
+
setOpenedFilter(field.id);
|
|
109
|
+
onChangeView({
|
|
110
|
+
...view,
|
|
111
|
+
page: 1,
|
|
112
|
+
filters: [...(view.filters || []), {
|
|
113
|
+
field: field.id,
|
|
114
|
+
value: undefined,
|
|
115
|
+
operator: operators[0]
|
|
116
|
+
}]
|
|
117
|
+
});
|
|
118
|
+
},
|
|
119
|
+
children: /*#__PURE__*/_jsx(DropdownMenuItemLabel, {
|
|
120
|
+
children: __('Add filter')
|
|
121
|
+
})
|
|
122
|
+
})
|
|
123
|
+
}), isHidable && /*#__PURE__*/_jsx(DropdownMenuItem, {
|
|
124
|
+
prefix: /*#__PURE__*/_jsx(Icon, {
|
|
125
|
+
icon: unseen
|
|
126
|
+
}),
|
|
127
|
+
onClick: () => {
|
|
128
|
+
onHide(field);
|
|
129
|
+
onChangeView({
|
|
130
|
+
...view,
|
|
131
|
+
hiddenFields: view.hiddenFields.concat(field.id)
|
|
132
|
+
});
|
|
133
|
+
},
|
|
134
|
+
children: /*#__PURE__*/_jsx(DropdownMenuItemLabel, {
|
|
135
|
+
children: __('Hide')
|
|
136
|
+
})
|
|
137
|
+
})]
|
|
138
|
+
})
|
|
139
|
+
});
|
|
127
140
|
});
|
|
141
|
+
|
|
142
|
+
// @ts-expect-error Lift the `Item` type argument through the forwardRef.
|
|
143
|
+
const HeaderMenu = _HeaderMenu;
|
|
128
144
|
function BulkSelectionCheckbox({
|
|
129
145
|
selection,
|
|
130
146
|
onSelectionChange,
|
|
@@ -133,15 +149,15 @@ function BulkSelectionCheckbox({
|
|
|
133
149
|
}) {
|
|
134
150
|
const selectableItems = useMemo(() => {
|
|
135
151
|
return data.filter(item => {
|
|
136
|
-
return actions.some(action => action.supportsBulk && action.isEligible(item));
|
|
152
|
+
return actions.some(action => action.supportsBulk && (!action.isEligible || action.isEligible(item)));
|
|
137
153
|
});
|
|
138
154
|
}, [data, actions]);
|
|
139
155
|
const areAllSelected = selection.length === selectableItems.length;
|
|
140
|
-
return
|
|
156
|
+
return /*#__PURE__*/_jsx(CheckboxControl, {
|
|
141
157
|
className: "dataviews-view-table-selection-checkbox",
|
|
142
158
|
__nextHasNoMarginBottom: true,
|
|
143
159
|
checked: areAllSelected,
|
|
144
|
-
indeterminate: !areAllSelected && selection.length,
|
|
160
|
+
indeterminate: !areAllSelected && !!selection.length,
|
|
145
161
|
onChange: () => {
|
|
146
162
|
if (areAllSelected) {
|
|
147
163
|
onSelectionChange([]);
|
|
@@ -178,8 +194,8 @@ function TableRow({
|
|
|
178
194
|
// `onClick` and can be used to exclude touchscreen devices from certain
|
|
179
195
|
// behaviours.
|
|
180
196
|
const isTouchDevice = useRef(false);
|
|
181
|
-
return
|
|
182
|
-
className:
|
|
197
|
+
return /*#__PURE__*/_jsxs("tr", {
|
|
198
|
+
className: clsx('dataviews-view-table__row', {
|
|
183
199
|
'is-selected': hasPossibleBulkAction && isSelected,
|
|
184
200
|
'is-hovered': isHovered,
|
|
185
201
|
'has-bulk-actions': hasPossibleBulkAction
|
|
@@ -190,7 +206,7 @@ function TableRow({
|
|
|
190
206
|
isTouchDevice.current = true;
|
|
191
207
|
},
|
|
192
208
|
onClick: () => {
|
|
193
|
-
if (!isTouchDevice.current && document.getSelection()
|
|
209
|
+
if (!isTouchDevice.current && document.getSelection()?.type !== 'Range') {
|
|
194
210
|
if (!isSelected) {
|
|
195
211
|
onSelectionChange(data.filter(_item => {
|
|
196
212
|
const itemId = getItemId?.(_item);
|
|
@@ -203,64 +219,68 @@ function TableRow({
|
|
|
203
219
|
}));
|
|
204
220
|
}
|
|
205
221
|
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
222
|
+
},
|
|
223
|
+
children: [hasBulkActions && /*#__PURE__*/_jsx("td", {
|
|
224
|
+
className: "dataviews-view-table__checkbox-column",
|
|
225
|
+
style: {
|
|
226
|
+
width: '1%'
|
|
227
|
+
},
|
|
228
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
229
|
+
className: "dataviews-view-table__cell-content-wrapper",
|
|
230
|
+
children: /*#__PURE__*/_jsx(SingleSelectionCheckbox, {
|
|
231
|
+
item: item,
|
|
232
|
+
selection: selection,
|
|
233
|
+
onSelectionChange: onSelectionChange,
|
|
234
|
+
getItemId: getItemId,
|
|
235
|
+
data: data,
|
|
236
|
+
primaryField: primaryField,
|
|
237
|
+
disabled: !hasPossibleBulkAction
|
|
238
|
+
})
|
|
239
|
+
})
|
|
240
|
+
}), visibleFields.map(field => /*#__PURE__*/_jsx("td", {
|
|
241
|
+
style: {
|
|
242
|
+
width: field.width || undefined,
|
|
243
|
+
minWidth: field.minWidth || undefined,
|
|
244
|
+
maxWidth: field.maxWidth || undefined
|
|
245
|
+
},
|
|
246
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
247
|
+
className: clsx('dataviews-view-table__cell-content-wrapper', {
|
|
248
|
+
'dataviews-view-table__primary-field': primaryField?.id === field.id
|
|
249
|
+
}),
|
|
250
|
+
children: field.render({
|
|
251
|
+
item
|
|
252
|
+
})
|
|
253
|
+
})
|
|
254
|
+
}, field.id)), !!actions?.length &&
|
|
255
|
+
/*#__PURE__*/
|
|
256
|
+
// Disable reason: we are not making the element interactive,
|
|
257
|
+
// but preventing any click events from bubbling up to the
|
|
258
|
+
// table row. This allows us to add a click handler to the row
|
|
259
|
+
// itself (to toggle row selection) without erroneously
|
|
260
|
+
// intercepting click events from ItemActions.
|
|
261
|
+
/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */
|
|
262
|
+
_jsx("td", {
|
|
263
|
+
className: "dataviews-view-table__actions-column",
|
|
264
|
+
onClick: e => e.stopPropagation(),
|
|
265
|
+
children: /*#__PURE__*/_jsx(ItemActions, {
|
|
266
|
+
item: item,
|
|
267
|
+
actions: actions
|
|
268
|
+
})
|
|
233
269
|
})
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
})))), !!actions?.length &&
|
|
237
|
-
// Disable reason: we are not making the element interactive,
|
|
238
|
-
// but preventing any click events from bubbling up to the
|
|
239
|
-
// table row. This allows us to add a click handler to the row
|
|
240
|
-
// itself (to toggle row selection) without erroneously
|
|
241
|
-
// intercepting click events from ItemActions.
|
|
242
|
-
|
|
243
|
-
/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */
|
|
244
|
-
createElement("td", {
|
|
245
|
-
className: "dataviews-view-table__actions-column",
|
|
246
|
-
onClick: e => e.stopPropagation()
|
|
247
|
-
}, createElement(ItemActions, {
|
|
248
|
-
item: item,
|
|
249
|
-
actions: actions
|
|
250
|
-
}))
|
|
251
|
-
/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */);
|
|
270
|
+
/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */]
|
|
271
|
+
});
|
|
252
272
|
}
|
|
253
273
|
function ViewTable({
|
|
254
|
-
view,
|
|
255
|
-
onChangeView,
|
|
256
|
-
fields,
|
|
257
274
|
actions,
|
|
258
275
|
data,
|
|
276
|
+
fields,
|
|
259
277
|
getItemId,
|
|
260
278
|
isLoading = false,
|
|
261
|
-
|
|
279
|
+
onChangeView,
|
|
262
280
|
onSelectionChange,
|
|
263
|
-
|
|
281
|
+
selection,
|
|
282
|
+
setOpenedFilter,
|
|
283
|
+
view
|
|
264
284
|
}) {
|
|
265
285
|
const headerMenuRefs = useRef(new Map());
|
|
266
286
|
const headerMenuToFocusRef = useRef();
|
|
@@ -279,89 +299,98 @@ function ViewTable({
|
|
|
279
299
|
// Clearing out the focus directive is necessary to make sure
|
|
280
300
|
// future renders don't cause unexpected focus jumps.
|
|
281
301
|
headerMenuToFocusRef.current = nextHeaderMenuToFocus;
|
|
282
|
-
setNextHeaderMenuToFocus();
|
|
302
|
+
setNextHeaderMenuToFocus(undefined);
|
|
283
303
|
return;
|
|
284
304
|
}
|
|
285
305
|
const onHide = field => {
|
|
286
306
|
const hidden = headerMenuRefs.current.get(field.id);
|
|
287
|
-
const fallback = headerMenuRefs.current.get(hidden.fallback);
|
|
307
|
+
const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : undefined;
|
|
288
308
|
setNextHeaderMenuToFocus(fallback?.node);
|
|
289
309
|
};
|
|
290
310
|
const visibleFields = fields.filter(field => !view.hiddenFields.includes(field.id) && ![view.layout.mediaField].includes(field.id));
|
|
291
311
|
const hasData = !!data?.length;
|
|
292
|
-
const sortValues = {
|
|
293
|
-
asc: 'ascending',
|
|
294
|
-
desc: 'descending'
|
|
295
|
-
};
|
|
296
312
|
const primaryField = fields.find(field => field.id === view.layout.primaryField);
|
|
297
|
-
return
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
313
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
314
|
+
children: [/*#__PURE__*/_jsxs("table", {
|
|
315
|
+
className: "dataviews-view-table",
|
|
316
|
+
"aria-busy": isLoading,
|
|
317
|
+
"aria-describedby": tableNoticeId,
|
|
318
|
+
children: [/*#__PURE__*/_jsx("thead", {
|
|
319
|
+
children: /*#__PURE__*/_jsxs("tr", {
|
|
320
|
+
className: "dataviews-view-table__row",
|
|
321
|
+
children: [hasBulkActions && /*#__PURE__*/_jsx("th", {
|
|
322
|
+
className: "dataviews-view-table__checkbox-column",
|
|
323
|
+
style: {
|
|
324
|
+
width: '1%'
|
|
325
|
+
},
|
|
326
|
+
"data-field-id": "selection",
|
|
327
|
+
scope: "col",
|
|
328
|
+
children: /*#__PURE__*/_jsx(BulkSelectionCheckbox, {
|
|
329
|
+
selection: selection,
|
|
330
|
+
onSelectionChange: onSelectionChange,
|
|
331
|
+
data: data,
|
|
332
|
+
actions: actions
|
|
333
|
+
})
|
|
334
|
+
}), visibleFields.map((field, index) => /*#__PURE__*/_jsx("th", {
|
|
335
|
+
style: {
|
|
336
|
+
width: field.width || undefined,
|
|
337
|
+
minWidth: field.minWidth || undefined,
|
|
338
|
+
maxWidth: field.maxWidth || undefined
|
|
339
|
+
},
|
|
340
|
+
"data-field-id": field.id,
|
|
341
|
+
"aria-sort": view.sort?.field === field.id ? sortValues[view.sort.direction] : undefined,
|
|
342
|
+
scope: "col",
|
|
343
|
+
children: /*#__PURE__*/_jsx(HeaderMenu, {
|
|
344
|
+
ref: node => {
|
|
345
|
+
if (node) {
|
|
346
|
+
headerMenuRefs.current.set(field.id, {
|
|
347
|
+
node,
|
|
348
|
+
fallback: visibleFields[index > 0 ? index - 1 : 1]?.id
|
|
349
|
+
});
|
|
350
|
+
} else {
|
|
351
|
+
headerMenuRefs.current.delete(field.id);
|
|
352
|
+
}
|
|
353
|
+
},
|
|
354
|
+
field: field,
|
|
355
|
+
view: view,
|
|
356
|
+
onChangeView: onChangeView,
|
|
357
|
+
onHide: onHide,
|
|
358
|
+
setOpenedFilter: setOpenedFilter
|
|
359
|
+
})
|
|
360
|
+
}, field.id)), !!actions?.length && /*#__PURE__*/_jsx("th", {
|
|
361
|
+
"data-field-id": "actions",
|
|
362
|
+
className: "dataviews-view-table__actions-column",
|
|
363
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
364
|
+
className: "dataviews-view-table-header",
|
|
365
|
+
children: __('Actions')
|
|
366
|
+
})
|
|
367
|
+
})]
|
|
368
|
+
})
|
|
369
|
+
}), /*#__PURE__*/_jsx("tbody", {
|
|
370
|
+
children: hasData && data.map((item, index) => /*#__PURE__*/_jsx(TableRow, {
|
|
371
|
+
item: item,
|
|
372
|
+
hasBulkActions: hasBulkActions,
|
|
373
|
+
actions: actions,
|
|
374
|
+
id: getItemId(item) || index.toString(),
|
|
375
|
+
visibleFields: visibleFields,
|
|
376
|
+
primaryField: primaryField,
|
|
377
|
+
selection: selection,
|
|
378
|
+
getItemId: getItemId,
|
|
379
|
+
onSelectionChange: onSelectionChange,
|
|
380
|
+
data: data
|
|
381
|
+
}, getItemId(item)))
|
|
382
|
+
})]
|
|
383
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
384
|
+
className: clsx({
|
|
385
|
+
'dataviews-loading': isLoading,
|
|
386
|
+
'dataviews-no-results': !hasData && !isLoading
|
|
387
|
+
}),
|
|
388
|
+
id: tableNoticeId,
|
|
389
|
+
children: !hasData && /*#__PURE__*/_jsx("p", {
|
|
390
|
+
children: isLoading ? /*#__PURE__*/_jsx(Spinner, {}) : __('No results')
|
|
391
|
+
})
|
|
392
|
+
})]
|
|
393
|
+
});
|
|
365
394
|
}
|
|
366
395
|
export default ViewTable;
|
|
367
396
|
//# sourceMappingURL=view-table.js.map
|