@firecms/core 3.0.0-alpha.81 → 3.0.0-alpha.83

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 (84) hide show
  1. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +4 -3
  2. package/dist/components/EntityCollectionTable/column_utils.d.ts +2 -2
  3. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +5 -1
  4. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +2 -2
  5. package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +1 -1
  6. package/dist/components/VirtualTable/VirtualTableProps.d.ts +1 -1
  7. package/dist/contexts/AnalyticsContext.d.ts +3 -0
  8. package/dist/contexts/CustomizationControllerContext.d.ts +3 -0
  9. package/dist/core/field_configs.d.ts +1 -1
  10. package/dist/hooks/index.d.ts +1 -0
  11. package/dist/hooks/useAnalyticsController.d.ts +5 -0
  12. package/dist/hooks/useCustomizationController.d.ts +11 -0
  13. package/dist/hooks/useFireCMSContext.d.ts +0 -1
  14. package/dist/index.es.js +4878 -4856
  15. package/dist/index.es.js.map +1 -1
  16. package/dist/index.umd.js +5 -5
  17. package/dist/index.umd.js.map +1 -1
  18. package/dist/internal/useBuildCustomizationController.d.ts +2 -0
  19. package/dist/types/analytics_controller.d.ts +7 -0
  20. package/dist/types/collections.d.ts +3 -0
  21. package/dist/types/customization_controller.d.ts +47 -0
  22. package/dist/types/entity_callbacks.d.ts +17 -3
  23. package/dist/types/firecms_context.d.ts +6 -46
  24. package/dist/types/index.d.ts +2 -0
  25. package/dist/util/icons.d.ts +4 -1
  26. package/dist/util/useTraceUpdate.d.ts +1 -1
  27. package/package.json +3 -3
  28. package/src/components/DeleteEntityDialog.tsx +9 -3
  29. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +1 -1
  30. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +33 -8
  31. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +5 -5
  32. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +1 -1
  33. package/src/components/EntityCollectionTable/SimpleEntityCollectionTable.tsx +0 -2
  34. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  35. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +125 -122
  36. package/src/components/EntityCollectionTable/filters/DateTimeFilterField.tsx +2 -2
  37. package/src/components/EntityCollectionTable/internal/default_entity_actions.tsx +3 -3
  38. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +4 -3
  39. package/src/components/EntityCollectionView/EntityCollectionView.tsx +77 -48
  40. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +5 -3
  41. package/src/components/EntityPreview.tsx +11 -9
  42. package/src/components/HomePage/DefaultHomePage.tsx +9 -8
  43. package/src/components/HomePage/NavigationCollectionCard.tsx +6 -5
  44. package/src/components/ReferenceSelectionInner.tsx +38 -36
  45. package/src/components/VirtualTable/VirtualTable.tsx +23 -20
  46. package/src/components/VirtualTable/VirtualTableCell.tsx +27 -9
  47. package/src/components/VirtualTable/VirtualTableHeader.tsx +1 -1
  48. package/src/components/VirtualTable/VirtualTableProps.tsx +2 -2
  49. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +2 -2
  50. package/src/contexts/AnalyticsContext.tsx +4 -0
  51. package/src/contexts/CustomizationControllerContext.tsx +4 -0
  52. package/src/core/Drawer.tsx +7 -6
  53. package/src/core/FireCMS.tsx +39 -29
  54. package/src/form/EntityForm.tsx +16 -5
  55. package/src/form/PropertyFieldBinding.tsx +8 -10
  56. package/src/form/components/CustomIdField.tsx +7 -5
  57. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +1 -2
  58. package/src/form/field_bindings/DateTimeFieldBinding.tsx +2 -2
  59. package/src/form/field_bindings/KeyValueFieldBinding.tsx +4 -6
  60. package/src/hooks/data/save.ts +8 -3
  61. package/src/hooks/index.tsx +1 -0
  62. package/src/hooks/useAnalyticsController.tsx +8 -0
  63. package/src/hooks/useCustomizationController.tsx +14 -0
  64. package/src/hooks/useFireCMSContext.tsx +8 -7
  65. package/src/internal/EntityView.tsx +4 -2
  66. package/src/internal/useBuildCustomizationController.tsx +5 -0
  67. package/src/internal/useBuildSideDialogsController.tsx +0 -1
  68. package/src/preview/PropertyPreview.tsx +7 -4
  69. package/src/preview/components/DatePreview.tsx +4 -5
  70. package/src/preview/components/ReferencePreview.tsx +17 -8
  71. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +3 -3
  72. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +3 -3
  73. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +3 -3
  74. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -4
  75. package/src/preview/property_previews/ArrayOneOfPreview.tsx +3 -3
  76. package/src/preview/property_previews/ArrayPropertyPreview.tsx +3 -3
  77. package/src/types/analytics_controller.tsx +10 -0
  78. package/src/types/collections.ts +3 -0
  79. package/src/types/customization_controller.tsx +58 -0
  80. package/src/types/entity_callbacks.ts +22 -3
  81. package/src/types/firecms_context.tsx +6 -51
  82. package/src/types/index.ts +2 -0
  83. package/src/util/icons.tsx +22 -19
  84. package/src/util/useTraceUpdate.tsx +5 -5
@@ -0,0 +1,2 @@
1
+ import { CustomizationController } from "../types/customization_controller";
2
+ export declare function useBuildCustomizationController(controller: CustomizationController): CustomizationController;
@@ -0,0 +1,7 @@
1
+ import { CMSAnalyticsEvent } from "./analytics";
2
+ export type AnalyticsController = {
3
+ /**
4
+ * Callback used to get analytics events from the CMS
5
+ */
6
+ onAnalyticsEvent?: (event: CMSAnalyticsEvent, data?: object) => void;
7
+ };
@@ -306,6 +306,9 @@ export type SelectionController<M extends Record<string, any> = any> = {
306
306
  export type WhereFilterOp = "<" | "<=" | "==" | "!=" | ">=" | ">" | "array-contains" | "in" | "not-in" | "array-contains-any";
307
307
  /**
308
308
  * Used to define filters applied in collections
309
+ *
310
+ * e.g. `{ age: [">=", 18] }`
311
+ *
309
312
  * @group Models
310
313
  */
311
314
  export type FilterValues<Key extends string> = Partial<Record<Key, [WhereFilterOp, any]>>;
@@ -0,0 +1,47 @@
1
+ import React from "react";
2
+ import { EntityLinkBuilder } from "./entity_link_builder";
3
+ import { FireCMSPlugin } from "./plugins";
4
+ import { EntityCustomView } from "./collections";
5
+ import { Locale } from "./locales";
6
+ import { PropertyConfig } from "./property_config";
7
+ export type CustomizationController = {
8
+ /**
9
+ * Builder for generating utility links for entities
10
+ */
11
+ entityLinkBuilder?: EntityLinkBuilder;
12
+ /**
13
+ * Use plugins to modify the behaviour of the CMS.
14
+ */
15
+ plugins?: FireCMSPlugin<any, any, any>[];
16
+ /**
17
+ * List of additional custom views for entities.
18
+ * You can use the key to reference the custom view in
19
+ * the `entityViews` prop of a collection.
20
+ *
21
+ * You can also define an entity view from the UI.
22
+ */
23
+ entityViews?: EntityCustomView[];
24
+ /**
25
+ * Format of the dates in the CMS.
26
+ * Defaults to 'MMMM dd, yyyy, HH:mm:ss'
27
+ */
28
+ dateTimeFormat?: string;
29
+ /**
30
+ * Locale of the CMS, currently only affecting dates
31
+ */
32
+ locale?: Locale;
33
+ /**
34
+ * Record of custom form fields to be used in the CMS.
35
+ * You can use the key to reference the custom field in
36
+ * the `propertyConfig` prop of a property in a collection.
37
+ */
38
+ propertyConfigs: Record<string, PropertyConfig>;
39
+ components?: {
40
+ /**
41
+ * Component to render when a reference is missing
42
+ */
43
+ missingReference?: React.ComponentType<{
44
+ path: string;
45
+ }>;
46
+ };
47
+ };
@@ -24,14 +24,14 @@ export type EntityCallbacks<M extends Record<string, any> = any, UserType extend
24
24
  * Callback used when saving fails
25
25
  * @param entitySaveProps
26
26
  */
27
- onSaveFailure?(entitySaveProps: EntityOnSaveProps<M, UserType>): Promise<void> | void;
27
+ onSaveFailure?(entitySaveProps: EntityOnSaveFailureProps<M, UserType>): Promise<void> | void;
28
28
  /**
29
29
  * Callback used before saving, you need to return the values that will get
30
30
  * saved. If you throw an error in this method the process stops, and an
31
31
  * error snackbar gets displayed.
32
32
  * @param entitySaveProps
33
33
  */
34
- onPreSave?(entitySaveProps: EntityOnSaveProps<M, UserType>): Promise<Partial<EntityValues<M>>> | Partial<EntityValues<M>>;
34
+ onPreSave?(entitySaveProps: EntityOnPreSaveProps<M, UserType>): Promise<Partial<EntityValues<M>>> | Partial<EntityValues<M>>;
35
35
  /**
36
36
  * Callback used after the entity is deleted.
37
37
  * If you throw an error in this method the process stops, and an
@@ -78,6 +78,20 @@ export interface EntityOnFetchProps<M extends Record<string, any> = any, UserTyp
78
78
  */
79
79
  context: FireCMSContext<UserType>;
80
80
  }
81
+ /**
82
+ * Parameters passed to hooks before an entity is saved
83
+ * @group Models
84
+ */
85
+ export type EntityOnPreSaveProps<M extends Record<string, any> = any, UserType extends User = User> = Omit<EntityOnSaveProps<M, UserType>, "entityId"> & {
86
+ entityId?: string;
87
+ };
88
+ /**
89
+ * Parameters passed to hooks before an entity is saved
90
+ * @group Models
91
+ */
92
+ export type EntityOnSaveFailureProps<M extends Record<string, any> = any, UserType extends User = User> = Omit<EntityOnSaveProps<M, UserType>, "entityId"> & {
93
+ entityId?: string;
94
+ };
81
95
  /**
82
96
  * Parameters passed to hooks when an entity is saved
83
97
  * @group Models
@@ -99,7 +113,7 @@ export interface EntityOnSaveProps<M extends Record<string, any> = any, UserType
99
113
  /**
100
114
  * ID of the entity
101
115
  */
102
- entityId?: string;
116
+ entityId: string;
103
117
  /**
104
118
  * Values being saved
105
119
  */
@@ -1,19 +1,15 @@
1
- import { Locale } from "./locales";
2
1
  import { DataSource } from "./datasource";
3
2
  import { StorageSource } from "./storage";
4
3
  import { NavigationController } from "./navigation";
5
4
  import { SideEntityController } from "./side_entity_controller";
6
5
  import { AuthController } from "./auth";
7
- import { EntityLinkBuilder } from "./entity_link_builder";
8
6
  import { User } from "./user";
9
7
  import { SnackbarController } from "../hooks";
10
8
  import { UserConfigurationPersistence } from "./local_config_persistence";
11
9
  import { SideDialogsController } from "./side_dialogs_controller";
12
- import { FireCMSPlugin } from "./plugins";
13
- import { CMSAnalyticsEvent } from "./analytics";
14
- import { PropertyConfig } from "./property_config";
15
- import { EntityCustomView } from "./collections";
16
10
  import { DialogsController } from "./dialogs_controller";
11
+ import { CustomizationController } from "./customization_controller";
12
+ import { AnalyticsController } from "./analytics_controller";
17
13
  /**
18
14
  * Context that includes the internal controllers and contexts used by the app.
19
15
  * Some controllers and context included in this context can be accessed
@@ -56,9 +52,9 @@ export type FireCMSContext<UserType extends User = User, AuthControllerType exte
56
52
  */
57
53
  authController: AuthControllerType;
58
54
  /**
59
- * Builder for generating utility links for entities
55
+ * This controller holds the customization options for the CMS.
60
56
  */
61
- entityLinkBuilder?: EntityLinkBuilder;
57
+ customizationController: CustomizationController;
62
58
  /**
63
59
  * Use this controller to display snackbars
64
60
  */
@@ -68,43 +64,7 @@ export type FireCMSContext<UserType extends User = User, AuthControllerType exte
68
64
  */
69
65
  userConfigPersistence?: UserConfigurationPersistence;
70
66
  /**
71
- * Use plugins to modify the behaviour of the CMS.
72
- * Currently, in ALPHA, and likely subject to change.
67
+ * Callback to send analytics events
73
68
  */
74
- plugins?: FireCMSPlugin[];
75
- /**
76
- * Callback used to get analytics events from the CMS
77
- */
78
- onAnalyticsEvent?: (event: CMSAnalyticsEvent, data?: object) => void;
79
- /**
80
- * Record of custom form fields to be used in the CMS.
81
- * You can use the key to reference the custom field in
82
- * the `propertyConfig` prop of a property in a collection.
83
- */
84
- propertyConfigs: Record<string, PropertyConfig>;
85
- /**
86
- * List of additional custom views for entities.
87
- * You can use the key to reference the custom view in
88
- * the `entityViews` prop of a collection.
89
- *
90
- * You can also define an entity view from the UI.
91
- */
92
- entityViews?: EntityCustomView[];
93
- /**
94
- * Format of the dates in the CMS.
95
- * Defaults to 'MMMM dd, yyyy, HH:mm:ss'
96
- */
97
- dateTimeFormat?: string;
98
- /**
99
- * Locale of the CMS, currently only affecting dates
100
- */
101
- locale?: Locale;
102
- components?: {
103
- /**
104
- * Component to render when a reference is missing
105
- */
106
- missingReference?: React.ComponentType<{
107
- path: string;
108
- }>;
109
- };
69
+ analyticsController?: AnalyticsController;
110
70
  };
@@ -24,3 +24,5 @@ export * from "./firecms";
24
24
  export * from "./appcheck";
25
25
  export * from "./export_import";
26
26
  export * from "./modify_collections";
27
+ export * from "./analytics_controller";
28
+ export * from "./customization_controller";
@@ -1,4 +1,7 @@
1
1
  import React from "react";
2
2
  import { CMSView, EntityCollection } from "../types";
3
3
  export declare function getIcon(iconKey?: string, className?: string): React.ReactElement | undefined;
4
- export declare function getIconForView(collectionOrView: EntityCollection | CMSView, className?: string): React.ReactElement;
4
+ export declare const IconForView: React.NamedExoticComponent<{
5
+ collectionOrView: EntityCollection | CMSView;
6
+ className?: string | undefined;
7
+ }>;
@@ -1 +1 @@
1
- export declare function useTraceUpdate(props: any): void;
1
+ export declare function useTraceUpdate(props: any, maxDepth?: number): void;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@firecms/core",
3
3
  "type": "module",
4
- "version": "3.0.0-alpha.81",
4
+ "version": "3.0.0-alpha.83",
5
5
  "description": "Awesome Firebase/Firestore-based headless open-source CMS",
6
6
  "funding": {
7
7
  "url": "https://github.com/sponsors/firecmsco"
@@ -38,7 +38,7 @@
38
38
  "generateIcons": "ts-node --esm src/icons/generateIcons.ts"
39
39
  },
40
40
  "dependencies": {
41
- "@firecms/ui": "^3.0.0-alpha.81",
41
+ "@firecms/ui": "^3.0.0-alpha.83",
42
42
  "@fontsource/ibm-plex-mono": "^5.0.8",
43
43
  "@fontsource/roboto": "^5.0.8",
44
44
  "@hello-pangea/dnd": "^16.5.0",
@@ -107,7 +107,7 @@
107
107
  "dist",
108
108
  "src"
109
109
  ],
110
- "gitHead": "ac77309580f9668647209724e1df2080d3932bef",
110
+ "gitHead": "96d21eb290969ee8e2cc56ca13a47834bae0ee57",
111
111
  "publishConfig": {
112
112
  "access": "public"
113
113
  }
@@ -1,7 +1,13 @@
1
1
  import { Entity, EntityCallbacks, EntityCollection } from "../types";
2
2
  import React, { useCallback, useMemo, useState } from "react";
3
3
  import { Button, CircularProgress, Dialog, DialogActions, DialogContent, Typography } from "@firecms/ui";
4
- import { deleteEntityWithCallbacks, useDataSource, useFireCMSContext, useSnackbarController } from "../hooks";
4
+ import {
5
+ deleteEntityWithCallbacks,
6
+ useCustomizationController,
7
+ useDataSource,
8
+ useFireCMSContext,
9
+ useSnackbarController
10
+ } from "../hooks";
5
11
  import { resolveCollection } from "../util";
6
12
  import { EntityPreview } from "./EntityPreview";
7
13
 
@@ -30,7 +36,7 @@ export function DeleteEntityDialog<M extends Record<string, any>>({
30
36
  }: DeleteEntityDialogProps<M>) {
31
37
 
32
38
  const dataSource = useDataSource();
33
- console.log("dataSource", dataSource)
39
+ const customizationController = useCustomizationController();
34
40
  const snackbarController = useSnackbarController();
35
41
  const [loading, setLoading] = useState(false);
36
42
 
@@ -52,7 +58,7 @@ export function DeleteEntityDialog<M extends Record<string, any>>({
52
58
  const resolvedCollection = useMemo(() => resolveCollection<M>({
53
59
  collection,
54
60
  path,
55
- fields: context.propertyConfigs
61
+ fields: customizationController.propertyConfigs
56
62
  }), [collection, path]);
57
63
 
58
64
  const handleCancel = useCallback(() => {
@@ -36,7 +36,7 @@ export const EntityCollectionRowActions = React.memo(function EntityCollectionRo
36
36
  unhighlightEntity,
37
37
  actions = [],
38
38
  hideId,
39
- selectionController
39
+ selectionController,
40
40
  }:
41
41
  {
42
42
  entity: Entity<any>,
@@ -64,6 +64,7 @@ export const useEntityCollectionTableController = () => useContext<EntityCollect
64
64
  export const EntityCollectionTable = React.memo<EntityCollectionTableProps<any>>(
65
65
  function EntityCollectionTable<M extends Record<string, any>, UserType extends User>
66
66
  ({
67
+ debugKey,
67
68
  forceFilter,
68
69
  actionsStart,
69
70
  actions,
@@ -119,7 +120,7 @@ export const EntityCollectionTable = React.memo<EntityCollectionTableProps<any>>
119
120
 
120
121
  const largeLayout = useLargeLayout();
121
122
  const disabledFilterChange = Boolean(forceFilter);
122
- const selectedEntities = selectionController?.selectedEntities?.length > 0 ? selectionController?.selectedEntities : highlightedEntities;
123
+ const selectedEntities = (selectionController?.selectedEntities?.length > 0 ? selectionController?.selectedEntities : highlightedEntities)?.filter(Boolean);
123
124
 
124
125
  const context: FireCMSContext<UserType> = useFireCMSContext();
125
126
 
@@ -131,12 +132,12 @@ export const EntityCollectionTable = React.memo<EntityCollectionTableProps<any>>
131
132
 
132
133
  const filterIsSet = !!filterValues && Object.keys(filterValues).length > 0;
133
134
 
134
- const loadNextPage = () => {
135
+ const loadNextPage = useCallback(() => {
135
136
  if (!paginationEnabled || dataLoading || noMoreToLoad)
136
137
  return;
137
138
  if (itemCount !== undefined)
138
139
  setItemCount?.(itemCount + pageSize);
139
- };
140
+ }, [dataLoading, itemCount, noMoreToLoad, pageSize, paginationEnabled, setItemCount]);
140
141
 
141
142
  useOutsideAlerter(ref,
142
143
  () => {
@@ -150,10 +151,9 @@ export const EntityCollectionTable = React.memo<EntityCollectionTableProps<any>>
150
151
  setItemCount?.(pageSize);
151
152
  }, [pageSize]);
152
153
 
153
- const onRowClick = useCallback(({ rowData }: {
154
+ const onRowClickCallback = useCallback(({ rowData }: {
154
155
  rowData: Entity<M>
155
156
  }) => {
156
- console.debug("EntityCollectionTable click");
157
157
  if (inlineEditing)
158
158
  return;
159
159
  return onEntityClick && onEntityClick(rowData);
@@ -245,7 +245,7 @@ export const EntityCollectionTable = React.memo<EntityCollectionTableProps<any>>
245
245
  }
246
246
  </ErrorBoundary>);
247
247
 
248
- }, [customFieldValidator, inlineEditing, size, selectedEntityIds]);
248
+ }, [inlineEditing, size, selectedEntityIds]);
249
249
 
250
250
  const additionalCellRenderer = useCallback(({
251
251
  column,
@@ -290,7 +290,7 @@ export const EntityCollectionTable = React.memo<EntityCollectionTableProps<any>>
290
290
  </EntityTableCell>
291
291
  );
292
292
 
293
- }, [additionalFieldsMap, size, selectedEntityIds]);
293
+ }, [size, selectedEntityIds]);
294
294
 
295
295
  const collectionColumns: VirtualTableColumn[] = useMemo(() => {
296
296
  const columnsResult: VirtualTableColumn[] = propertiesToColumns({
@@ -365,6 +365,31 @@ export const EntityCollectionTable = React.memo<EntityCollectionTableProps<any>>
365
365
  setFilterValues?.({ ...updatedFilterValues, ...forceFilter } as FilterValues<any>);
366
366
  }, [forceFilter]);
367
367
 
368
+ // useTraceUpdate({
369
+ // data,
370
+ // columns,
371
+ // inlineEditing,
372
+ // size, selectedEntityIds, additionalCellRenderer, propertyCellRenderer,
373
+ // cellRenderer,
374
+ // onRowClick,
375
+ // onEndReached: loadNextPage,
376
+ // onResetPagination: resetPagination,
377
+ // error: dataLoadingError,
378
+ // paginationEnabled,
379
+ // onColumnResize,
380
+ // loading: dataLoading,
381
+ // filter: filterValues,
382
+ // onFilterUpdate,
383
+ // sortBy,
384
+ // onSortByUpdate: setSortBy,
385
+ // hoverRow,
386
+ // emptyComponent,
387
+ // checkFilterCombination,
388
+ // createFilterField,
389
+ // });
390
+
391
+ const onRowClick = inlineEditing ? undefined : (onEntityClick ? onRowClickCallback : undefined);
392
+
368
393
  return (
369
394
 
370
395
  <EntityCollectionTableContext.Provider
@@ -398,7 +423,7 @@ export const EntityCollectionTable = React.memo<EntityCollectionTableProps<any>>
398
423
  data={data}
399
424
  columns={columns}
400
425
  cellRenderer={cellRenderer}
401
- onRowClick={inlineEditing ? undefined : (onEntityClick ? onRowClick : undefined)}
426
+ onRowClick={onRowClick}
402
427
  onEndReached={loadNextPage}
403
428
  onResetPagination={resetPagination}
404
429
  error={dataLoadingError}
@@ -3,11 +3,11 @@ import {
3
3
  AdditionalFieldDelegate,
4
4
  CollectionSize,
5
5
  Entity,
6
+ EntityTableController,
6
7
  FilterValues,
7
8
  ResolvedProperties,
8
9
  ResolvedProperty,
9
10
  SelectionController,
10
- EntityTableController,
11
11
  User
12
12
  } from "../../types";
13
13
  import { OnCellValueChange, UniqueFieldValidator } from "./types";
@@ -21,9 +21,9 @@ export type OnColumnResizeParams = { width: number, key: string };
21
21
  * @group Collection components
22
22
  */
23
23
  export type EntityCollectionTableProps<M extends Record<string, any>,
24
-
25
24
  UserType extends User = User> = {
26
25
 
26
+ debugKey?: string;
27
27
  /**
28
28
  * Display these entities as selected
29
29
  */
@@ -105,7 +105,7 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
105
105
 
106
106
  inlineEditing?: boolean | ((entity: Entity<M>) => boolean);
107
107
 
108
- additionalFields?: AdditionalFieldDelegate<M, UserType>[];
108
+ additionalFields?: AdditionalFieldDelegate<M, UserType>[];
109
109
 
110
110
  defaultSize?: CollectionSize;
111
111
 
@@ -119,11 +119,11 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
119
119
 
120
120
  endAdornment?: React.ReactNode;
121
121
 
122
- AdditionalHeaderWidget?: (props: {
122
+ AdditionalHeaderWidget?: React.ComponentType<{
123
123
  property: ResolvedProperty,
124
124
  propertyKey: string,
125
125
  onHover: boolean,
126
- }) => React.ReactNode;
126
+ }>;
127
127
 
128
128
  AddColumnComponent?: React.ComponentType;
129
129
 
@@ -387,7 +387,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any, any>>(
387
387
  multiselect={true}
388
388
  path={arrayProperty.of.path}
389
389
  previewProperties={arrayProperty.of.previewProperties}
390
- title={arrayProperty.of.name}
390
+ title={arrayProperty.name}
391
391
  forceFilter={arrayProperty.of.forceFilter}
392
392
  />;
393
393
  }
@@ -196,7 +196,6 @@ export const SimpleEntityCollectionTable = React.memo<SimpleEntityCollectionTabl
196
196
  const onRowClick = useCallback(({ rowData }: {
197
197
  rowData: Entity<M>
198
198
  }) => {
199
- console.debug("EntityCollectionTable click");
200
199
  if (inlineEditing)
201
200
  return;
202
201
  return onEntityClick && onEntityClick(rowData);
@@ -231,7 +230,6 @@ export const SimpleEntityCollectionTable = React.memo<SimpleEntityCollectionTabl
231
230
  setSelectedCell(undefined);
232
231
  }, []);
233
232
 
234
-
235
233
  const onFilterUpdate = useCallback((updatedFilterValues?: FilterValues<any>) => {
236
234
  setFilterValues?.({ ...updatedFilterValues, ...forceFilter } as FilterValues<any>);
237
235
  }, [forceFilter]);
@@ -22,11 +22,11 @@ export interface PropertiesToColumnsParams<M extends Record<string, any>> {
22
22
  sortable?: boolean;
23
23
  forceFilter?: FilterValues<keyof M extends string ? keyof M : never>;
24
24
  disabledFilter?: boolean;
25
- AdditionalHeaderWidget?: (props: {
25
+ AdditionalHeaderWidget?: React.ComponentType<{
26
26
  property: ResolvedProperty,
27
27
  propertyKey: string,
28
28
  onHover: boolean,
29
- }) => React.ReactNode;
29
+ }>;
30
30
  }
31
31
 
32
32
  export function propertiesToColumns<M extends Record<string, any>>({ properties, sortable, forceFilter, disabledFilter, AdditionalHeaderWidget }: PropertiesToColumnsParams<M>): VirtualTableColumn[] {
@@ -43,7 +43,7 @@ export function propertiesToColumns<M extends Record<string, any>>({ properties,
43
43
  return {
44
44
  key: key as string,
45
45
  align: getTableCellAlignment(property),
46
- icon: (hoverOrOpen) => getIconForProperty(property, "small"),
46
+ icon: getIconForProperty(property, "small"),
47
47
  title: property.name ?? key as string,
48
48
  sortable: sortable && (forceFilter ? Object.keys(forceFilter).includes(key) : true),
49
49
  filter: !disabledFilter && filterable,