@wordpress/dataviews 4.1.0 → 4.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.
Files changed (223) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +77 -29
  3. package/build/components/dataviews/index.js +10 -14
  4. package/build/components/dataviews/index.js.map +1 -1
  5. package/build/components/dataviews-bulk-actions/index.js +145 -141
  6. package/build/components/dataviews-bulk-actions/index.js.map +1 -1
  7. package/build/components/dataviews-filters/add-filter.js +4 -6
  8. package/build/components/dataviews-filters/add-filter.js.map +1 -1
  9. package/build/components/dataviews-filters/index.js +3 -0
  10. package/build/components/dataviews-filters/index.js.map +1 -1
  11. package/build/components/dataviews-filters/search-widget.js +30 -23
  12. package/build/components/dataviews-filters/search-widget.js.map +1 -1
  13. package/build/components/dataviews-footer/index.js +45 -0
  14. package/build/components/dataviews-footer/index.js.map +1 -0
  15. package/build/components/dataviews-item-actions/index.js +5 -8
  16. package/build/components/dataviews-item-actions/index.js.map +1 -1
  17. package/build/components/dataviews-pagination/index.js +27 -19
  18. package/build/components/dataviews-pagination/index.js.map +1 -1
  19. package/build/components/dataviews-view-config/index.js +197 -41
  20. package/build/components/dataviews-view-config/index.js.map +1 -1
  21. package/build/dataform-controls/datetime.js +49 -0
  22. package/build/dataform-controls/datetime.js.map +1 -0
  23. package/build/dataform-controls/index.js +50 -0
  24. package/build/dataform-controls/index.js.map +1 -0
  25. package/build/dataform-controls/integer.js +45 -0
  26. package/build/dataform-controls/integer.js.map +1 -0
  27. package/build/dataform-controls/radio.js +45 -0
  28. package/build/dataform-controls/radio.js.map +1 -0
  29. package/build/dataform-controls/select.js +58 -0
  30. package/build/dataform-controls/select.js.map +1 -0
  31. package/build/dataform-controls/text.js +45 -0
  32. package/build/dataform-controls/text.js.map +1 -0
  33. package/build/dataforms-layouts/panel/index.js +10 -4
  34. package/build/dataforms-layouts/panel/index.js.map +1 -1
  35. package/build/dataforms-layouts/regular/index.js +6 -3
  36. package/build/dataforms-layouts/regular/index.js.map +1 -1
  37. package/build/dataviews-layouts/grid/density-picker.js +23 -52
  38. package/build/dataviews-layouts/grid/density-picker.js.map +1 -1
  39. package/build/dataviews-layouts/grid/index.js +1 -1
  40. package/build/dataviews-layouts/grid/index.js.map +1 -1
  41. package/build/dataviews-layouts/index.js +48 -2
  42. package/build/dataviews-layouts/index.js.map +1 -1
  43. package/build/dataviews-layouts/list/index.js +124 -80
  44. package/build/dataviews-layouts/list/index.js.map +1 -1
  45. package/build/dataviews-layouts/table/column-header-menu.js +52 -57
  46. package/build/dataviews-layouts/table/column-header-menu.js.map +1 -1
  47. package/build/dataviews-layouts/table/index.js +7 -35
  48. package/build/dataviews-layouts/table/index.js.map +1 -1
  49. package/build/field-types/datetime.js +30 -0
  50. package/build/field-types/datetime.js.map +1 -0
  51. package/build/field-types/index.js +4 -0
  52. package/build/field-types/index.js.map +1 -1
  53. package/build/field-types/integer.js +1 -60
  54. package/build/field-types/integer.js.map +1 -1
  55. package/build/field-types/text.js +1 -60
  56. package/build/field-types/text.js.map +1 -1
  57. package/build/normalize-fields.js +10 -9
  58. package/build/normalize-fields.js.map +1 -1
  59. package/build/types.js.map +1 -1
  60. package/build-module/components/dataviews/index.js +10 -14
  61. package/build-module/components/dataviews/index.js.map +1 -1
  62. package/build-module/components/dataviews-bulk-actions/index.js +145 -143
  63. package/build-module/components/dataviews-bulk-actions/index.js.map +1 -1
  64. package/build-module/components/dataviews-filters/add-filter.js +4 -6
  65. package/build-module/components/dataviews-filters/add-filter.js.map +1 -1
  66. package/build-module/components/dataviews-filters/index.js +3 -0
  67. package/build-module/components/dataviews-filters/index.js.map +1 -1
  68. package/build-module/components/dataviews-filters/search-widget.js +30 -23
  69. package/build-module/components/dataviews-filters/search-widget.js.map +1 -1
  70. package/build-module/components/dataviews-footer/index.js +38 -0
  71. package/build-module/components/dataviews-footer/index.js.map +1 -0
  72. package/build-module/components/dataviews-item-actions/index.js +5 -8
  73. package/build-module/components/dataviews-item-actions/index.js.map +1 -1
  74. package/build-module/components/dataviews-pagination/index.js +28 -20
  75. package/build-module/components/dataviews-pagination/index.js.map +1 -1
  76. package/build-module/components/dataviews-view-config/index.js +203 -47
  77. package/build-module/components/dataviews-view-config/index.js.map +1 -1
  78. package/build-module/dataform-controls/datetime.js +43 -0
  79. package/build-module/dataform-controls/datetime.js.map +1 -0
  80. package/build-module/dataform-controls/index.js +42 -0
  81. package/build-module/dataform-controls/index.js.map +1 -0
  82. package/build-module/dataform-controls/integer.js +38 -0
  83. package/build-module/dataform-controls/integer.js.map +1 -0
  84. package/build-module/dataform-controls/radio.js +38 -0
  85. package/build-module/dataform-controls/radio.js.map +1 -0
  86. package/build-module/dataform-controls/select.js +51 -0
  87. package/build-module/dataform-controls/select.js.map +1 -0
  88. package/build-module/dataform-controls/text.js +38 -0
  89. package/build-module/dataform-controls/text.js.map +1 -0
  90. package/build-module/dataforms-layouts/panel/index.js +10 -4
  91. package/build-module/dataforms-layouts/panel/index.js.map +1 -1
  92. package/build-module/dataforms-layouts/regular/index.js +6 -3
  93. package/build-module/dataforms-layouts/regular/index.js.map +1 -1
  94. package/build-module/dataviews-layouts/grid/density-picker.js +25 -56
  95. package/build-module/dataviews-layouts/grid/density-picker.js.map +1 -1
  96. package/build-module/dataviews-layouts/grid/index.js +1 -1
  97. package/build-module/dataviews-layouts/grid/index.js.map +1 -1
  98. package/build-module/dataviews-layouts/index.js +45 -1
  99. package/build-module/dataviews-layouts/index.js.map +1 -1
  100. package/build-module/dataviews-layouts/list/index.js +125 -80
  101. package/build-module/dataviews-layouts/list/index.js.map +1 -1
  102. package/build-module/dataviews-layouts/table/column-header-menu.js +52 -57
  103. package/build-module/dataviews-layouts/table/column-header-menu.js.map +1 -1
  104. package/build-module/dataviews-layouts/table/index.js +9 -37
  105. package/build-module/dataviews-layouts/table/index.js.map +1 -1
  106. package/build-module/field-types/datetime.js +24 -0
  107. package/build-module/field-types/datetime.js.map +1 -0
  108. package/build-module/field-types/index.js +4 -0
  109. package/build-module/field-types/index.js.map +1 -1
  110. package/build-module/field-types/integer.js +2 -60
  111. package/build-module/field-types/integer.js.map +1 -1
  112. package/build-module/field-types/text.js +2 -60
  113. package/build-module/field-types/text.js.map +1 -1
  114. package/build-module/normalize-fields.js +11 -9
  115. package/build-module/normalize-fields.js.map +1 -1
  116. package/build-module/types.js.map +1 -1
  117. package/build-style/style-rtl.css +93 -80
  118. package/build-style/style.css +93 -80
  119. package/build-types/components/dataform/stories/index.story.d.ts.map +1 -1
  120. package/build-types/components/dataviews/index.d.ts.map +1 -1
  121. package/build-types/components/dataviews/stories/fixtures.d.ts +28 -113
  122. package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -1
  123. package/build-types/components/dataviews/stories/index.story.d.ts +12 -44
  124. package/build-types/components/dataviews/stories/index.story.d.ts.map +1 -1
  125. package/build-types/components/dataviews-bulk-actions/index.d.ts +11 -1
  126. package/build-types/components/dataviews-bulk-actions/index.d.ts.map +1 -1
  127. package/build-types/components/dataviews-filters/add-filter.d.ts.map +1 -1
  128. package/build-types/components/dataviews-filters/index.d.ts +1 -1
  129. package/build-types/components/dataviews-filters/index.d.ts.map +1 -1
  130. package/build-types/components/dataviews-filters/search-widget.d.ts.map +1 -1
  131. package/build-types/components/dataviews-footer/index.d.ts +2 -0
  132. package/build-types/components/dataviews-footer/index.d.ts.map +1 -0
  133. package/build-types/components/dataviews-item-actions/index.d.ts.map +1 -1
  134. package/build-types/components/dataviews-pagination/index.d.ts.map +1 -1
  135. package/build-types/components/dataviews-view-config/index.d.ts +4 -3
  136. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
  137. package/build-types/dataform-controls/datetime.d.ts +6 -0
  138. package/build-types/dataform-controls/datetime.d.ts.map +1 -0
  139. package/build-types/dataform-controls/index.d.ts +11 -0
  140. package/build-types/dataform-controls/index.d.ts.map +1 -0
  141. package/build-types/dataform-controls/integer.d.ts +6 -0
  142. package/build-types/dataform-controls/integer.d.ts.map +1 -0
  143. package/build-types/dataform-controls/radio.d.ts +6 -0
  144. package/build-types/dataform-controls/radio.d.ts.map +1 -0
  145. package/build-types/dataform-controls/select.d.ts +6 -0
  146. package/build-types/dataform-controls/select.d.ts.map +1 -0
  147. package/build-types/dataform-controls/text.d.ts +6 -0
  148. package/build-types/dataform-controls/text.d.ts.map +1 -0
  149. package/build-types/dataforms-layouts/panel/index.d.ts.map +1 -1
  150. package/build-types/dataforms-layouts/regular/index.d.ts.map +1 -1
  151. package/build-types/dataviews-layouts/grid/density-picker.d.ts.map +1 -1
  152. package/build-types/dataviews-layouts/index.d.ts +4 -2
  153. package/build-types/dataviews-layouts/index.d.ts.map +1 -1
  154. package/build-types/dataviews-layouts/list/index.d.ts.map +1 -1
  155. package/build-types/dataviews-layouts/table/column-header-menu.d.ts.map +1 -1
  156. package/build-types/dataviews-layouts/table/index.d.ts.map +1 -1
  157. package/build-types/field-types/datetime.d.ts +13 -0
  158. package/build-types/field-types/datetime.d.ts.map +1 -0
  159. package/build-types/field-types/index.d.ts +1 -1
  160. package/build-types/field-types/index.d.ts.map +1 -1
  161. package/build-types/field-types/integer.d.ts +2 -3
  162. package/build-types/field-types/integer.d.ts.map +1 -1
  163. package/build-types/field-types/text.d.ts +2 -3
  164. package/build-types/field-types/text.d.ts.map +1 -1
  165. package/build-types/normalize-fields.d.ts.map +1 -1
  166. package/build-types/types.d.ts +43 -21
  167. package/build-types/types.d.ts.map +1 -1
  168. package/package.json +12 -12
  169. package/src/components/dataform/stories/index.story.tsx +43 -2
  170. package/src/components/dataviews/index.tsx +14 -18
  171. package/src/components/dataviews/stories/fixtures.tsx +690 -0
  172. package/src/components/dataviews/stories/index.story.tsx +164 -0
  173. package/src/components/dataviews/style.scss +2 -12
  174. package/src/components/dataviews-bulk-actions/index.tsx +264 -213
  175. package/src/components/dataviews-bulk-actions/style.scss +9 -4
  176. package/src/components/dataviews-filters/add-filter.tsx +7 -11
  177. package/src/components/dataviews-filters/index.tsx +3 -0
  178. package/src/components/dataviews-filters/search-widget.tsx +46 -25
  179. package/src/components/dataviews-filters/style.scss +13 -3
  180. package/src/components/dataviews-footer/index.tsx +50 -0
  181. package/src/components/dataviews-footer/style.scss +40 -0
  182. package/src/components/dataviews-item-actions/index.tsx +8 -14
  183. package/src/components/dataviews-pagination/index.tsx +40 -21
  184. package/src/components/dataviews-pagination/style.scss +7 -21
  185. package/src/components/dataviews-view-config/index.tsx +297 -69
  186. package/src/components/dataviews-view-config/style.scss +25 -0
  187. package/src/dataform-controls/datetime.tsx +43 -0
  188. package/src/dataform-controls/index.tsx +61 -0
  189. package/src/dataform-controls/integer.tsx +38 -0
  190. package/src/dataform-controls/radio.tsx +42 -0
  191. package/src/dataform-controls/select.tsx +52 -0
  192. package/src/dataform-controls/style.scss +4 -0
  193. package/src/dataform-controls/text.tsx +40 -0
  194. package/src/dataforms-layouts/panel/index.tsx +8 -2
  195. package/src/dataforms-layouts/regular/index.tsx +6 -2
  196. package/src/dataviews-layouts/grid/density-picker.tsx +33 -67
  197. package/src/dataviews-layouts/grid/index.tsx +1 -1
  198. package/src/dataviews-layouts/grid/style.scss +1 -5
  199. package/src/dataviews-layouts/index.ts +63 -2
  200. package/src/dataviews-layouts/list/index.tsx +199 -123
  201. package/src/dataviews-layouts/list/style.scss +10 -4
  202. package/src/dataviews-layouts/table/column-header-menu.tsx +86 -90
  203. package/src/dataviews-layouts/table/index.tsx +8 -65
  204. package/src/dataviews-layouts/table/style.scss +0 -5
  205. package/src/field-types/datetime.tsx +28 -0
  206. package/src/field-types/index.tsx +5 -0
  207. package/src/field-types/integer.tsx +2 -71
  208. package/src/field-types/text.tsx +2 -70
  209. package/src/normalize-fields.ts +10 -10
  210. package/src/style.scss +2 -1
  211. package/src/test/filter-and-sort-data-view.js +28 -0
  212. package/src/types.ts +56 -32
  213. package/tsconfig.tsbuildinfo +1 -1
  214. package/build/components/dataviews-bulk-actions-toolbar/index.js +0 -207
  215. package/build/components/dataviews-bulk-actions-toolbar/index.js.map +0 -1
  216. package/build-module/components/dataviews-bulk-actions-toolbar/index.js +0 -201
  217. package/build-module/components/dataviews-bulk-actions-toolbar/index.js.map +0 -1
  218. package/build-types/components/dataviews-bulk-actions-toolbar/index.d.ts +0 -2
  219. package/build-types/components/dataviews-bulk-actions-toolbar/index.d.ts.map +0 -1
  220. package/src/components/dataviews/stories/fixtures.js +0 -222
  221. package/src/components/dataviews/stories/index.story.js +0 -65
  222. package/src/components/dataviews-bulk-actions-toolbar/index.tsx +0 -288
  223. package/src/components/dataviews-bulk-actions-toolbar/style.scss +0 -45
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import getFieldTypeDefinition from './field-types';
5
5
  import type { Field, NormalizedField } from './types';
6
+ import { getControl } from './dataform-controls';
6
7
 
7
8
  /**
8
9
  * Apply default values and normalize the fields config.
@@ -17,8 +18,7 @@ export function normalizeFields< Item >(
17
18
  const fieldTypeDefinition = getFieldTypeDefinition( field.type );
18
19
 
19
20
  const getValue =
20
- field.getValue ||
21
- ( ( { item }: { item: Item } ) => item[ field.id as keyof Item ] );
21
+ field.getValue || ( ( { item } ) => ( item as any )[ field.id ] );
22
22
 
23
23
  const sort =
24
24
  field.sort ??
@@ -39,17 +39,14 @@ export function normalizeFields< Item >(
39
39
  );
40
40
  };
41
41
 
42
- const Edit = field.Edit || fieldTypeDefinition.Edit;
42
+ const Edit = getControl( field, fieldTypeDefinition );
43
43
 
44
44
  const renderFromElements = ( { item }: { item: Item } ) => {
45
45
  const value = getValue( { item } );
46
- const label = field?.elements?.find( ( element ) => {
47
- // Intentionally using == here to allow for type coercion.
48
- // eslint-disable-next-line eqeqeq
49
- return element.value == value;
50
- } )?.label;
51
-
52
- return label || value;
46
+ return (
47
+ field?.elements?.find( ( element ) => element.value === value )
48
+ ?.label || getValue( { item } )
49
+ );
53
50
  };
54
51
 
55
52
  const render =
@@ -58,11 +55,14 @@ export function normalizeFields< Item >(
58
55
  return {
59
56
  ...field,
60
57
  label: field.label || field.id,
58
+ header: field.header || field.label || field.id,
61
59
  getValue,
62
60
  render,
63
61
  sort,
64
62
  isValid,
65
63
  Edit,
64
+ enableHiding: field.enableHiding ?? true,
65
+ enableSorting: field.enableSorting ?? true,
66
66
  };
67
67
  } );
68
68
  }
package/src/style.scss CHANGED
@@ -1,7 +1,7 @@
1
1
  @import "./components/dataviews/style.scss";
2
2
  @import "./components/dataviews-bulk-actions/style.scss";
3
- @import "./components/dataviews-bulk-actions-toolbar/style.scss";
4
3
  @import "./components/dataviews-filters/style.scss";
4
+ @import "./components/dataviews-footer/style.scss";
5
5
  @import "./components/dataviews-pagination/style.scss";
6
6
  @import "./components/dataviews-item-actions/style.scss";
7
7
  @import "./components/dataviews-selection-checkbox/style.scss";
@@ -11,4 +11,5 @@
11
11
  @import "./dataviews-layouts/list/style.scss";
12
12
  @import "./dataviews-layouts/table/style.scss";
13
13
 
14
+ @import "./dataform-controls/style.scss";
14
15
  @import "./dataforms-layouts/panel/style.scss";
@@ -268,6 +268,34 @@ describe( 'sorting', () => {
268
268
  expect( result[ 1 ].title ).toBe( 'Neptune' );
269
269
  } );
270
270
 
271
+ it( 'should sort datetime field types', () => {
272
+ const { data: resultDesc } = filterSortAndPaginate(
273
+ data,
274
+ {
275
+ sort: { field: 'date', direction: 'desc' },
276
+ },
277
+ fields
278
+ );
279
+ expect( resultDesc ).toHaveLength( 11 );
280
+ expect( resultDesc[ 0 ].title ).toBe( 'NASA' );
281
+ expect( resultDesc[ 1 ].title ).toBe( 'Earth' );
282
+ expect( resultDesc[ 9 ].title ).toBe( 'Space' );
283
+ expect( resultDesc[ 10 ].title ).toBe( 'Jupiter' );
284
+
285
+ const { data: resultAsc } = filterSortAndPaginate(
286
+ data,
287
+ {
288
+ sort: { field: 'date', direction: 'asc' },
289
+ },
290
+ fields
291
+ );
292
+ expect( resultAsc ).toHaveLength( 11 );
293
+ expect( resultAsc[ 0 ].title ).toBe( 'Jupiter' );
294
+ expect( resultAsc[ 1 ].title ).toBe( 'Space' );
295
+ expect( resultAsc[ 9 ].title ).toBe( 'Earth' );
296
+ expect( resultAsc[ 10 ].title ).toBe( 'NASA' );
297
+ } );
298
+
271
299
  it( 'should sort untyped fields if the value is a number', () => {
272
300
  const { data: result } = filterSortAndPaginate(
273
301
  data,
package/src/types.ts CHANGED
@@ -1,12 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import type {
5
- ReactElement,
6
- ComponentType,
7
- Dispatch,
8
- SetStateAction,
9
- } from 'react';
4
+ import type { ReactElement, ComponentType } from 'react';
10
5
 
11
6
  /**
12
7
  * Internal dependencies
@@ -47,14 +42,32 @@ export type Operator =
47
42
  | 'isAll'
48
43
  | 'isNotAll';
49
44
 
50
- export type ItemRecord = Record< string, unknown >;
51
-
52
- export type FieldType = 'text' | 'integer';
45
+ export type FieldType = 'text' | 'integer' | 'datetime';
53
46
 
54
47
  export type ValidationContext = {
55
48
  elements?: Option[];
56
49
  };
57
50
 
51
+ /**
52
+ * An abstract interface for Field based on the field type.
53
+ */
54
+ export type FieldTypeDefinition< Item > = {
55
+ /**
56
+ * Callback used to sort the field.
57
+ */
58
+ sort: ( a: Item, b: Item, direction: SortDirection ) => number;
59
+
60
+ /**
61
+ * Callback used to validate the field.
62
+ */
63
+ isValid: ( item: Item, context?: ValidationContext ) => boolean;
64
+
65
+ /**
66
+ * Callback used to render an edit control for the field or control name.
67
+ */
68
+ Edit: ComponentType< DataFormControlProps< Item > > | string;
69
+ };
70
+
58
71
  /**
59
72
  * A dataview field for a specific property of a data type.
60
73
  */
@@ -74,6 +87,12 @@ export type Field< Item > = {
74
87
  */
75
88
  label?: string;
76
89
 
90
+ /**
91
+ * The header of the field. Defaults to the label.
92
+ * It allows the usage of a React Element to render the field labels.
93
+ */
94
+ header?: string | ReactElement;
95
+
77
96
  /**
78
97
  * A description of the field.
79
98
  */
@@ -92,7 +111,7 @@ export type Field< Item > = {
92
111
  /**
93
112
  * Callback used to render an edit control for the field.
94
113
  */
95
- Edit?: ComponentType< DataFormControlProps< Item > >;
114
+ Edit?: ComponentType< DataFormControlProps< Item > > | string;
96
115
 
97
116
  /**
98
117
  * Callback used to sort the field.
@@ -128,29 +147,24 @@ export type Field< Item > = {
128
147
  * Filter config for the field.
129
148
  */
130
149
  filterBy?: FilterByConfig | undefined;
131
- } & ( Item extends ItemRecord
132
- ? {
133
- /**
134
- * Callback used to retrieve the value of the field from the item.
135
- * Defaults to `item[ field.id ]`.
136
- */
137
- getValue?: ( args: { item: Item } ) => any;
138
- }
139
- : {
140
- /**
141
- * Callback used to retrieve the value of the field from the item.
142
- * Defaults to `item[ field.id ]`.
143
- */
144
- getValue: ( args: { item: Item } ) => any;
145
- } );
150
+
151
+ /**
152
+ * Callback used to retrieve the value of the field from the item.
153
+ * Defaults to `item[ field.id ]`.
154
+ */
155
+ getValue?: ( args: { item: Item } ) => any;
156
+ };
146
157
 
147
158
  export type NormalizedField< Item > = Field< Item > & {
148
159
  label: string;
160
+ header: string | ReactElement;
149
161
  getValue: ( args: { item: Item } ) => any;
150
162
  render: ComponentType< { item: Item } >;
151
163
  Edit: ComponentType< DataFormControlProps< Item > >;
152
164
  sort: ( a: Item, b: Item, direction: SortDirection ) => number;
153
165
  isValid: ( item: Item, context?: ValidationContext ) => boolean;
166
+ enableHiding: boolean;
167
+ enableSorting: boolean;
154
168
  };
155
169
 
156
170
  /**
@@ -171,7 +185,7 @@ export type Form = {
171
185
  export type DataFormControlProps< Item > = {
172
186
  data: Item;
173
187
  field: NormalizedField< Item >;
174
- onChange: Dispatch< SetStateAction< Item > >;
188
+ onChange: ( value: Record< string, any > ) => void;
175
189
  hideLabelFromVision?: boolean;
176
190
  };
177
191
 
@@ -284,6 +298,8 @@ export interface CombinedField {
284
298
 
285
299
  label: string;
286
300
 
301
+ header?: string | ReactElement;
302
+
287
303
  /**
288
304
  * The fields to use as columns.
289
305
  */
@@ -421,6 +437,18 @@ interface ActionBase< Item > {
421
437
  * Whether the action can be used as a bulk action.
422
438
  */
423
439
  supportsBulk?: boolean;
440
+
441
+ /**
442
+ * The context in which the action is visible.
443
+ * This is only a "meta" information for now.
444
+ */
445
+ context?: 'list' | 'single';
446
+ }
447
+
448
+ export interface RenderModalProps< Item > {
449
+ items: Item[];
450
+ closeModal?: () => void;
451
+ onActionPerformed?: ( items: Item[] ) => void;
424
452
  }
425
453
 
426
454
  export interface ActionModal< Item > extends ActionBase< Item > {
@@ -431,11 +459,7 @@ export interface ActionModal< Item > extends ActionBase< Item > {
431
459
  items,
432
460
  closeModal,
433
461
  onActionPerformed,
434
- }: {
435
- items: Item[];
436
- closeModal?: () => void;
437
- onActionPerformed?: ( items: Item[] ) => void;
438
- } ) => ReactElement;
462
+ }: RenderModalProps< Item > ) => ReactElement;
439
463
 
440
464
  /**
441
465
  * Whether to hide the modal header.
@@ -504,5 +528,5 @@ export interface DataFormProps< Item > {
504
528
  data: Item;
505
529
  fields: Field< Item >[];
506
530
  form: Form;
507
- onChange: Dispatch< SetStateAction< Item > >;
531
+ onChange: ( value: Record< string, any > ) => void;
508
532
  }