@firecms/core 3.0.1 → 3.1.0-canary.7d91b7c
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/README.md +1 -1
- package/dist/components/AIIcon.d.ts +16 -0
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +7 -1
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +14 -0
- package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +6 -0
- package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +5 -4
- package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +6 -0
- package/dist/components/EntityCollectionTable/internal/popup_field/useDraggable.d.ts +2 -2
- package/dist/components/EntityCollectionView/Board.d.ts +2 -0
- package/dist/components/EntityCollectionView/BoardColumn.d.ts +42 -0
- package/dist/components/EntityCollectionView/BoardColumnTitle.d.ts +9 -0
- package/dist/components/EntityCollectionView/BoardSortableList.d.ts +14 -0
- package/dist/components/EntityCollectionView/EntityBoardCard.d.ts +26 -0
- package/dist/components/EntityCollectionView/EntityCard.d.ts +19 -0
- package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +20 -0
- package/dist/components/EntityCollectionView/EntityCollectionCardView.d.ts +31 -0
- package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +2 -2
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +7 -3
- package/dist/components/EntityCollectionView/FiltersDialog.d.ts +14 -0
- package/dist/components/EntityCollectionView/ViewModeToggle.d.ts +44 -0
- package/dist/components/EntityCollectionView/board_types.d.ts +105 -0
- package/dist/components/EntityCollectionView/useBoardDataController.d.ts +60 -0
- package/dist/components/ErrorBoundary.d.ts +1 -1
- package/dist/components/SelectableTable/SelectableTable.d.ts +5 -1
- package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +2 -1
- package/dist/components/VirtualTable/VirtualTableCell.d.ts +6 -0
- package/dist/components/VirtualTable/VirtualTableHeader.d.ts +3 -1
- package/dist/components/VirtualTable/VirtualTableHeaderRow.d.ts +1 -1
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +11 -0
- package/dist/components/VirtualTable/fields/VirtualTableDateField.d.ts +1 -0
- package/dist/components/VirtualTable/types.d.ts +2 -0
- package/dist/components/index.d.ts +3 -0
- package/dist/contexts/index.d.ts +10 -0
- package/dist/core/DrawerNavigationGroup.d.ts +45 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/form/components/ErrorFocus.d.ts +1 -1
- package/dist/form/validation.d.ts +3 -2
- package/dist/hooks/useBreadcrumbsController.d.ts +16 -0
- package/dist/hooks/useCollapsedGroups.d.ts +4 -1
- package/dist/index.es.js +5266 -1578
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +5260 -1573
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useRestoreScroll.d.ts +1 -1
- package/dist/preview/PropertyPreviewProps.d.ts +5 -0
- package/dist/preview/components/DatePreview.d.ts +13 -3
- package/dist/preview/components/ImagePreview.d.ts +5 -1
- package/dist/preview/components/StorageThumbnail.d.ts +2 -1
- package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
- package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +1 -1
- package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +1 -1
- package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +1 -1
- package/dist/types/analytics.d.ts +1 -1
- package/dist/types/collections.d.ts +50 -2
- package/dist/types/datasource.d.ts +0 -1
- package/dist/types/plugins.d.ts +62 -1
- package/dist/types/properties.d.ts +259 -4
- package/dist/util/__tests__/conditions.test.d.ts +1 -0
- package/dist/util/__tests__/objects.test.d.ts +1 -0
- package/dist/util/conditions.d.ts +26 -0
- package/dist/util/entities.d.ts +2 -3
- package/dist/util/index.d.ts +2 -1
- package/dist/util/property_utils.d.ts +2 -1
- package/dist/util/resolutions.d.ts +3 -3
- package/package.json +14 -11
- package/src/app/Scaffold.tsx +14 -15
- package/src/components/AIIcon.tsx +39 -0
- package/src/components/ArrayContainer.tsx +1 -4
- package/src/components/ClearFilterSortButton.tsx +19 -16
- package/src/components/ConfirmationDialog.tsx +0 -2
- package/src/components/DeleteEntityDialog.tsx +2 -4
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +74 -41
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +130 -79
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +121 -104
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +132 -103
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +20 -42
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +90 -49
- package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +1 -1
- package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +11 -11
- package/src/components/EntityCollectionView/Board.tsx +324 -0
- package/src/components/EntityCollectionView/BoardColumn.tsx +158 -0
- package/src/components/EntityCollectionView/BoardColumnTitle.tsx +45 -0
- package/src/components/EntityCollectionView/BoardSortableList.tsx +172 -0
- package/src/components/EntityCollectionView/EntityBoardCard.tsx +212 -0
- package/src/components/EntityCollectionView/EntityCard.tsx +235 -0
- package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +733 -0
- package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +244 -0
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +519 -203
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +31 -19
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +84 -15
- package/src/components/EntityCollectionView/FiltersDialog.tsx +249 -0
- package/src/components/EntityCollectionView/ViewModeToggle.tsx +199 -0
- package/src/components/EntityCollectionView/board_types.ts +113 -0
- package/src/components/EntityCollectionView/useBoardDataController.tsx +490 -0
- package/src/components/ErrorTooltip.tsx +2 -1
- package/src/components/HomePage/DefaultHomePage.tsx +47 -10
- package/src/components/HomePage/HomePageDnD.tsx +56 -41
- package/src/components/HomePage/NavigationCard.tsx +20 -18
- package/src/components/HomePage/NavigationGroup.tsx +17 -16
- package/src/components/HomePage/RenameGroupDialog.tsx +0 -2
- package/src/components/HomePage/SmallNavigationCard.tsx +10 -9
- package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +3 -10
- package/src/components/ReferenceWidget.tsx +2 -4
- package/src/components/SelectableTable/SelectableTable.tsx +75 -67
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +7 -6
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +39 -40
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +38 -38
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +49 -58
- package/src/components/UnsavedChangesDialog.tsx +0 -2
- package/src/components/UserDisplay.tsx +4 -4
- package/src/components/VirtualTable/VirtualTable.tsx +272 -118
- package/src/components/VirtualTable/VirtualTableCell.tsx +18 -2
- package/src/components/VirtualTable/VirtualTableHeader.tsx +59 -50
- package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +158 -42
- package/src/components/VirtualTable/VirtualTableProps.tsx +14 -1
- package/src/components/VirtualTable/VirtualTableRow.tsx +1 -1
- package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +3 -0
- package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +19 -6
- package/src/components/VirtualTable/types.tsx +2 -0
- package/src/components/common/useColumnsIds.tsx +95 -3
- package/src/components/index.tsx +4 -0
- package/src/contexts/BreacrumbsContext.tsx +15 -8
- package/src/contexts/index.ts +10 -0
- package/src/core/DefaultAppBar.tsx +40 -27
- package/src/core/DefaultDrawer.tsx +42 -56
- package/src/core/DrawerNavigationGroup.tsx +118 -0
- package/src/core/DrawerNavigationItem.tsx +4 -3
- package/src/core/EntityEditView.tsx +41 -43
- package/src/core/EntitySidePanel.tsx +28 -26
- package/src/core/SideDialogs.tsx +4 -2
- package/src/core/field_configs.tsx +14 -9
- package/src/core/index.tsx +1 -0
- package/src/form/EntityForm.tsx +69 -60
- package/src/form/PropertyFieldBinding.tsx +61 -46
- package/src/form/components/ErrorFocus.tsx +3 -3
- package/src/form/components/StorageItemPreview.tsx +2 -1
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +0 -1
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +17 -16
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +0 -1
- package/src/form/field_bindings/MapFieldBinding.tsx +69 -67
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +22 -18
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +83 -83
- package/src/form/field_bindings/TextFieldBinding.tsx +71 -35
- package/src/form/validation.ts +245 -160
- package/src/hooks/useBreadcrumbsController.tsx +18 -0
- package/src/hooks/useBuildNavigationController.tsx +46 -23
- package/src/hooks/useCollapsedGroups.ts +12 -4
- package/src/hooks/useValidateAuthenticator.tsx +1 -1
- package/src/internal/useBuildDataSource.ts +68 -34
- package/src/internal/useBuildSideDialogsController.tsx +11 -8
- package/src/internal/useBuildSideEntityController.tsx +2 -4
- package/src/internal/useRestoreScroll.tsx +26 -14
- package/src/preview/PropertyPreview.tsx +41 -32
- package/src/preview/PropertyPreviewProps.tsx +6 -0
- package/src/preview/components/DatePreview.tsx +72 -4
- package/src/preview/components/EmptyValue.tsx +1 -1
- package/src/preview/components/ImagePreview.tsx +37 -21
- package/src/preview/components/StorageThumbnail.tsx +16 -12
- package/src/preview/components/UrlComponentPreview.tsx +28 -25
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +9 -7
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +11 -9
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +26 -24
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +61 -56
- package/src/routes/CustomCMSRoute.tsx +1 -0
- package/src/routes/FireCMSRoute.tsx +26 -13
- package/src/types/analytics.ts +10 -0
- package/src/types/collections.ts +57 -3
- package/src/types/datasource.ts +54 -56
- package/src/types/plugins.tsx +69 -1
- package/src/types/properties.ts +347 -27
- package/src/util/__tests__/conditions.test.ts +506 -0
- package/src/util/__tests__/objects.test.ts +196 -0
- package/src/util/callbacks.ts +6 -3
- package/src/util/collections.ts +51 -6
- package/src/util/conditions.ts +339 -0
- package/src/util/entities.ts +29 -30
- package/src/util/entity_cache.ts +2 -1
- package/src/util/index.ts +2 -1
- package/src/util/join_collections.ts +10 -8
- package/src/util/objects.ts +31 -13
- package/src/util/{references.ts → previews.ts} +16 -2
- package/src/util/property_utils.tsx +37 -11
- package/src/util/resolutions.ts +62 -58
- /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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
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
|
-
|
|
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
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
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
|
-
|
|
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
|
-
|
|
299
|
-
|
|
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
|
-
|
|
359
|
+
viewModeToggle={viewModeToggle}
|
|
360
|
+
loading={tableController.dataLoading} />}
|
|
311
361
|
|
|
312
362
|
<SelectableTable columns={columns}
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Callback when a cell value changes.
|
|
49
|
+
*/
|
|
50
|
+
onValueChange?: OnCellValueChange<any, M>;
|
|
50
51
|
|
|
51
|
-
|
|
52
|
+
uniqueFieldValidator?: UniqueFieldValidator;
|
|
52
53
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
/**
|
|
67
|
+
* Callback when anywhere on the table is clicked
|
|
68
|
+
*/
|
|
69
|
+
onEntityClick?(entity: Entity<M>): void;
|
|
69
70
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
/**
|
|
72
|
+
* Callback when a column is resized
|
|
73
|
+
*/
|
|
74
|
+
onColumnResize?(params: OnColumnResizeParams): void;
|
|
74
75
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
/**
|
|
77
|
+
* Initial scroll position
|
|
78
|
+
*/
|
|
79
|
+
initialScroll?: number;
|
|
79
80
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
|
|
91
|
+
/**
|
|
92
|
+
* Callback when the selected size of the table is changed
|
|
93
|
+
*/
|
|
94
|
+
onSizeChanged?(size: CollectionSize): void;
|
|
94
95
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
96
|
+
/**
|
|
97
|
+
* Should apply a different style to a row when hovering
|
|
98
|
+
*/
|
|
99
|
+
hoverRow?: boolean;
|
|
99
100
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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
|
-
|
|
112
|
+
/**
|
|
113
|
+
* Controller holding the logic for the table
|
|
114
|
+
* {@link useDataSourceTableController}
|
|
115
|
+
* {@link EntityTableController}
|
|
116
|
+
*/
|
|
117
|
+
tableController: EntityTableController<M>;
|
|
114
118
|
|
|
115
|
-
|
|
119
|
+
displayedColumnIds?: PropertyColumnConfig[];
|
|
116
120
|
|
|
117
|
-
|
|
121
|
+
forceFilter?: FilterValues<Extract<keyof M, string>>;
|
|
118
122
|
|
|
119
|
-
|
|
123
|
+
textSearchEnabled?: boolean;
|
|
120
124
|
|
|
121
|
-
|
|
125
|
+
inlineEditing?: boolean;
|
|
122
126
|
|
|
123
|
-
|
|
127
|
+
additionalFields?: AdditionalFieldDelegate<M, USER>[];
|
|
124
128
|
|
|
125
|
-
|
|
129
|
+
defaultSize?: CollectionSize;
|
|
126
130
|
|
|
127
|
-
|
|
131
|
+
properties: ResolvedProperties<M>;
|
|
128
132
|
|
|
129
|
-
|
|
133
|
+
getPropertyFor?: (props: GetPropertyForProps<M>) => ResolvedProperties<M>[string];
|
|
130
134
|
|
|
131
|
-
|
|
135
|
+
filterable?: boolean;
|
|
132
136
|
|
|
133
|
-
|
|
137
|
+
sortable?: boolean;
|
|
134
138
|
|
|
135
|
-
|
|
136
|
-
property: ResolvedProperty,
|
|
137
|
-
propertyKey: string,
|
|
138
|
-
onHover: boolean,
|
|
139
|
-
}>;
|
|
139
|
+
endAdornment?: React.ReactNode;
|
|
140
140
|
|
|
141
|
-
|
|
141
|
+
AdditionalHeaderWidget?: React.ComponentType<{
|
|
142
|
+
property: ResolvedProperty,
|
|
143
|
+
propertyKey: string,
|
|
144
|
+
onHover: boolean,
|
|
145
|
+
}>;
|
|
142
146
|
|
|
143
|
-
|
|
147
|
+
AddColumnComponent?: React.ComponentType;
|
|
144
148
|
|
|
145
|
-
|
|
149
|
+
additionalIDHeaderWidget?: React.ReactNode;
|
|
146
150
|
|
|
147
|
-
|
|
151
|
+
emptyComponent?: React.ReactNode;
|
|
148
152
|
|
|
149
|
-
|
|
153
|
+
getIdColumnWidth?: () => number;
|
|
150
154
|
|
|
151
|
-
|
|
155
|
+
onTextSearchClick?: () => void;
|
|
152
156
|
|
|
153
|
-
|
|
157
|
+
textSearchLoading?: boolean;
|
|
154
158
|
|
|
155
|
-
|
|
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,
|