@firecms/core 3.0.1 → 3.1.0-canary.768c91f

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 (185) hide show
  1. package/README.md +1 -1
  2. package/dist/components/AIIcon.d.ts +16 -0
  3. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +7 -1
  4. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
  5. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +14 -0
  6. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +6 -0
  7. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +5 -4
  8. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +6 -0
  9. package/dist/components/EntityCollectionTable/internal/popup_field/useDraggable.d.ts +2 -2
  10. package/dist/components/EntityCollectionView/Board.d.ts +2 -0
  11. package/dist/components/EntityCollectionView/BoardColumn.d.ts +42 -0
  12. package/dist/components/EntityCollectionView/BoardColumnTitle.d.ts +9 -0
  13. package/dist/components/EntityCollectionView/BoardSortableList.d.ts +14 -0
  14. package/dist/components/EntityCollectionView/EntityBoardCard.d.ts +26 -0
  15. package/dist/components/EntityCollectionView/EntityCard.d.ts +19 -0
  16. package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +20 -0
  17. package/dist/components/EntityCollectionView/EntityCollectionCardView.d.ts +31 -0
  18. package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +2 -2
  19. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +7 -3
  20. package/dist/components/EntityCollectionView/FiltersDialog.d.ts +14 -0
  21. package/dist/components/EntityCollectionView/ViewModeToggle.d.ts +44 -0
  22. package/dist/components/EntityCollectionView/board_types.d.ts +105 -0
  23. package/dist/components/EntityCollectionView/useBoardDataController.d.ts +60 -0
  24. package/dist/components/ErrorBoundary.d.ts +1 -1
  25. package/dist/components/SelectableTable/SelectableTable.d.ts +5 -1
  26. package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +2 -1
  27. package/dist/components/VirtualTable/VirtualTableCell.d.ts +6 -0
  28. package/dist/components/VirtualTable/VirtualTableHeader.d.ts +3 -1
  29. package/dist/components/VirtualTable/VirtualTableHeaderRow.d.ts +1 -1
  30. package/dist/components/VirtualTable/VirtualTableProps.d.ts +11 -0
  31. package/dist/components/VirtualTable/fields/VirtualTableDateField.d.ts +1 -0
  32. package/dist/components/VirtualTable/types.d.ts +2 -0
  33. package/dist/components/index.d.ts +3 -0
  34. package/dist/contexts/index.d.ts +10 -0
  35. package/dist/core/DrawerNavigationGroup.d.ts +45 -0
  36. package/dist/core/index.d.ts +1 -0
  37. package/dist/form/components/ErrorFocus.d.ts +1 -1
  38. package/dist/form/validation.d.ts +3 -2
  39. package/dist/hooks/useBreadcrumbsController.d.ts +16 -0
  40. package/dist/hooks/useCollapsedGroups.d.ts +4 -1
  41. package/dist/index.es.js +5266 -1578
  42. package/dist/index.es.js.map +1 -1
  43. package/dist/index.umd.js +5260 -1573
  44. package/dist/index.umd.js.map +1 -1
  45. package/dist/internal/useRestoreScroll.d.ts +1 -1
  46. package/dist/preview/PropertyPreviewProps.d.ts +5 -0
  47. package/dist/preview/components/DatePreview.d.ts +13 -3
  48. package/dist/preview/components/ImagePreview.d.ts +5 -1
  49. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  50. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  51. package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +1 -1
  52. package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +1 -1
  53. package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +1 -1
  54. package/dist/types/analytics.d.ts +1 -1
  55. package/dist/types/collections.d.ts +50 -2
  56. package/dist/types/datasource.d.ts +0 -1
  57. package/dist/types/plugins.d.ts +62 -1
  58. package/dist/types/properties.d.ts +259 -4
  59. package/dist/util/__tests__/conditions.test.d.ts +1 -0
  60. package/dist/util/__tests__/objects.test.d.ts +1 -0
  61. package/dist/util/conditions.d.ts +26 -0
  62. package/dist/util/entities.d.ts +2 -3
  63. package/dist/util/index.d.ts +2 -1
  64. package/dist/util/property_utils.d.ts +2 -1
  65. package/dist/util/resolutions.d.ts +3 -3
  66. package/package.json +14 -11
  67. package/src/app/Scaffold.tsx +14 -15
  68. package/src/components/AIIcon.tsx +39 -0
  69. package/src/components/ArrayContainer.tsx +1 -4
  70. package/src/components/ClearFilterSortButton.tsx +19 -16
  71. package/src/components/ConfirmationDialog.tsx +0 -2
  72. package/src/components/DeleteEntityDialog.tsx +2 -4
  73. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +74 -41
  74. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +130 -79
  75. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +121 -104
  76. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +132 -103
  77. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +20 -42
  78. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +90 -49
  79. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +1 -1
  80. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +11 -11
  81. package/src/components/EntityCollectionView/Board.tsx +324 -0
  82. package/src/components/EntityCollectionView/BoardColumn.tsx +158 -0
  83. package/src/components/EntityCollectionView/BoardColumnTitle.tsx +45 -0
  84. package/src/components/EntityCollectionView/BoardSortableList.tsx +172 -0
  85. package/src/components/EntityCollectionView/EntityBoardCard.tsx +212 -0
  86. package/src/components/EntityCollectionView/EntityCard.tsx +235 -0
  87. package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +733 -0
  88. package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +244 -0
  89. package/src/components/EntityCollectionView/EntityCollectionView.tsx +519 -203
  90. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +31 -19
  91. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +84 -15
  92. package/src/components/EntityCollectionView/FiltersDialog.tsx +249 -0
  93. package/src/components/EntityCollectionView/ViewModeToggle.tsx +199 -0
  94. package/src/components/EntityCollectionView/board_types.ts +113 -0
  95. package/src/components/EntityCollectionView/useBoardDataController.tsx +490 -0
  96. package/src/components/ErrorTooltip.tsx +2 -1
  97. package/src/components/HomePage/DefaultHomePage.tsx +47 -10
  98. package/src/components/HomePage/HomePageDnD.tsx +56 -41
  99. package/src/components/HomePage/NavigationCard.tsx +20 -18
  100. package/src/components/HomePage/NavigationGroup.tsx +17 -16
  101. package/src/components/HomePage/RenameGroupDialog.tsx +0 -2
  102. package/src/components/HomePage/SmallNavigationCard.tsx +10 -9
  103. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +3 -10
  104. package/src/components/ReferenceWidget.tsx +2 -4
  105. package/src/components/SelectableTable/SelectableTable.tsx +75 -67
  106. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +7 -6
  107. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +39 -40
  108. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +38 -38
  109. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +49 -58
  110. package/src/components/UnsavedChangesDialog.tsx +0 -2
  111. package/src/components/UserDisplay.tsx +4 -4
  112. package/src/components/VirtualTable/VirtualTable.tsx +272 -118
  113. package/src/components/VirtualTable/VirtualTableCell.tsx +18 -2
  114. package/src/components/VirtualTable/VirtualTableHeader.tsx +59 -50
  115. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +158 -42
  116. package/src/components/VirtualTable/VirtualTableProps.tsx +14 -1
  117. package/src/components/VirtualTable/VirtualTableRow.tsx +1 -1
  118. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +3 -0
  119. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +19 -6
  120. package/src/components/VirtualTable/types.tsx +2 -0
  121. package/src/components/common/useColumnsIds.tsx +95 -3
  122. package/src/components/index.tsx +4 -0
  123. package/src/contexts/BreacrumbsContext.tsx +15 -8
  124. package/src/contexts/index.ts +10 -0
  125. package/src/core/DefaultAppBar.tsx +40 -27
  126. package/src/core/DefaultDrawer.tsx +42 -56
  127. package/src/core/DrawerNavigationGroup.tsx +118 -0
  128. package/src/core/DrawerNavigationItem.tsx +4 -3
  129. package/src/core/EntityEditView.tsx +41 -43
  130. package/src/core/EntitySidePanel.tsx +28 -26
  131. package/src/core/SideDialogs.tsx +4 -2
  132. package/src/core/field_configs.tsx +14 -9
  133. package/src/core/index.tsx +1 -0
  134. package/src/form/EntityForm.tsx +69 -60
  135. package/src/form/PropertyFieldBinding.tsx +61 -46
  136. package/src/form/components/ErrorFocus.tsx +3 -3
  137. package/src/form/components/StorageItemPreview.tsx +2 -1
  138. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +0 -1
  139. package/src/form/field_bindings/DateTimeFieldBinding.tsx +17 -16
  140. package/src/form/field_bindings/KeyValueFieldBinding.tsx +0 -1
  141. package/src/form/field_bindings/MapFieldBinding.tsx +69 -67
  142. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +22 -18
  143. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +83 -83
  144. package/src/form/field_bindings/TextFieldBinding.tsx +71 -35
  145. package/src/form/validation.ts +245 -160
  146. package/src/hooks/useBreadcrumbsController.tsx +18 -0
  147. package/src/hooks/useBuildNavigationController.tsx +46 -23
  148. package/src/hooks/useCollapsedGroups.ts +12 -4
  149. package/src/hooks/useValidateAuthenticator.tsx +1 -1
  150. package/src/internal/useBuildDataSource.ts +68 -34
  151. package/src/internal/useBuildSideDialogsController.tsx +11 -8
  152. package/src/internal/useBuildSideEntityController.tsx +2 -4
  153. package/src/internal/useRestoreScroll.tsx +26 -14
  154. package/src/preview/PropertyPreview.tsx +41 -32
  155. package/src/preview/PropertyPreviewProps.tsx +6 -0
  156. package/src/preview/components/DatePreview.tsx +72 -4
  157. package/src/preview/components/EmptyValue.tsx +1 -1
  158. package/src/preview/components/ImagePreview.tsx +37 -21
  159. package/src/preview/components/StorageThumbnail.tsx +16 -12
  160. package/src/preview/components/UrlComponentPreview.tsx +28 -25
  161. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +9 -7
  162. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +11 -9
  163. package/src/preview/property_previews/ArrayPropertyPreview.tsx +26 -24
  164. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +61 -56
  165. package/src/routes/CustomCMSRoute.tsx +1 -0
  166. package/src/routes/FireCMSRoute.tsx +26 -13
  167. package/src/types/analytics.ts +10 -0
  168. package/src/types/collections.ts +57 -3
  169. package/src/types/datasource.ts +54 -56
  170. package/src/types/plugins.tsx +69 -1
  171. package/src/types/properties.ts +347 -27
  172. package/src/util/__tests__/conditions.test.ts +506 -0
  173. package/src/util/__tests__/objects.test.ts +196 -0
  174. package/src/util/callbacks.ts +6 -3
  175. package/src/util/collections.ts +51 -6
  176. package/src/util/conditions.ts +339 -0
  177. package/src/util/entities.ts +29 -30
  178. package/src/util/entity_cache.ts +2 -1
  179. package/src/util/index.ts +2 -1
  180. package/src/util/join_collections.ts +10 -8
  181. package/src/util/objects.ts +31 -13
  182. package/src/util/{references.ts → previews.ts} +16 -2
  183. package/src/util/property_utils.tsx +37 -11
  184. package/src/util/resolutions.ts +62 -58
  185. /package/dist/util/{references.d.ts → previews.d.ts} +0 -0
@@ -42,45 +42,48 @@ import { getRowHeight } from "../common/table_height";
42
42
  * @group Components
43
43
  */
44
44
  export const EntityCollectionTable = function EntityCollectionTable<M extends Record<string, any> = any, USER extends User = any>
45
- ({
46
- className,
47
- style,
48
- forceFilter,
49
- actionsStart,
50
- actions,
51
- title,
52
- tableRowActionsBuilder,
53
- uniqueFieldValidator,
54
- getPropertyFor,
55
- onValueChange,
56
- selectionController,
57
- highlightedEntities,
58
- onEntityClick,
59
- onColumnResize,
60
- initialScroll,
61
- onScroll,
62
- onSizeChanged,
63
- textSearchEnabled = false,
64
- hoverRow = true,
65
- inlineEditing = false,
66
- additionalFields,
67
- displayedColumnIds,
68
- defaultSize,
69
- properties,
70
- tableController,
71
- filterable = true,
72
- sortable = true,
73
- endAdornment,
74
- AddColumnComponent,
75
- AdditionalHeaderWidget,
76
- additionalIDHeaderWidget,
77
- emptyComponent,
78
- getIdColumnWidth,
79
- onTextSearchClick,
80
- textSearchLoading,
81
- enablePopupIcon,
82
- openEntityMode = "side_panel"
83
- }: EntityCollectionTableProps<M>) {
45
+ ({
46
+ className,
47
+ style,
48
+ forceFilter,
49
+ actionsStart,
50
+ actions,
51
+ viewModeToggle,
52
+ title,
53
+ tableRowActionsBuilder,
54
+ uniqueFieldValidator,
55
+ getPropertyFor,
56
+ onValueChange,
57
+ selectionController,
58
+ highlightedEntities,
59
+ onEntityClick,
60
+ onColumnResize,
61
+ initialScroll,
62
+ onScroll,
63
+ onSizeChanged,
64
+ textSearchEnabled = false,
65
+ hoverRow = true,
66
+ inlineEditing = false,
67
+ additionalFields,
68
+ displayedColumnIds,
69
+ defaultSize,
70
+ properties,
71
+ tableController,
72
+ filterable = true,
73
+ sortable = true,
74
+ endAdornment,
75
+ AddColumnComponent,
76
+ AdditionalHeaderWidget,
77
+ additionalIDHeaderWidget,
78
+ emptyComponent,
79
+ getIdColumnWidth,
80
+ onTextSearchClick,
81
+ textSearchLoading,
82
+ enablePopupIcon,
83
+ openEntityMode = "side_panel",
84
+ onColumnsOrderChange,
85
+ hideToolbar = false
86
+ }: EntityCollectionTableProps<M>) {
84
87
 
85
88
  const ref = useRef<HTMLDivElement>(null);
86
89
 
@@ -91,6 +94,13 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
91
94
 
92
95
  const [size, setSize] = React.useState<CollectionSize>(defaultSize ?? "m");
93
96
 
97
+ // Sync internal size with defaultSize prop when it changes
98
+ React.useEffect(() => {
99
+ if (defaultSize) {
100
+ setSize(defaultSize);
101
+ }
102
+ }, [defaultSize]);
103
+
94
104
  const updateSize = useCallback((size: CollectionSize) => {
95
105
  if (onSizeChanged)
96
106
  onSizeChanged(size);
@@ -110,11 +120,17 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
110
120
  const customFieldValidator: CustomFieldValidator | undefined = uniqueFieldValidator;
111
121
 
112
122
  const propertyCellRenderer = ({
113
- column,
114
- columnIndex,
115
- rowData,
116
- rowIndex
117
- }: CellRendererParams<any>) => {
123
+ column,
124
+ columnIndex,
125
+ rowData,
126
+ rowIndex,
127
+ sortableNodeRef,
128
+ sortableStyle,
129
+ sortableAttributes,
130
+ isDragging,
131
+ isDraggable,
132
+ frozen
133
+ }: CellRendererParams<any>) => {
118
134
 
119
135
  const entity: Entity<M> = rowData;
120
136
 
@@ -150,7 +166,13 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
150
166
  entity={entity}
151
167
  disabled={disabled}
152
168
  enablePopupIcon={enablePopupIcon}
153
- path={entity.path}/>
169
+ path={entity.path}
170
+ sortableNodeRef={sortableNodeRef}
171
+ sortableStyle={sortableStyle}
172
+ sortableAttributes={sortableAttributes}
173
+ isDragging={isDragging}
174
+ isDraggable={isDraggable}
175
+ frozen={frozen} />
154
176
  : renderSkeletonText()
155
177
  }
156
178
  </ErrorBoundary>);
@@ -158,10 +180,16 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
158
180
  };
159
181
 
160
182
  const additionalCellRenderer = useCallback(({
161
- column,
162
- rowData,
163
- width
164
- }: CellRendererParams<any>) => {
183
+ column,
184
+ rowData,
185
+ width,
186
+ sortableNodeRef,
187
+ sortableStyle,
188
+ sortableAttributes,
189
+ isDragging,
190
+ isDraggable,
191
+ frozen
192
+ }: CellRendererParams<any>) => {
165
193
 
166
194
  const entity: Entity<M> = rowData;
167
195
 
@@ -178,7 +206,7 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
178
206
  }
179
207
 
180
208
  const child: React.ReactNode = Builder
181
- ? <Builder entity={entity} context={context}/>
209
+ ? <Builder entity={entity} context={context} />
182
210
  : <>
183
211
  {additionalField.value?.({
184
212
  entity,
@@ -198,6 +226,12 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
198
226
  allowScroll={false}
199
227
  showExpandIcon={false}
200
228
  disabledTooltip={"This column can't be edited directly"}
229
+ sortableNodeRef={sortableNodeRef}
230
+ sortableStyle={sortableStyle}
231
+ sortableAttributes={sortableAttributes}
232
+ isDragging={isDragging}
233
+ isDraggable={isDraggable}
234
+ frozen={frozen}
201
235
  >
202
236
  <ErrorBoundary>
203
237
  {child}
@@ -215,8 +249,14 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
215
249
  AdditionalHeaderWidget
216
250
  });
217
251
 
252
+ // Get keys from property columns to filter out duplicate additional fields
253
+ const propertyColumnKeys = new Set(columnsResult.map(col => col.key));
254
+
218
255
  const additionalTableColumns: VirtualTableColumn[] = additionalFields
219
- ? additionalFields.map((additionalField) =>
256
+ // Filter out additional fields whose key already exists in property columns
257
+ ? additionalFields
258
+ .filter((additionalField) => !propertyColumnKeys.has(additionalField.key))
259
+ .map((additionalField) =>
220
260
  ({
221
261
  key: additionalField.key,
222
262
  align: "left",
@@ -265,11 +305,16 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
265
305
  });
266
306
  else
267
307
  return <EntityCollectionRowActions entity={props.rowData}
268
- width={column.width}
269
- frozen={column.frozen}
270
- isSelected={false}
271
- size={size}
272
- openEntityMode={openEntityMode}/>;
308
+ width={column.width}
309
+ frozen={column.frozen}
310
+ isSelected={false}
311
+ size={size}
312
+ openEntityMode={openEntityMode}
313
+ sortableNodeRef={props.sortableNodeRef}
314
+ sortableStyle={props.sortableStyle}
315
+ sortableAttributes={props.sortableAttributes}
316
+ isDragging={props.isDragging}
317
+ isDraggable={props.isDraggable} />;
273
318
  } else if (additionalFieldsMap[columnKey]) {
274
319
  return additionalCellRenderer(props);
275
320
  } else if (props.columnIndex < columns.length + 1) {
@@ -286,8 +331,14 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
286
331
  value={null}
287
332
  align={"left"}
288
333
  fullHeight={false}
289
- disabled={true}>
290
- <ErrorView error={e}/>
334
+ disabled={true}
335
+ sortableNodeRef={props.sortableNodeRef}
336
+ sortableStyle={props.sortableStyle}
337
+ sortableAttributes={props.sortableAttributes}
338
+ isDragging={props.isDragging}
339
+ isDraggable={props.isDraggable}
340
+ frozen={props.frozen}>
341
+ <ErrorView error={e} />
291
342
  </EntityTableCell>;
292
343
  }
293
344
  }, [tableRowActionsBuilder, additionalCellRenderer, propertyCellRenderer, size]);
@@ -295,36 +346,36 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
295
346
  return (
296
347
 
297
348
  <div ref={ref}
298
- style={style}
299
- className={cls("h-full w-full flex flex-col bg-white dark:bg-surface-950", className)}>
349
+ style={style}
350
+ className={cls("h-full w-full flex flex-col bg-white dark:bg-surface-950", className)}>
300
351
 
301
- <CollectionTableToolbar
352
+ {!hideToolbar && <CollectionTableToolbar
302
353
  onTextSearch={textSearchEnabled ? onTextSearch : undefined}
303
354
  textSearchLoading={textSearchLoading}
304
355
  onTextSearchClick={textSearchEnabled ? onTextSearchClick : undefined}
305
- size={size}
306
- onSizeChanged={updateSize}
307
356
  title={title}
308
357
  actionsStart={actionsStart}
309
358
  actions={actions}
310
- loading={tableController.dataLoading}/>
359
+ viewModeToggle={viewModeToggle}
360
+ loading={tableController.dataLoading} />}
311
361
 
312
362
  <SelectableTable columns={columns}
313
- size={size}
314
- inlineEditing={inlineEditing}
315
- cellRenderer={cellRenderer}
316
- onEntityClick={onEntityClick}
317
- highlightedRow={(entity: Entity<M>) => Boolean(selectedEntities?.find(e => e.id === entity.id && e.path === entity.path))}
318
- tableController={tableController}
319
- onValueChange={onValueChange}
320
- initialScroll={initialScroll}
321
- onScroll={onScroll}
322
- onColumnResize={onColumnResize}
323
- hoverRow={hoverRow}
324
- filterable={filterable}
325
- emptyComponent={emptyComponent}
326
- endAdornment={endAdornment}
327
- AddColumnComponent={AddColumnComponent}/>
363
+ size={size}
364
+ inlineEditing={inlineEditing}
365
+ cellRenderer={cellRenderer}
366
+ onEntityClick={onEntityClick}
367
+ highlightedRow={(entity: Entity<M>) => Boolean(selectedEntities?.find(e => e.id === entity.id && e.path === entity.path))}
368
+ tableController={tableController}
369
+ onValueChange={onValueChange}
370
+ initialScroll={initialScroll}
371
+ onScroll={onScroll}
372
+ onColumnResize={onColumnResize}
373
+ hoverRow={hoverRow}
374
+ filterable={filterable}
375
+ emptyComponent={emptyComponent}
376
+ endAdornment={endAdornment}
377
+ AddColumnComponent={AddColumnComponent}
378
+ onColumnsOrderChange={onColumnsOrderChange} />
328
379
 
329
380
  </div>
330
381
  );
@@ -11,6 +11,7 @@ import {
11
11
  User
12
12
  } from "../../types";
13
13
  import { OnCellValueChange, OnColumnResizeParams, UniqueFieldValidator } from "../common/types";
14
+ import { VirtualTableColumn } from "../VirtualTable";
14
15
 
15
16
  /**
16
17
  * @group Collection components
@@ -18,142 +19,158 @@ import { OnCellValueChange, OnColumnResizeParams, UniqueFieldValidator } from ".
18
19
  export type EntityCollectionTableProps<M extends Record<string, any>,
19
20
  USER extends User = User> = {
20
21
 
21
- className?: string;
22
-
23
- style?: React.CSSProperties;
24
-
25
- /**
26
- * Display these entities as selected
27
- */
28
- selectionController: SelectionController<M>;
29
-
30
- /**
31
- * List of entities that will be displayed as selected;
32
- */
33
- highlightedEntities?: Entity<M>[];
22
+ className?: string;
23
+
24
+ style?: React.CSSProperties;
25
+
26
+ /**
27
+ * Display these entities as selected
28
+ */
29
+ selectionController: SelectionController<M>;
30
+
31
+ /**
32
+ * List of entities that will be displayed as selected;
33
+ */
34
+ highlightedEntities?: Entity<M>[];
35
+
36
+ /**
37
+ * Override the title in the toolbar
38
+ */
39
+ title?: React.ReactNode;
34
40
 
35
- /**
36
- * Override the title in the toolbar
37
- */
38
- title?: React.ReactNode;
39
-
40
- /**
41
- * Additional component that renders actions such as buttons in the
42
- * collection toolbar, displayed on the left side
43
- */
44
- actionsStart?: React.ReactNode;
41
+ /**
42
+ * Additional component that renders actions such as buttons in the
43
+ * collection toolbar, displayed on the left side
44
+ */
45
+ actionsStart?: React.ReactNode;
45
46
 
46
- /**
47
- * Callback when a cell value changes.
48
- */
49
- onValueChange?: OnCellValueChange<any, M>;
47
+ /**
48
+ * Callback when a cell value changes.
49
+ */
50
+ onValueChange?: OnCellValueChange<any, M>;
50
51
 
51
- uniqueFieldValidator?: UniqueFieldValidator;
52
+ uniqueFieldValidator?: UniqueFieldValidator;
52
53
 
53
- /**
54
- * Builder for creating the buttons in each row
55
- * @param entity
56
- * @param size
57
- */
58
- tableRowActionsBuilder?: (params: {
59
- entity: Entity<M>,
60
- size: CollectionSize,
61
- width: number,
62
- frozen?: boolean
63
- }) => React.ReactNode;
54
+ /**
55
+ * Builder for creating the buttons in each row
56
+ * @param entity
57
+ * @param size
58
+ */
59
+ tableRowActionsBuilder?: (params: {
60
+ entity: Entity<M>,
61
+ size: CollectionSize,
62
+ width: number,
63
+ frozen?: boolean
64
+ }) => React.ReactNode;
64
65
 
65
- /**
66
- * Callback when anywhere on the table is clicked
67
- */
68
- onEntityClick?(entity: Entity<M>): void;
66
+ /**
67
+ * Callback when anywhere on the table is clicked
68
+ */
69
+ onEntityClick?(entity: Entity<M>): void;
69
70
 
70
- /**
71
- * Callback when a column is resized
72
- */
73
- onColumnResize?(params: OnColumnResizeParams): void;
71
+ /**
72
+ * Callback when a column is resized
73
+ */
74
+ onColumnResize?(params: OnColumnResizeParams): void;
74
75
 
75
- /**
76
- * Initial scroll position
77
- */
78
- initialScroll?: number;
76
+ /**
77
+ * Initial scroll position
78
+ */
79
+ initialScroll?: number;
79
80
 
80
- /**
81
- * Callback when the table is scrolled
82
- * @param props
83
- */
84
- onScroll?: (props: {
85
- scrollDirection: "forward" | "backward",
86
- scrollOffset: number,
87
- scrollUpdateWasRequested: boolean
88
- }) => void;
81
+ /**
82
+ * Callback when the table is scrolled
83
+ * @param props
84
+ */
85
+ onScroll?: (props: {
86
+ scrollDirection: "forward" | "backward",
87
+ scrollOffset: number,
88
+ scrollUpdateWasRequested: boolean
89
+ }) => void;
89
90
 
90
- /**
91
- * Callback when the selected size of the table is changed
92
- */
93
- onSizeChanged?(size: CollectionSize): void;
91
+ /**
92
+ * Callback when the selected size of the table is changed
93
+ */
94
+ onSizeChanged?(size: CollectionSize): void;
94
95
 
95
- /**
96
- * Should apply a different style to a row when hovering
97
- */
98
- hoverRow?: boolean;
96
+ /**
97
+ * Should apply a different style to a row when hovering
98
+ */
99
+ hoverRow?: boolean;
99
100
 
100
- /**
101
- * Additional component that renders actions such as buttons in the
102
- * collection toolbar, displayed on the right side
103
- */
104
- actions?: React.ReactNode;
101
+ /**
102
+ * Additional component that renders actions such as buttons in the
103
+ * collection toolbar, displayed on the right side
104
+ */
105
+ actions?: React.ReactNode;
105
106
 
106
- /**
107
- * Controller holding the logic for the table
108
- * {@link useDataSourceTableController}
109
- * {@link EntityTableController}
110
- */
111
- tableController: EntityTableController<M>;
107
+ /**
108
+ * View mode toggle button, positioned left of the search bar.
109
+ */
110
+ viewModeToggle?: React.ReactNode;
112
111
 
113
- displayedColumnIds?: PropertyColumnConfig[];
112
+ /**
113
+ * Controller holding the logic for the table
114
+ * {@link useDataSourceTableController}
115
+ * {@link EntityTableController}
116
+ */
117
+ tableController: EntityTableController<M>;
114
118
 
115
- forceFilter?: FilterValues<Extract<keyof M, string>>;
119
+ displayedColumnIds?: PropertyColumnConfig[];
116
120
 
117
- textSearchEnabled?: boolean;
121
+ forceFilter?: FilterValues<Extract<keyof M, string>>;
118
122
 
119
- inlineEditing?: boolean;
123
+ textSearchEnabled?: boolean;
120
124
 
121
- additionalFields?: AdditionalFieldDelegate<M, USER>[];
125
+ inlineEditing?: boolean;
122
126
 
123
- defaultSize?: CollectionSize;
127
+ additionalFields?: AdditionalFieldDelegate<M, USER>[];
124
128
 
125
- properties: ResolvedProperties<M>;
129
+ defaultSize?: CollectionSize;
126
130
 
127
- getPropertyFor?: (props: GetPropertyForProps<M>) => ResolvedProperties<M>[string];
131
+ properties: ResolvedProperties<M>;
128
132
 
129
- filterable?: boolean;
133
+ getPropertyFor?: (props: GetPropertyForProps<M>) => ResolvedProperties<M>[string];
130
134
 
131
- sortable?: boolean;
135
+ filterable?: boolean;
132
136
 
133
- endAdornment?: React.ReactNode;
137
+ sortable?: boolean;
134
138
 
135
- AdditionalHeaderWidget?: React.ComponentType<{
136
- property: ResolvedProperty,
137
- propertyKey: string,
138
- onHover: boolean,
139
- }>;
139
+ endAdornment?: React.ReactNode;
140
140
 
141
- AddColumnComponent?: React.ComponentType;
141
+ AdditionalHeaderWidget?: React.ComponentType<{
142
+ property: ResolvedProperty,
143
+ propertyKey: string,
144
+ onHover: boolean,
145
+ }>;
142
146
 
143
- additionalIDHeaderWidget?: React.ReactNode;
147
+ AddColumnComponent?: React.ComponentType;
144
148
 
145
- emptyComponent?: React.ReactNode;
149
+ additionalIDHeaderWidget?: React.ReactNode;
146
150
 
147
- getIdColumnWidth?: () => number;
151
+ emptyComponent?: React.ReactNode;
148
152
 
149
- onTextSearchClick?: () => void;
153
+ getIdColumnWidth?: () => number;
150
154
 
151
- textSearchLoading?: boolean;
155
+ onTextSearchClick?: () => void;
152
156
 
153
- enablePopupIcon: boolean;
157
+ textSearchLoading?: boolean;
154
158
 
155
- openEntityMode?: "side_panel" | "full_screen";
156
- };
159
+ enablePopupIcon: boolean;
160
+
161
+ openEntityMode?: "side_panel" | "full_screen";
162
+
163
+ /**
164
+ * Callback when columns are reordered via drag-and-drop
165
+ */
166
+ onColumnsOrderChange?: (columns: VirtualTableColumn[]) => void;
167
+
168
+ /**
169
+ * If true, the internal toolbar will not be rendered.
170
+ * Used when the parent component renders its own toolbar.
171
+ */
172
+ hideToolbar?: boolean;
173
+ };
157
174
 
158
175
  export type GetPropertyForProps<M extends Record<string, any>> = {
159
176
  propertyKey: string,