@wordpress/dataviews 1.2.0 → 2.0.1
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 +16 -0
- 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 +74 -69
- package/build/bulk-actions-toolbar.js.map +1 -1
- package/build/bulk-actions.js +69 -56
- 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 +63 -56
- package/build/dataviews.js.map +1 -1
- package/build/filter-summary.js +105 -95
- 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 +79 -65
- package/build/item-actions.js.map +1 -1
- package/build/layouts.js.map +1 -1
- package/build/pagination.js +60 -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 +2 -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 +113 -99
- package/build/view-grid.js.map +1 -1
- package/build/view-list.js +154 -132
- package/build/view-list.js.map +1 -1
- package/build/view-table.js +220 -192
- 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 +76 -69
- package/build-module/bulk-actions-toolbar.js.map +1 -1
- package/build-module/bulk-actions.js +71 -56
- 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 +64 -56
- package/build-module/dataviews.js.map +1 -1
- package/build-module/filter-summary.js +106 -96
- 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 +81 -65
- package/build-module/item-actions.js.map +1 -1
- package/build-module/layouts.js.map +1 -1
- package/build-module/pagination.js +61 -58
- 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 +2 -3
- 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 +115 -99
- package/build-module/view-grid.js.map +1 -1
- package/build-module/view-list.js +155 -132
- package/build-module/view-list.js.map +1 -1
- package/build-module/view-table.js +223 -194
- package/build-module/view-table.js.map +1 -1
- package/build-style/style-rtl.css +115 -22
- package/build-style/style.css +115 -22
- package/build-types/add-filter.d.ts +9 -6
- package/build-types/add-filter.d.ts.map +1 -1
- package/build-types/bulk-actions-toolbar.d.ts +11 -7
- package/build-types/bulk-actions-toolbar.d.ts.map +1 -1
- package/build-types/bulk-actions.d.ts.map +1 -1
- package/build-types/constants.d.ts +19 -32
- package/build-types/constants.d.ts.map +1 -1
- package/build-types/dataviews.d.ts +21 -14
- package/build-types/dataviews.d.ts.map +1 -1
- package/build-types/filter-summary.d.ts +13 -5
- package/build-types/filter-summary.d.ts.map +1 -1
- package/build-types/filters.d.ts +11 -1
- package/build-types/filters.d.ts.map +1 -1
- package/build-types/index.d.ts +3 -3
- package/build-types/index.d.ts.map +1 -1
- package/build-types/item-actions.d.ts +5 -7
- package/build-types/item-actions.d.ts.map +1 -1
- package/build-types/layouts.d.ts +8 -4
- package/build-types/layouts.d.ts.map +1 -1
- package/build-types/reset-filters.d.ts +12 -5
- package/build-types/reset-filters.d.ts.map +1 -1
- package/build-types/search-widget.d.ts +9 -1
- package/build-types/search-widget.d.ts.map +1 -1
- package/build-types/search.d.ts +11 -1
- package/build-types/search.d.ts.map +1 -1
- package/build-types/types.d.ts +78 -10
- package/build-types/types.d.ts.map +1 -1
- package/build-types/utils.d.ts +2 -1
- package/build-types/utils.d.ts.map +1 -1
- package/build-types/view-actions.d.ts +10 -1
- package/build-types/view-actions.d.ts.map +1 -1
- package/build-types/view-grid.d.ts +1 -12
- package/build-types/view-grid.d.ts.map +1 -1
- package/build-types/view-list.d.ts +2 -14
- package/build-types/view-list.d.ts.map +1 -1
- package/build-types/view-table.d.ts +3 -12
- package/build-types/view-table.d.ts.map +1 -1
- package/package.json +11 -12
- package/src/{add-filter.js → add-filter.tsx} +17 -1
- package/src/{bulk-actions-toolbar.js → bulk-actions-toolbar.tsx} +68 -40
- package/src/bulk-actions.tsx +5 -1
- package/src/constants.ts +12 -5
- package/src/{dataviews.js → dataviews.tsx} +41 -12
- package/src/{filter-summary.js → filter-summary.tsx} +35 -6
- package/src/{filters.js → filters.tsx} +18 -6
- package/src/item-actions.tsx +21 -15
- package/src/pagination.tsx +1 -1
- 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/style.scss +102 -25
- package/src/types.ts +105 -10
- package/src/{utils.js → utils.ts} +5 -13
- package/src/{view-actions.js → view-actions.tsx} +105 -49
- package/src/view-grid.tsx +4 -20
- package/src/view-list.tsx +13 -23
- package/src/{view-table.js → view-table.tsx} +91 -32
- package/tsconfig.json +0 -3
- 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/build-types/dropdown-menu-helper.d.ts +0 -6
- package/build-types/dropdown-menu-helper.d.ts.map +0 -1
- package/src/dropdown-menu-helper.js +0 -61
- /package/src/{index.js → index.ts} +0 -0
- /package/src/{layouts.js → layouts.ts} +0 -0
package/build-types/types.d.ts
CHANGED
|
@@ -6,9 +6,10 @@ export type SortDirection = 'asc' | 'desc';
|
|
|
6
6
|
/**
|
|
7
7
|
* Generic option type.
|
|
8
8
|
*/
|
|
9
|
-
interface Option<Value extends any = any> {
|
|
9
|
+
export interface Option<Value extends any = any> {
|
|
10
10
|
value: Value;
|
|
11
11
|
label: string;
|
|
12
|
+
description?: string;
|
|
12
13
|
}
|
|
13
14
|
interface FilterByConfig {
|
|
14
15
|
/**
|
|
@@ -23,7 +24,7 @@ interface FilterByConfig {
|
|
|
23
24
|
*/
|
|
24
25
|
isPrimary?: boolean;
|
|
25
26
|
}
|
|
26
|
-
type Operator = 'is' | 'isNot' | 'isAny' | 'isNone' | 'isAll' | 'isNotAll';
|
|
27
|
+
export type Operator = 'is' | 'isNot' | 'isAny' | 'isNone' | 'isAll' | 'isNotAll';
|
|
27
28
|
export type AnyItem = Record<string, any>;
|
|
28
29
|
/**
|
|
29
30
|
* A dataview field for a specific property of a data type.
|
|
@@ -106,6 +107,36 @@ export interface Filter {
|
|
|
106
107
|
*/
|
|
107
108
|
value: any;
|
|
108
109
|
}
|
|
110
|
+
export interface NormalizedFilter {
|
|
111
|
+
/**
|
|
112
|
+
* The field to filter by.
|
|
113
|
+
*/
|
|
114
|
+
field: string;
|
|
115
|
+
/**
|
|
116
|
+
* The field name.
|
|
117
|
+
*/
|
|
118
|
+
name: string;
|
|
119
|
+
/**
|
|
120
|
+
* The list of options to pick from when using the field as a filter.
|
|
121
|
+
*/
|
|
122
|
+
elements: Option[];
|
|
123
|
+
/**
|
|
124
|
+
* Is a single selection filter.
|
|
125
|
+
*/
|
|
126
|
+
singleSelection: boolean;
|
|
127
|
+
/**
|
|
128
|
+
* The list of operators supported by the field.
|
|
129
|
+
*/
|
|
130
|
+
operators: Operator[];
|
|
131
|
+
/**
|
|
132
|
+
* Whether the filter is visible.
|
|
133
|
+
*/
|
|
134
|
+
isVisible: boolean;
|
|
135
|
+
/**
|
|
136
|
+
* Whether it is a primary filter.
|
|
137
|
+
*/
|
|
138
|
+
isPrimary: boolean;
|
|
139
|
+
}
|
|
109
140
|
interface ViewBase {
|
|
110
141
|
/**
|
|
111
142
|
* The layout of the view.
|
|
@@ -145,17 +176,30 @@ interface ViewBase {
|
|
|
145
176
|
*/
|
|
146
177
|
hiddenFields: string[];
|
|
147
178
|
}
|
|
179
|
+
export interface ViewTable extends ViewBase {
|
|
180
|
+
type: 'table';
|
|
181
|
+
layout: {
|
|
182
|
+
/**
|
|
183
|
+
* The field to use as the primary field.
|
|
184
|
+
*/
|
|
185
|
+
primaryField?: string;
|
|
186
|
+
/**
|
|
187
|
+
* The field to use as the media field.
|
|
188
|
+
*/
|
|
189
|
+
mediaField?: string;
|
|
190
|
+
};
|
|
191
|
+
}
|
|
148
192
|
export interface ViewList extends ViewBase {
|
|
149
193
|
type: 'list';
|
|
150
194
|
layout: {
|
|
151
195
|
/**
|
|
152
196
|
* The field to use as the primary field.
|
|
153
197
|
*/
|
|
154
|
-
primaryField
|
|
198
|
+
primaryField?: string;
|
|
155
199
|
/**
|
|
156
200
|
* The field to use as the media field.
|
|
157
201
|
*/
|
|
158
|
-
mediaField
|
|
202
|
+
mediaField?: string;
|
|
159
203
|
};
|
|
160
204
|
}
|
|
161
205
|
export interface ViewGrid extends ViewBase {
|
|
@@ -164,22 +208,22 @@ export interface ViewGrid extends ViewBase {
|
|
|
164
208
|
/**
|
|
165
209
|
* The field to use as the primary field.
|
|
166
210
|
*/
|
|
167
|
-
primaryField
|
|
211
|
+
primaryField?: string;
|
|
168
212
|
/**
|
|
169
213
|
* The field to use as the media field.
|
|
170
214
|
*/
|
|
171
|
-
mediaField
|
|
215
|
+
mediaField?: string;
|
|
172
216
|
/**
|
|
173
217
|
* The fields to use as columns.
|
|
174
218
|
*/
|
|
175
|
-
columnFields
|
|
219
|
+
columnFields?: string[];
|
|
176
220
|
/**
|
|
177
221
|
* The fields to use as badge fields.
|
|
178
222
|
*/
|
|
179
|
-
badgeFields
|
|
223
|
+
badgeFields?: string[];
|
|
180
224
|
};
|
|
181
225
|
}
|
|
182
|
-
export type View = ViewList | ViewGrid |
|
|
226
|
+
export type View = ViewList | ViewGrid | ViewTable;
|
|
183
227
|
interface ActionBase<Item extends AnyItem> {
|
|
184
228
|
/**
|
|
185
229
|
* The unique identifier of the action.
|
|
@@ -187,8 +231,10 @@ interface ActionBase<Item extends AnyItem> {
|
|
|
187
231
|
id: string;
|
|
188
232
|
/**
|
|
189
233
|
* The label of the action.
|
|
234
|
+
* In case we want to adjust the label based on the selected items,
|
|
235
|
+
* a function can be provided.
|
|
190
236
|
*/
|
|
191
|
-
label: string;
|
|
237
|
+
label: string | ((items: Item[]) => string);
|
|
192
238
|
/**
|
|
193
239
|
* The icon of the action. (Either a string or an SVG element)
|
|
194
240
|
* This should be IconType from the components package
|
|
@@ -250,5 +296,27 @@ export interface ActionButton<Item extends AnyItem> extends ActionBase<AnyItem>
|
|
|
250
296
|
callback: (items: Item[]) => void;
|
|
251
297
|
}
|
|
252
298
|
export type Action<Item extends AnyItem> = ActionModal<Item> | ActionButton<Item>;
|
|
299
|
+
export interface ViewBaseProps<Item extends AnyItem> {
|
|
300
|
+
actions: Action<Item>[];
|
|
301
|
+
data: Item[];
|
|
302
|
+
fields: NormalizedField<Item>[];
|
|
303
|
+
getItemId: (item: Item) => string;
|
|
304
|
+
isLoading?: boolean;
|
|
305
|
+
onChangeView(view: View): void;
|
|
306
|
+
onSelectionChange: (items: Item[]) => void;
|
|
307
|
+
selection: string[];
|
|
308
|
+
setOpenedFilter: (fieldId: string) => void;
|
|
309
|
+
view: View;
|
|
310
|
+
}
|
|
311
|
+
export interface ViewTableProps<Item extends AnyItem> extends ViewBaseProps<Item> {
|
|
312
|
+
view: ViewTable;
|
|
313
|
+
}
|
|
314
|
+
export interface ViewListProps<Item extends AnyItem> extends ViewBaseProps<Item> {
|
|
315
|
+
view: ViewList;
|
|
316
|
+
}
|
|
317
|
+
export interface ViewGridProps<Item extends AnyItem> extends ViewBaseProps<Item> {
|
|
318
|
+
view: ViewGrid;
|
|
319
|
+
}
|
|
320
|
+
export type ViewProps<Item extends AnyItem> = ViewTableProps<Item> | ViewGridProps<Item> | ViewListProps<Item>;
|
|
253
321
|
export {};
|
|
254
322
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAErD,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/build-types/utils.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
import type { AnyItem, NormalizedField } from './types';
|
|
2
|
+
export declare function sanitizeOperators<Item extends AnyItem>(field: NormalizedField<Item>): import("./types").Operator[];
|
|
2
3
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAExD,wBAAgB,iBAAiB,CAAE,IAAI,SAAS,OAAO,EACtD,KAAK,EAAE,eAAe,CAAE,IAAI,CAAE,gCA0B9B"}
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { AnyItem, NormalizedField, View } from './types';
|
|
3
|
+
interface ViewActionsProps<Item extends AnyItem> {
|
|
4
|
+
fields: NormalizedField<Item>[];
|
|
5
|
+
view: View;
|
|
6
|
+
onChangeView: (view: View) => void;
|
|
7
|
+
supportedLayouts?: string[];
|
|
8
|
+
}
|
|
9
|
+
declare function _ViewActions<Item extends AnyItem>({ fields, view, onChangeView, supportedLayouts, }: ViewActionsProps<Item>): import("react").JSX.Element;
|
|
10
|
+
declare const ViewActions: typeof _ViewActions;
|
|
1
11
|
export default ViewActions;
|
|
2
|
-
declare const ViewActions: import("react").NamedExoticComponent<object>;
|
|
3
12
|
//# sourceMappingURL=view-actions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-actions.d.ts","sourceRoot":"","sources":["../src/view-actions.
|
|
1
|
+
{"version":3,"file":"view-actions.d.ts","sourceRoot":"","sources":["../src/view-actions.tsx"],"names":[],"mappings":";AAsBA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAkC9D,UAAU,gBAAgB,CAAE,IAAI,SAAS,OAAO;IAC/C,MAAM,EAAE,eAAe,CAAE,IAAI,CAAE,EAAE,CAAC;IAClC,IAAI,EAAE,IAAI,CAAC;IACX,YAAY,EAAE,CAAE,IAAI,EAAE,IAAI,KAAM,IAAI,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAoPD,iBAAS,YAAY,CAAE,IAAI,SAAS,OAAO,EAAI,EAC9C,MAAM,EACN,IAAI,EACJ,YAAY,EACZ,gBAAgB,GAChB,EAAE,gBAAgB,CAAE,IAAI,CAAE,+BA+B1B;AAGD,QAAA,MAAM,WAAW,qBAA8C,CAAC;AAEhE,eAAe,WAAW,CAAC"}
|
|
@@ -1,15 +1,4 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import type {
|
|
3
|
-
interface ViewGridProps<Item extends AnyItem> {
|
|
4
|
-
actions: Action<Item>[];
|
|
5
|
-
data: Item[];
|
|
6
|
-
fields: NormalizedField<Item>[];
|
|
7
|
-
getItemId: (item: Item) => string;
|
|
8
|
-
isLoading: boolean;
|
|
9
|
-
onSelectionChange: (items: Item[]) => void;
|
|
10
|
-
selection: string[];
|
|
11
|
-
view: ViewGridType;
|
|
12
|
-
}
|
|
2
|
+
import type { AnyItem, ViewGridProps } from './types';
|
|
13
3
|
export default function ViewGrid<Item extends AnyItem>({ actions, data, fields, getItemId, isLoading, onSelectionChange, selection, view, }: ViewGridProps<Item>): import("react").JSX.Element;
|
|
14
|
-
export {};
|
|
15
4
|
//# sourceMappingURL=view-grid.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-grid.d.ts","sourceRoot":"","sources":["../src/view-grid.tsx"],"names":[],"mappings":";AAwBA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"view-grid.d.ts","sourceRoot":"","sources":["../src/view-grid.tsx"],"names":[],"mappings":";AAwBA,OAAO,KAAK,EAAU,OAAO,EAAmB,aAAa,EAAE,MAAM,SAAS,CAAC;AAqK/E,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAE,IAAI,SAAS,OAAO,EAAI,EACzD,OAAO,EACP,IAAI,EACJ,MAAM,EACN,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,SAAS,EACT,IAAI,GACJ,EAAE,aAAa,CAAE,IAAI,CAAE,+BAsEvB"}
|
|
@@ -1,16 +1,4 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
actions: Action<Item>[];
|
|
5
|
-
data: Item[];
|
|
6
|
-
fields: NormalizedField<Item>[];
|
|
7
|
-
getItemId: (item: Item) => string;
|
|
8
|
-
id: string;
|
|
9
|
-
isLoading: boolean;
|
|
10
|
-
onSelectionChange: (selection: Item[]) => void;
|
|
11
|
-
selection: string[];
|
|
12
|
-
view: ViewListType;
|
|
13
|
-
}
|
|
14
|
-
export default function ViewList<Item extends AnyItem>(props: ListViewProps<Item>): import("react").JSX.Element;
|
|
15
|
-
export {};
|
|
2
|
+
import type { AnyItem, ViewListProps } from './types';
|
|
3
|
+
export default function ViewList<Item extends AnyItem>(props: ViewListProps<Item>): import("react").JSX.Element;
|
|
16
4
|
//# sourceMappingURL=view-list.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-list.d.ts","sourceRoot":"","sources":["../src/view-list.tsx"],"names":[],"mappings":";AAkCA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"view-list.d.ts","sourceRoot":"","sources":["../src/view-list.tsx"],"names":[],"mappings":";AAkCA,OAAO,KAAK,EAAU,OAAO,EAAmB,aAAa,EAAE,MAAM,SAAS,CAAC;AA4Q/E,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAE,IAAI,SAAS,OAAO,EACrD,KAAK,EAAE,aAAa,CAAE,IAAI,CAAE,+BA2G5B"}
|
|
@@ -1,14 +1,5 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { AnyItem, ViewTableProps } from './types';
|
|
3
|
+
declare function ViewTable<Item extends AnyItem>({ actions, data, fields, getItemId, isLoading, onChangeView, onSelectionChange, selection, setOpenedFilter, view, }: ViewTableProps<Item>): import("react").JSX.Element | undefined;
|
|
1
4
|
export default ViewTable;
|
|
2
|
-
declare function ViewTable({ actions, data, fields, getItemId, isLoading, onChangeView, onSelectionChange, selection, setOpenedFilter, view, }: {
|
|
3
|
-
actions: any;
|
|
4
|
-
data: any;
|
|
5
|
-
fields: any;
|
|
6
|
-
getItemId: any;
|
|
7
|
-
isLoading?: boolean | undefined;
|
|
8
|
-
onChangeView: any;
|
|
9
|
-
onSelectionChange: any;
|
|
10
|
-
selection: any;
|
|
11
|
-
setOpenedFilter: any;
|
|
12
|
-
view: any;
|
|
13
|
-
}): import("react").JSX.Element | undefined;
|
|
14
5
|
//# sourceMappingURL=view-table.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-table.d.ts","sourceRoot":"","sources":["../src/view-table.
|
|
1
|
+
{"version":3,"file":"view-table.d.ts","sourceRoot":"","sources":["../src/view-table.tsx"],"names":[],"mappings":";AA8CA,OAAO,KAAK,EAEX,OAAO,EAIP,cAAc,EACd,MAAM,SAAS,CAAC;AA4WjB,iBAAS,SAAS,CAAE,IAAI,SAAS,OAAO,EAAI,EAC3C,OAAO,EACP,IAAI,EACJ,MAAM,EACN,SAAS,EACT,SAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,IAAI,GACJ,EAAE,cAAc,CAAE,IAAI,CAAE,2CAiKxB;AAED,eAAe,SAAS,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wordpress/dataviews",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "DataViews is a component that provides an API to render datasets using different types of layouts (table, grid, list, etc.).",
|
|
5
5
|
"author": "The WordPress Contributors",
|
|
6
6
|
"license": "GPL-2.0-or-later",
|
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
"url": "https://github.com/WordPress/gutenberg/issues"
|
|
20
20
|
},
|
|
21
21
|
"engines": {
|
|
22
|
-
"node": ">=12"
|
|
22
|
+
"node": ">=18.12.0",
|
|
23
|
+
"npm": ">=8.19.2"
|
|
23
24
|
},
|
|
24
25
|
"main": "build/index.js",
|
|
25
26
|
"module": "build-module/index.js",
|
|
@@ -29,15 +30,13 @@
|
|
|
29
30
|
"dependencies": {
|
|
30
31
|
"@ariakit/react": "^0.3.12",
|
|
31
32
|
"@babel/runtime": "^7.16.0",
|
|
32
|
-
"@wordpress/
|
|
33
|
-
"@wordpress/
|
|
34
|
-
"@wordpress/
|
|
35
|
-
"@wordpress/
|
|
36
|
-
"@wordpress/
|
|
37
|
-
"@wordpress/
|
|
38
|
-
"@wordpress/
|
|
39
|
-
"@wordpress/primitives": "^3.56.0",
|
|
40
|
-
"@wordpress/private-apis": "^0.40.0",
|
|
33
|
+
"@wordpress/components": "^28.0.1",
|
|
34
|
+
"@wordpress/compose": "^7.0.1",
|
|
35
|
+
"@wordpress/element": "^6.0.1",
|
|
36
|
+
"@wordpress/i18n": "^5.0.1",
|
|
37
|
+
"@wordpress/icons": "^10.0.1",
|
|
38
|
+
"@wordpress/primitives": "^4.0.1",
|
|
39
|
+
"@wordpress/private-apis": "^1.0.1",
|
|
41
40
|
"clsx": "^2.1.1",
|
|
42
41
|
"remove-accents": "^0.5.0"
|
|
43
42
|
},
|
|
@@ -47,5 +46,5 @@
|
|
|
47
46
|
"publishConfig": {
|
|
48
47
|
"access": "public"
|
|
49
48
|
},
|
|
50
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "0e973525f7787401b5a544e0727774d52a78639f"
|
|
51
50
|
}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import type { Ref } from 'react';
|
|
5
|
+
|
|
1
6
|
/**
|
|
2
7
|
* WordPress dependencies
|
|
3
8
|
*/
|
|
@@ -12,6 +17,7 @@ import { forwardRef } from '@wordpress/element';
|
|
|
12
17
|
* Internal dependencies
|
|
13
18
|
*/
|
|
14
19
|
import { unlock } from './lock-unlock';
|
|
20
|
+
import type { NormalizedFilter, View } from './types';
|
|
15
21
|
|
|
16
22
|
const {
|
|
17
23
|
DropdownMenuV2: DropdownMenu,
|
|
@@ -19,7 +25,17 @@ const {
|
|
|
19
25
|
DropdownMenuItemLabelV2: DropdownMenuItemLabel,
|
|
20
26
|
} = unlock( componentsPrivateApis );
|
|
21
27
|
|
|
22
|
-
|
|
28
|
+
interface AddFilterProps {
|
|
29
|
+
filters: NormalizedFilter[];
|
|
30
|
+
view: View;
|
|
31
|
+
onChangeView: ( view: View ) => void;
|
|
32
|
+
setOpenedFilter: ( filter: string | null ) => void;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function AddFilter(
|
|
36
|
+
{ filters, view, onChangeView, setOpenedFilter }: AddFilterProps,
|
|
37
|
+
ref: Ref< HTMLButtonElement >
|
|
38
|
+
) {
|
|
23
39
|
if ( ! filters.length || filters.every( ( { isPrimary } ) => isPrimary ) ) {
|
|
24
40
|
return null;
|
|
25
41
|
}
|
|
@@ -17,6 +17,30 @@ import { useReducedMotion } from '@wordpress/compose';
|
|
|
17
17
|
* Internal dependencies
|
|
18
18
|
*/
|
|
19
19
|
import { ActionWithModal } from './item-actions';
|
|
20
|
+
import type { Action, AnyItem } from './types';
|
|
21
|
+
import type { ActionTriggerProps } from './item-actions';
|
|
22
|
+
|
|
23
|
+
interface ActionButtonProps< Item extends AnyItem > {
|
|
24
|
+
action: Action< Item >;
|
|
25
|
+
selectedItems: Item[];
|
|
26
|
+
actionInProgress: string | null;
|
|
27
|
+
setActionInProgress: ( actionId: string | null ) => void;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
interface ToolbarContentProps< Item extends AnyItem > {
|
|
31
|
+
selection: string[];
|
|
32
|
+
actionsToShow: Action< Item >[];
|
|
33
|
+
selectedItems: Item[];
|
|
34
|
+
onSelectionChange: ( selection: Item[] ) => void;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
interface BulkActionsToolbarProps< Item extends AnyItem > {
|
|
38
|
+
data: Item[];
|
|
39
|
+
selection: string[];
|
|
40
|
+
actions: Action< Item >[];
|
|
41
|
+
onSelectionChange: ( selection: Item[] ) => void;
|
|
42
|
+
getItemId: ( item: Item ) => string;
|
|
43
|
+
}
|
|
20
44
|
|
|
21
45
|
const SNACKBAR_VARIANTS = {
|
|
22
46
|
init: {
|
|
@@ -37,11 +61,18 @@ const SNACKBAR_VARIANTS = {
|
|
|
37
61
|
},
|
|
38
62
|
};
|
|
39
63
|
|
|
40
|
-
function ActionTrigger
|
|
64
|
+
function ActionTrigger< Item extends AnyItem >( {
|
|
65
|
+
action,
|
|
66
|
+
onClick,
|
|
67
|
+
isBusy,
|
|
68
|
+
items,
|
|
69
|
+
}: ActionTriggerProps< Item > ) {
|
|
70
|
+
const label =
|
|
71
|
+
typeof action.label === 'string' ? action.label : action.label( items );
|
|
41
72
|
return (
|
|
42
73
|
<ToolbarButton
|
|
43
74
|
disabled={ isBusy }
|
|
44
|
-
label={
|
|
75
|
+
label={ label }
|
|
45
76
|
icon={ action.icon }
|
|
46
77
|
isDestructive={ action.isDestructive }
|
|
47
78
|
size="compact"
|
|
@@ -53,32 +84,26 @@ function ActionTrigger( { action, onClick, isBusy } ) {
|
|
|
53
84
|
);
|
|
54
85
|
}
|
|
55
86
|
|
|
56
|
-
const EMPTY_ARRAY = [];
|
|
87
|
+
const EMPTY_ARRAY: [] = [];
|
|
57
88
|
|
|
58
|
-
function ActionButton( {
|
|
89
|
+
function ActionButton< Item extends AnyItem >( {
|
|
59
90
|
action,
|
|
60
91
|
selectedItems,
|
|
61
92
|
actionInProgress,
|
|
62
93
|
setActionInProgress,
|
|
63
|
-
} ) {
|
|
94
|
+
}: ActionButtonProps< Item > ) {
|
|
64
95
|
const selectedEligibleItems = useMemo( () => {
|
|
65
96
|
return selectedItems.filter( ( item ) => {
|
|
66
|
-
return action.isEligible( item );
|
|
97
|
+
return ! action.isEligible || action.isEligible( item );
|
|
67
98
|
} );
|
|
68
99
|
}, [ action, selectedItems ] );
|
|
69
|
-
if (
|
|
100
|
+
if ( 'RenderModal' in action ) {
|
|
70
101
|
return (
|
|
71
102
|
<ActionWithModal
|
|
72
103
|
key={ action.id }
|
|
73
104
|
action={ action }
|
|
74
105
|
items={ selectedEligibleItems }
|
|
75
106
|
ActionTrigger={ ActionTrigger }
|
|
76
|
-
onActionStart={ () => {
|
|
77
|
-
setActionInProgress( action.id );
|
|
78
|
-
} }
|
|
79
|
-
onActionPerformed={ () => {
|
|
80
|
-
setActionInProgress( null );
|
|
81
|
-
} }
|
|
82
107
|
/>
|
|
83
108
|
);
|
|
84
109
|
}
|
|
@@ -86,25 +111,23 @@ function ActionButton( {
|
|
|
86
111
|
<ActionTrigger
|
|
87
112
|
key={ action.id }
|
|
88
113
|
action={ action }
|
|
89
|
-
items={ selectedItems }
|
|
90
114
|
onClick={ () => {
|
|
91
115
|
setActionInProgress( action.id );
|
|
92
|
-
action.callback( selectedItems
|
|
93
|
-
setActionInProgress( action.id );
|
|
94
|
-
} );
|
|
116
|
+
action.callback( selectedItems );
|
|
95
117
|
} }
|
|
118
|
+
items={ selectedEligibleItems }
|
|
96
119
|
isBusy={ actionInProgress === action.id }
|
|
97
120
|
/>
|
|
98
121
|
);
|
|
99
122
|
}
|
|
100
123
|
|
|
101
|
-
function renderToolbarContent(
|
|
102
|
-
selection,
|
|
103
|
-
actionsToShow,
|
|
104
|
-
selectedItems,
|
|
105
|
-
actionInProgress,
|
|
106
|
-
setActionInProgress,
|
|
107
|
-
|
|
124
|
+
function renderToolbarContent< Item extends AnyItem >(
|
|
125
|
+
selection: string[],
|
|
126
|
+
actionsToShow: Action< Item >[],
|
|
127
|
+
selectedItems: Item[],
|
|
128
|
+
actionInProgress: string | null,
|
|
129
|
+
setActionInProgress: ( actionId: string | null ) => void,
|
|
130
|
+
onSelectionChange: ( selection: Item[] ) => void
|
|
108
131
|
) {
|
|
109
132
|
return (
|
|
110
133
|
<>
|
|
@@ -144,7 +167,7 @@ function renderToolbarContent(
|
|
|
144
167
|
label={ __( 'Cancel' ) }
|
|
145
168
|
disabled={ !! actionInProgress }
|
|
146
169
|
onClick={ () => {
|
|
147
|
-
|
|
170
|
+
onSelectionChange( EMPTY_ARRAY );
|
|
148
171
|
} }
|
|
149
172
|
/>
|
|
150
173
|
</ToolbarGroup>
|
|
@@ -152,14 +175,16 @@ function renderToolbarContent(
|
|
|
152
175
|
);
|
|
153
176
|
}
|
|
154
177
|
|
|
155
|
-
function ToolbarContent( {
|
|
178
|
+
function ToolbarContent< Item extends AnyItem >( {
|
|
156
179
|
selection,
|
|
157
180
|
actionsToShow,
|
|
158
181
|
selectedItems,
|
|
159
|
-
|
|
160
|
-
} ) {
|
|
161
|
-
const [ actionInProgress, setActionInProgress ] = useState
|
|
162
|
-
|
|
182
|
+
onSelectionChange,
|
|
183
|
+
}: ToolbarContentProps< Item > ) {
|
|
184
|
+
const [ actionInProgress, setActionInProgress ] = useState< string | null >(
|
|
185
|
+
null
|
|
186
|
+
);
|
|
187
|
+
const buttons = useRef< JSX.Element | null >( null );
|
|
163
188
|
if ( ! actionInProgress ) {
|
|
164
189
|
if ( buttons.current ) {
|
|
165
190
|
buttons.current = null;
|
|
@@ -170,7 +195,7 @@ function ToolbarContent( {
|
|
|
170
195
|
selectedItems,
|
|
171
196
|
actionInProgress,
|
|
172
197
|
setActionInProgress,
|
|
173
|
-
|
|
198
|
+
onSelectionChange
|
|
174
199
|
);
|
|
175
200
|
} else if ( ! buttons.current ) {
|
|
176
201
|
buttons.current = renderToolbarContent(
|
|
@@ -179,19 +204,19 @@ function ToolbarContent( {
|
|
|
179
204
|
selectedItems,
|
|
180
205
|
actionInProgress,
|
|
181
206
|
setActionInProgress,
|
|
182
|
-
|
|
207
|
+
onSelectionChange
|
|
183
208
|
);
|
|
184
209
|
}
|
|
185
210
|
return buttons.current;
|
|
186
211
|
}
|
|
187
212
|
|
|
188
|
-
export default function BulkActionsToolbar( {
|
|
213
|
+
export default function BulkActionsToolbar< Item extends AnyItem >( {
|
|
189
214
|
data,
|
|
190
215
|
selection,
|
|
191
216
|
actions = EMPTY_ARRAY,
|
|
192
|
-
|
|
217
|
+
onSelectionChange,
|
|
193
218
|
getItemId,
|
|
194
|
-
} ) {
|
|
219
|
+
}: BulkActionsToolbarProps< Item > ) {
|
|
195
220
|
const isReducedMotion = useReducedMotion();
|
|
196
221
|
const selectedItems = useMemo( () => {
|
|
197
222
|
return data.filter( ( item ) =>
|
|
@@ -205,7 +230,10 @@ export default function BulkActionsToolbar( {
|
|
|
205
230
|
return (
|
|
206
231
|
action.supportsBulk &&
|
|
207
232
|
action.icon &&
|
|
208
|
-
selectedItems.some(
|
|
233
|
+
selectedItems.some(
|
|
234
|
+
( item ) =>
|
|
235
|
+
! action.isEligible || action.isEligible( item )
|
|
236
|
+
)
|
|
209
237
|
);
|
|
210
238
|
} ),
|
|
211
239
|
[ actions, selectedItems ]
|
|
@@ -222,9 +250,9 @@ export default function BulkActionsToolbar( {
|
|
|
222
250
|
<AnimatePresence>
|
|
223
251
|
<motion.div
|
|
224
252
|
layout={ ! isReducedMotion } // See https://www.framer.com/docs/animation/#layout-animations
|
|
225
|
-
initial=
|
|
226
|
-
animate=
|
|
227
|
-
exit=
|
|
253
|
+
initial="init"
|
|
254
|
+
animate="open"
|
|
255
|
+
exit="exit"
|
|
228
256
|
variants={ isReducedMotion ? undefined : SNACKBAR_VARIANTS }
|
|
229
257
|
className="dataviews-bulk-actions"
|
|
230
258
|
>
|
|
@@ -234,7 +262,7 @@ export default function BulkActionsToolbar( {
|
|
|
234
262
|
selection={ selection }
|
|
235
263
|
actionsToShow={ actionsToShow }
|
|
236
264
|
selectedItems={ selectedItems }
|
|
237
|
-
|
|
265
|
+
onSelectionChange={ onSelectionChange }
|
|
238
266
|
/>
|
|
239
267
|
</div>
|
|
240
268
|
</Toolbar>
|
package/src/bulk-actions.tsx
CHANGED
|
@@ -94,9 +94,13 @@ function ActionWithModal< Item extends AnyItem >( {
|
|
|
94
94
|
const onCloseModal = useCallback( () => {
|
|
95
95
|
setActionWithModal( undefined );
|
|
96
96
|
}, [ setActionWithModal ] );
|
|
97
|
+
const label =
|
|
98
|
+
typeof action.label === 'string'
|
|
99
|
+
? action.label
|
|
100
|
+
: action.label( selectedItems );
|
|
97
101
|
return (
|
|
98
102
|
<Modal
|
|
99
|
-
title={ ! hideModalHeader ?
|
|
103
|
+
title={ ! hideModalHeader ? label : undefined }
|
|
100
104
|
__experimentalHideHeader={ !! hideModalHeader }
|
|
101
105
|
onRequestClose={ onCloseModal }
|
|
102
106
|
overlayClassName="dataviews-action-modal"
|
package/src/constants.ts
CHANGED
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { __ } from '@wordpress/i18n';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import type { Operator } from './types';
|
|
10
|
+
|
|
6
11
|
// Filter operators.
|
|
7
12
|
export const OPERATOR_IS = 'is';
|
|
8
13
|
export const OPERATOR_IS_NOT = 'isNot';
|
|
@@ -19,7 +24,7 @@ export const ALL_OPERATORS = [
|
|
|
19
24
|
OPERATOR_IS_ALL,
|
|
20
25
|
OPERATOR_IS_NOT_ALL,
|
|
21
26
|
];
|
|
22
|
-
export const OPERATORS = {
|
|
27
|
+
export const OPERATORS: Record< Operator, { key: string; label: string } > = {
|
|
23
28
|
[ OPERATOR_IS ]: {
|
|
24
29
|
key: 'is-filter',
|
|
25
30
|
label: __( 'Is' ),
|
|
@@ -46,10 +51,12 @@ export const OPERATORS = {
|
|
|
46
51
|
},
|
|
47
52
|
};
|
|
48
53
|
|
|
49
|
-
|
|
50
|
-
export const
|
|
51
|
-
|
|
52
|
-
|
|
54
|
+
export const SORTING_DIRECTIONS = [ 'asc', 'desc' ] as const;
|
|
55
|
+
export const sortArrows = { asc: '↑', desc: '↓' };
|
|
56
|
+
export const sortValues = { asc: 'ascending', desc: 'descending' } as const;
|
|
57
|
+
export const sortLabels = {
|
|
58
|
+
asc: __( 'Sort ascending' ),
|
|
59
|
+
desc: __( 'Sort descending' ),
|
|
53
60
|
};
|
|
54
61
|
|
|
55
62
|
// View layouts.
|