@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.
Files changed (150) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +33 -30
  3. package/build/add-filter.js +30 -22
  4. package/build/add-filter.js.map +1 -1
  5. package/build/bulk-actions-toolbar.js +74 -69
  6. package/build/bulk-actions-toolbar.js.map +1 -1
  7. package/build/bulk-actions.js +69 -56
  8. package/build/bulk-actions.js.map +1 -1
  9. package/build/constants.js +17 -10
  10. package/build/constants.js.map +1 -1
  11. package/build/dataviews.js +63 -56
  12. package/build/dataviews.js.map +1 -1
  13. package/build/filter-summary.js +105 -95
  14. package/build/filter-summary.js.map +1 -1
  15. package/build/filters.js +18 -17
  16. package/build/filters.js.map +1 -1
  17. package/build/index.js.map +1 -1
  18. package/build/item-actions.js +79 -65
  19. package/build/item-actions.js.map +1 -1
  20. package/build/layouts.js.map +1 -1
  21. package/build/pagination.js +60 -57
  22. package/build/pagination.js.map +1 -1
  23. package/build/reset-filters.js +9 -4
  24. package/build/reset-filters.js.map +1 -1
  25. package/build/search-widget.js +108 -89
  26. package/build/search-widget.js.map +1 -1
  27. package/build/search.js +13 -6
  28. package/build/search.js.map +1 -1
  29. package/build/single-selection-checkbox.js +2 -2
  30. package/build/single-selection-checkbox.js.map +1 -1
  31. package/build/types.js.map +1 -1
  32. package/build/utils.js +3 -15
  33. package/build/utils.js.map +1 -1
  34. package/build/view-actions.js +168 -120
  35. package/build/view-actions.js.map +1 -1
  36. package/build/view-grid.js +113 -99
  37. package/build/view-grid.js.map +1 -1
  38. package/build/view-list.js +154 -132
  39. package/build/view-list.js.map +1 -1
  40. package/build/view-table.js +220 -192
  41. package/build/view-table.js.map +1 -1
  42. package/build-module/add-filter.js +30 -22
  43. package/build-module/add-filter.js.map +1 -1
  44. package/build-module/bulk-actions-toolbar.js +76 -69
  45. package/build-module/bulk-actions-toolbar.js.map +1 -1
  46. package/build-module/bulk-actions.js +71 -56
  47. package/build-module/bulk-actions.js.map +1 -1
  48. package/build-module/constants.js +16 -9
  49. package/build-module/constants.js.map +1 -1
  50. package/build-module/dataviews.js +64 -56
  51. package/build-module/dataviews.js.map +1 -1
  52. package/build-module/filter-summary.js +106 -96
  53. package/build-module/filter-summary.js.map +1 -1
  54. package/build-module/filters.js +18 -17
  55. package/build-module/filters.js.map +1 -1
  56. package/build-module/index.js.map +1 -1
  57. package/build-module/item-actions.js +81 -65
  58. package/build-module/item-actions.js.map +1 -1
  59. package/build-module/layouts.js.map +1 -1
  60. package/build-module/pagination.js +61 -58
  61. package/build-module/pagination.js.map +1 -1
  62. package/build-module/reset-filters.js +9 -4
  63. package/build-module/reset-filters.js.map +1 -1
  64. package/build-module/search-widget.js +109 -89
  65. package/build-module/search-widget.js.map +1 -1
  66. package/build-module/search.js +13 -6
  67. package/build-module/search.js.map +1 -1
  68. package/build-module/single-selection-checkbox.js +2 -3
  69. package/build-module/single-selection-checkbox.js.map +1 -1
  70. package/build-module/types.js.map +1 -1
  71. package/build-module/utils.js +2 -13
  72. package/build-module/utils.js.map +1 -1
  73. package/build-module/view-actions.js +170 -121
  74. package/build-module/view-actions.js.map +1 -1
  75. package/build-module/view-grid.js +115 -99
  76. package/build-module/view-grid.js.map +1 -1
  77. package/build-module/view-list.js +155 -132
  78. package/build-module/view-list.js.map +1 -1
  79. package/build-module/view-table.js +223 -194
  80. package/build-module/view-table.js.map +1 -1
  81. package/build-style/style-rtl.css +115 -22
  82. package/build-style/style.css +115 -22
  83. package/build-types/add-filter.d.ts +9 -6
  84. package/build-types/add-filter.d.ts.map +1 -1
  85. package/build-types/bulk-actions-toolbar.d.ts +11 -7
  86. package/build-types/bulk-actions-toolbar.d.ts.map +1 -1
  87. package/build-types/bulk-actions.d.ts.map +1 -1
  88. package/build-types/constants.d.ts +19 -32
  89. package/build-types/constants.d.ts.map +1 -1
  90. package/build-types/dataviews.d.ts +21 -14
  91. package/build-types/dataviews.d.ts.map +1 -1
  92. package/build-types/filter-summary.d.ts +13 -5
  93. package/build-types/filter-summary.d.ts.map +1 -1
  94. package/build-types/filters.d.ts +11 -1
  95. package/build-types/filters.d.ts.map +1 -1
  96. package/build-types/index.d.ts +3 -3
  97. package/build-types/index.d.ts.map +1 -1
  98. package/build-types/item-actions.d.ts +5 -7
  99. package/build-types/item-actions.d.ts.map +1 -1
  100. package/build-types/layouts.d.ts +8 -4
  101. package/build-types/layouts.d.ts.map +1 -1
  102. package/build-types/reset-filters.d.ts +12 -5
  103. package/build-types/reset-filters.d.ts.map +1 -1
  104. package/build-types/search-widget.d.ts +9 -1
  105. package/build-types/search-widget.d.ts.map +1 -1
  106. package/build-types/search.d.ts +11 -1
  107. package/build-types/search.d.ts.map +1 -1
  108. package/build-types/types.d.ts +78 -10
  109. package/build-types/types.d.ts.map +1 -1
  110. package/build-types/utils.d.ts +2 -1
  111. package/build-types/utils.d.ts.map +1 -1
  112. package/build-types/view-actions.d.ts +10 -1
  113. package/build-types/view-actions.d.ts.map +1 -1
  114. package/build-types/view-grid.d.ts +1 -12
  115. package/build-types/view-grid.d.ts.map +1 -1
  116. package/build-types/view-list.d.ts +2 -14
  117. package/build-types/view-list.d.ts.map +1 -1
  118. package/build-types/view-table.d.ts +3 -12
  119. package/build-types/view-table.d.ts.map +1 -1
  120. package/package.json +11 -12
  121. package/src/{add-filter.js → add-filter.tsx} +17 -1
  122. package/src/{bulk-actions-toolbar.js → bulk-actions-toolbar.tsx} +68 -40
  123. package/src/bulk-actions.tsx +5 -1
  124. package/src/constants.ts +12 -5
  125. package/src/{dataviews.js → dataviews.tsx} +41 -12
  126. package/src/{filter-summary.js → filter-summary.tsx} +35 -6
  127. package/src/{filters.js → filters.tsx} +18 -6
  128. package/src/item-actions.tsx +21 -15
  129. package/src/pagination.tsx +1 -1
  130. package/src/{reset-filters.js → reset-filters.tsx} +17 -2
  131. package/src/{search-widget.js → search-widget.tsx} +27 -7
  132. package/src/{search.js → search.tsx} +22 -5
  133. package/src/style.scss +102 -25
  134. package/src/types.ts +105 -10
  135. package/src/{utils.js → utils.ts} +5 -13
  136. package/src/{view-actions.js → view-actions.tsx} +105 -49
  137. package/src/view-grid.tsx +4 -20
  138. package/src/view-list.tsx +13 -23
  139. package/src/{view-table.js → view-table.tsx} +91 -32
  140. package/tsconfig.json +0 -3
  141. package/tsconfig.tsbuildinfo +1 -1
  142. package/build/dropdown-menu-helper.js +0 -71
  143. package/build/dropdown-menu-helper.js.map +0 -1
  144. package/build-module/dropdown-menu-helper.js +0 -64
  145. package/build-module/dropdown-menu-helper.js.map +0 -1
  146. package/build-types/dropdown-menu-helper.d.ts +0 -6
  147. package/build-types/dropdown-menu-helper.d.ts.map +0 -1
  148. package/src/dropdown-menu-helper.js +0 -61
  149. /package/src/{index.js → index.ts} +0 -0
  150. /package/src/{layouts.js → layouts.ts} +0 -0
@@ -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: string;
198
+ primaryField?: string;
155
199
  /**
156
200
  * The field to use as the media field.
157
201
  */
158
- mediaField: string;
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: string;
211
+ primaryField?: string;
168
212
  /**
169
213
  * The field to use as the media field.
170
214
  */
171
- mediaField: string;
215
+ mediaField?: string;
172
216
  /**
173
217
  * The fields to use as columns.
174
218
  */
175
- columnFields: string[];
219
+ columnFields?: string[];
176
220
  /**
177
221
  * The fields to use as badge fields.
178
222
  */
179
- badgeFields: string[];
223
+ badgeFields?: string[];
180
224
  };
181
225
  }
182
- export type View = ViewList | ViewGrid | ViewBase;
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":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
- export function sanitizeOperators(field: any): any;
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.js"],"names":[],"mappings":"AAWO,mDAoCN"}
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.js"],"names":[],"mappings":";AA4PA,wEAoCI"}
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 { Action, AnyItem, NormalizedField, ViewGrid as ViewGridType } from './types';
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,EACX,MAAM,EACN,OAAO,EACP,eAAe,EACf,QAAQ,IAAI,YAAY,EACxB,MAAM,SAAS,CAAC;AAgBjB,UAAU,aAAa,CAAE,IAAI,SAAS,OAAO;IAC5C,OAAO,EAAE,MAAM,CAAE,IAAI,CAAE,EAAE,CAAC;IAC1B,IAAI,EAAE,IAAI,EAAE,CAAC;IACb,MAAM,EAAE,eAAe,CAAE,IAAI,CAAE,EAAE,CAAC;IAClC,SAAS,EAAE,CAAE,IAAI,EAAE,IAAI,KAAM,MAAM,CAAC;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,CAAE,KAAK,EAAE,IAAI,EAAE,KAAM,IAAI,CAAC;IAC7C,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,EAAE,YAAY,CAAC;CACnB;AAuJD,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
+ {"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 { Action, AnyItem, NormalizedField, ViewList as ViewListType } from './types';
3
- interface ListViewProps<Item extends AnyItem> {
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,EACX,MAAM,EACN,OAAO,EACP,eAAe,EACf,QAAQ,IAAI,YAAY,EACxB,MAAM,SAAS,CAAC;AAIjB,UAAU,aAAa,CAAE,IAAI,SAAS,OAAO;IAC5C,OAAO,EAAE,MAAM,CAAE,IAAI,CAAE,EAAE,CAAC;IAC1B,IAAI,EAAE,IAAI,EAAE,CAAC;IACb,MAAM,EAAE,eAAe,CAAE,IAAI,CAAE,EAAE,CAAC;IAClC,SAAS,EAAE,CAAE,IAAI,EAAE,IAAI,KAAM,MAAM,CAAC;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,CAAE,SAAS,EAAE,IAAI,EAAE,KAAM,IAAI,CAAC;IACjD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,EAAE,YAAY,CAAC;CACnB;AAmQD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAE,IAAI,SAAS,OAAO,EACrD,KAAK,EAAE,aAAa,CAAE,IAAI,CAAE,+BA2G5B"}
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.js"],"names":[],"mappings":";AA2WA;;;;;;;;;;;4CAuKC"}
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": "1.2.0",
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/a11y": "^3.58.0",
33
- "@wordpress/components": "^27.6.0",
34
- "@wordpress/compose": "^6.35.0",
35
- "@wordpress/element": "^5.35.0",
36
- "@wordpress/i18n": "^4.58.0",
37
- "@wordpress/icons": "^9.49.0",
38
- "@wordpress/keycodes": "^3.58.0",
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": "42f38f287506a6b3ed8ccba839b18ad066821044"
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
- function AddFilter( { filters, view, onChangeView, setOpenedFilter }, ref ) {
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( { action, onClick, isBusy } ) {
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={ action.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 ( !! action.RenderModal ) {
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
- setSelection
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
- setSelection( EMPTY_ARRAY );
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
- setSelection,
160
- } ) {
161
- const [ actionInProgress, setActionInProgress ] = useState( null );
162
- const buttons = useRef( null );
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
- setSelection
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
- setSelection
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
- setSelection,
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( ( item ) => action.isEligible( item ) )
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={ 'init' }
226
- animate={ 'open' }
227
- exit={ '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
- setSelection={ setSelection }
265
+ onSelectionChange={ onSelectionChange }
238
266
  />
239
267
  </div>
240
268
  </Toolbar>
@@ -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 ? action.label : undefined }
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
- // Sorting
50
- export const SORTING_DIRECTIONS = {
51
- asc: { label: __( 'Sort ascending' ) },
52
- desc: { label: __( 'Sort descending' ) },
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.