@firecms/core 3.0.0-beta.6 → 3.0.0-beta.7

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 (129) hide show
  1. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
  2. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +4 -2
  3. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
  4. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  5. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +2 -0
  6. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  7. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +1 -1
  8. package/dist/components/EntityPreview.d.ts +3 -2
  9. package/dist/components/FireCMSAppBar.d.ts +4 -2
  10. package/dist/components/ReferenceWidget.d.ts +3 -1
  11. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  12. package/dist/components/VirtualTable/VirtualTableProps.d.ts +1 -6
  13. package/dist/components/VirtualTable/types.d.ts +3 -3
  14. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
  15. package/dist/components/common/index.d.ts +1 -0
  16. package/dist/components/common/table_height.d.ts +5 -0
  17. package/dist/components/common/types.d.ts +3 -5
  18. package/dist/components/common/useDataSourceEntityCollectionTableController.d.ts +3 -0
  19. package/dist/components/index.d.ts +1 -0
  20. package/dist/core/Drawer.d.ts +5 -12
  21. package/dist/core/DrawerNavigationItem.d.ts +9 -0
  22. package/dist/core/NavigationRoutes.d.ts +1 -1
  23. package/dist/core/Scaffold.d.ts +8 -12
  24. package/dist/core/index.d.ts +3 -4
  25. package/dist/hooks/data/save.d.ts +1 -2
  26. package/dist/hooks/index.d.ts +1 -0
  27. package/dist/index.es.js +9950 -9912
  28. package/dist/index.es.js.map +1 -1
  29. package/dist/index.umd.js +5 -5
  30. package/dist/index.umd.js.map +1 -1
  31. package/dist/preview/components/ReferencePreview.d.ts +2 -1
  32. package/dist/types/collections.d.ts +8 -1
  33. package/dist/types/entity_actions.d.ts +14 -0
  34. package/dist/types/navigation.d.ts +2 -2
  35. package/dist/types/properties.d.ts +8 -0
  36. package/dist/util/icon_synonyms.d.ts +1 -97
  37. package/dist/util/objects.d.ts +1 -1
  38. package/dist/util/resolutions.d.ts +8 -8
  39. package/package.json +139 -122
  40. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +2 -2
  41. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +9 -7
  42. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +9 -5
  43. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +22 -15
  44. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  45. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +9 -1
  46. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +2 -2
  47. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +2 -2
  48. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +5 -6
  49. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +2 -4
  50. package/src/components/EntityCollectionView/EntityCollectionView.tsx +19 -20
  51. package/src/components/EntityPreview.tsx +9 -7
  52. package/src/components/EntityView.tsx +4 -4
  53. package/src/components/FireCMSAppBar.tsx +32 -15
  54. package/src/components/HomePage/NavigationCard.tsx +2 -2
  55. package/src/components/HomePage/SmallNavigationCard.tsx +5 -5
  56. package/src/components/PropertyIdCopyTooltipContent.tsx +2 -3
  57. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +1 -0
  58. package/src/components/ReferenceWidget.tsx +21 -11
  59. package/src/components/SearchIconsView.tsx +5 -5
  60. package/src/components/SelectableTable/SelectableTable.tsx +4 -2
  61. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +4 -1
  62. package/src/components/VirtualTable/VirtualTable.tsx +10 -11
  63. package/src/components/VirtualTable/VirtualTableHeader.tsx +4 -4
  64. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  65. package/src/components/VirtualTable/VirtualTableProps.tsx +1 -6
  66. package/src/components/VirtualTable/VirtualTableRow.tsx +4 -5
  67. package/src/components/VirtualTable/types.tsx +2 -3
  68. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +2 -2
  69. package/src/components/common/index.ts +1 -0
  70. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  71. package/src/components/common/types.tsx +3 -5
  72. package/src/components/common/useColumnsIds.tsx +10 -2
  73. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +11 -0
  74. package/src/components/index.tsx +1 -0
  75. package/src/core/Drawer.tsx +16 -68
  76. package/src/core/DrawerNavigationItem.tsx +62 -0
  77. package/src/core/EntityEditView.tsx +7 -8
  78. package/src/core/EntitySidePanel.tsx +1 -1
  79. package/src/core/FireCMS.tsx +36 -40
  80. package/src/core/NavigationRoutes.tsx +3 -4
  81. package/src/core/Scaffold.tsx +80 -66
  82. package/src/core/field_configs.tsx +1 -1
  83. package/src/core/index.tsx +3 -4
  84. package/src/form/EntityForm.tsx +29 -21
  85. package/src/form/PropertyFieldBinding.tsx +0 -2
  86. package/src/form/components/StorageItemPreview.tsx +2 -2
  87. package/src/form/components/StorageUploadProgress.tsx +3 -3
  88. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +4 -2
  89. package/src/form/field_bindings/BlockFieldBinding.tsx +2 -2
  90. package/src/form/field_bindings/KeyValueFieldBinding.tsx +4 -4
  91. package/src/form/field_bindings/MarkdownFieldBinding.tsx +2 -2
  92. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +2 -2
  93. package/src/form/field_bindings/ReferenceFieldBinding.tsx +15 -13
  94. package/src/form/field_bindings/SelectFieldBinding.tsx +3 -3
  95. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +4 -4
  96. package/src/hooks/data/save.ts +2 -1
  97. package/src/hooks/index.tsx +1 -0
  98. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +2 -3
  99. package/src/hooks/useBuildNavigationController.tsx +1 -2
  100. package/src/hooks/useResolvedNavigationFrom.tsx +1 -1
  101. package/src/hooks/useValidateAuthenticator.tsx +15 -15
  102. package/src/internal/useBuildSideEntityController.tsx +72 -11
  103. package/src/preview/PropertyPreview.tsx +2 -2
  104. package/src/preview/components/BooleanPreview.tsx +2 -2
  105. package/src/preview/components/EnumValuesChip.tsx +1 -1
  106. package/src/preview/components/ReferencePreview.tsx +21 -22
  107. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +0 -1
  108. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +2 -1
  109. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +0 -1
  110. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +0 -1
  111. package/src/preview/property_previews/ArrayOneOfPreview.tsx +2 -3
  112. package/src/preview/property_previews/ArrayPropertyPreview.tsx +2 -3
  113. package/src/preview/property_previews/MapPropertyPreview.tsx +5 -5
  114. package/src/preview/property_previews/StringPropertyPreview.tsx +2 -2
  115. package/src/types/collections.ts +14 -2
  116. package/src/types/entity_actions.tsx +16 -3
  117. package/src/types/navigation.ts +1 -2
  118. package/src/types/properties.ts +10 -0
  119. package/src/types/storage.ts +1 -1
  120. package/src/util/enums.ts +1 -1
  121. package/src/util/icon_list.ts +2 -2
  122. package/src/util/icon_synonyms.ts +3 -99
  123. package/src/util/objects.ts +8 -21
  124. package/src/util/resolutions.ts +32 -31
  125. package/dist/components/VirtualTable/common.d.ts +0 -2
  126. package/dist/core/SideEntityView.d.ts +0 -7
  127. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  128. package/src/core/SideEntityView.tsx +0 -38
  129. package/src/internal/useBuildCustomizationController.tsx +0 -5
@@ -15,12 +15,11 @@ import {
15
15
  VirtualTableWhereFilterOp
16
16
  } from "./VirtualTableProps";
17
17
 
18
- import { getRowHeight } from "./common";
19
18
  import { VirtualTableContextProps } from "./types";
20
19
  import { VirtualTableHeaderRow } from "./VirtualTableHeaderRow";
21
20
  import { VirtualTableRow } from "./VirtualTableRow";
22
21
  import { VirtualTableCell } from "./VirtualTableCell";
23
- import { AssignmentIcon, CenteredView, cn, Typography } from "@firecms/ui";
22
+ import { AssignmentIcon, CenteredView, cls, Typography } from "@firecms/ui";
24
23
 
25
24
  const VirtualListContext = createContext<VirtualTableContextProps<any>>({} as any);
26
25
  VirtualListContext.displayName = "VirtualListContext";
@@ -92,7 +91,7 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
92
91
  data,
93
92
  onResetPagination,
94
93
  onEndReached,
95
- size = "m",
94
+ rowHeight = 54,
96
95
  columns: columnsProp,
97
96
  onRowClick,
98
97
  onColumnResize,
@@ -187,7 +186,7 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
187
186
  onSortByUpdate(undefined);
188
187
  }, [onSortByUpdate]);
189
188
 
190
- const maxScroll = Math.max((data?.length ?? 0) * getRowHeight(size) - bounds.height, 0);
189
+ const maxScroll = Math.max((data?.length ?? 0) * rowHeight - bounds.height, 0);
191
190
  const onEndReachedInternal = useCallback((scrollOffset: number) => {
192
191
  if (onEndReached && (data?.length ?? 0) > 0 && scrollOffset > endReachCallbackThreshold.current + 600) {
193
192
  endReachCallbackThreshold.current = scrollOffset;
@@ -253,7 +252,7 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
253
252
 
254
253
  const virtualListController = {
255
254
  data,
256
- size,
255
+ rowHeight: rowHeight,
257
256
  cellRenderer,
258
257
  columns,
259
258
  currentSort,
@@ -276,19 +275,19 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
276
275
  return (
277
276
  <div
278
277
  ref={measureRef}
279
- className={cn("h-full w-full", className)}>
278
+ className={cls("h-full w-full", className)}>
280
279
  <VirtualListContext.Provider
281
280
  value={virtualListController}>
282
281
 
283
282
  <MemoizedList
284
283
  outerRef={tableRef}
285
- key={size}
284
+ key={rowHeight}
286
285
  width={bounds.width}
287
286
  height={bounds.height}
288
287
  itemCount={(data?.length ?? 0) + (endAdornment ? 1 : 0)}
289
288
  onScroll={onScroll}
290
289
  includeAddColumn={Boolean(AddColumnComponent)}
291
- itemSize={getRowHeight(size)}/>
290
+ itemSize={rowHeight}/>
292
291
 
293
292
  </VirtualListContext.Provider>
294
293
  </div>
@@ -328,7 +327,7 @@ function MemoizedList({
328
327
  onRowClick,
329
328
  data,
330
329
  columns,
331
- size = "m",
330
+ rowHeight = 54,
332
331
  cellRenderer,
333
332
  hoverRow,
334
333
  rowClassName,
@@ -361,7 +360,7 @@ function MemoizedList({
361
360
  ...style,
362
361
  top: `calc(${style.top}px + 48px)`
363
362
  }}
364
- size={size}>
363
+ rowHeight={rowHeight}>
365
364
 
366
365
  {columns.map((column: VirtualTableColumn, columnIndex: number) => {
367
366
  const cellData = rowData && rowData[column.key];
@@ -404,7 +403,7 @@ const SafeLinkRenderer: React.FC<{
404
403
  const urlRegex = /https?:\/\/[^\s]+/g;
405
404
  const htmlContent = text.replace(urlRegex, (url) => {
406
405
  // For each URL found, replace it with an HTML <a> tag
407
- return `<a href="${url}" target="_blank">Link</a><br/>`;
406
+ return `<a href="${url}" class="underline" target="_blank">Link</a><br/>`;
408
407
  });
409
408
 
410
409
  return (
@@ -7,7 +7,7 @@ import {
7
7
  ArrowUpwardIcon,
8
8
  Badge,
9
9
  Button,
10
- cn,
10
+ cls,
11
11
  defaultBorderMixin,
12
12
  FilterListIcon,
13
13
  IconButton,
@@ -85,7 +85,7 @@ export const VirtualTableHeader = React.memo<VirtualTableHeaderProps<any>>(
85
85
  return (
86
86
  <ErrorBoundary>
87
87
  <div
88
- className={cn("flex py-0 px-3 h-full text-xs uppercase font-semibold relative select-none items-center bg-gray-50 dark:bg-gray-900",
88
+ className={cls("flex py-0 px-3 h-full text-xs uppercase font-semibold relative select-none items-center bg-gray-50 dark:bg-gray-900",
89
89
  "text-gray-600 hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-200 ",
90
90
  "hover:bg-gray-100 dark:hover:bg-gray-800 hover:bg-opacity-50 dark:hover:bg-opacity-50",
91
91
  column.frozen ? "sticky left-0 z-10" : "relative z-0"
@@ -179,7 +179,7 @@ export const VirtualTableHeader = React.memo<VirtualTableHeaderProps<any>>(
179
179
 
180
180
  {column.resizable && <div
181
181
  ref={resizeHandleRef}
182
- className={cn(
182
+ className={cls(
183
183
  "absolute h-full w-[6px] top-0 right-0 cursor-col-resize",
184
184
  hovered && "bg-gray-300 dark:bg-gray-700"
185
185
  )}
@@ -240,7 +240,7 @@ function FilterForm<M>({
240
240
  }}
241
241
  className={"text-gray-900 dark:text-white"}>
242
242
  <div
243
- className={cn(defaultBorderMixin, "py-4 px-6 text-xs font-semibold uppercase border-b")}>
243
+ className={cls(defaultBorderMixin, "py-4 px-6 text-xs font-semibold uppercase border-b")}>
244
244
  {column.title ?? id}
245
245
  </div>
246
246
  {filterField && <div className="m-4">
@@ -4,7 +4,7 @@ import { VirtualTableColumn, VirtualTableWhereFilterOp } from "./VirtualTablePro
4
4
  import { ErrorBoundary } from "../ErrorBoundary";
5
5
  import { VirtualTableHeader } from "./VirtualTableHeader";
6
6
  import { VirtualTableContextProps } from "./types";
7
- import { cn, defaultBorderMixin } from "@firecms/ui";
7
+ import { cls, defaultBorderMixin } from "@firecms/ui";
8
8
 
9
9
  export const VirtualTableHeaderRow = ({
10
10
  columns,
@@ -100,7 +100,7 @@ export const VirtualTableHeaderRow = ({
100
100
 
101
101
  return (
102
102
  <div
103
- className={cn(defaultBorderMixin, "z-20 sticky min-w-full flex w-fit flex-row top-0 left-0 h-12 border-b bg-gray-50 dark:bg-gray-900")}>
103
+ className={cls(defaultBorderMixin, "z-20 sticky min-w-full flex w-fit flex-row top-0 left-0 h-12 border-b bg-gray-50 dark:bg-gray-900")}>
104
104
  {columns.map((c, columnIndex) => {
105
105
  const column = columns[columnIndex];
106
106
 
@@ -69,7 +69,7 @@ export interface VirtualTableProps<T extends Record<string, any>> {
69
69
  /**
70
70
  * Size of the table
71
71
  */
72
- size?: VirtualTableSize,
72
+ rowHeight?: number,
73
73
 
74
74
  /**
75
75
  * In case this table should have some filters set by default
@@ -232,11 +232,6 @@ export type OnVirtualTableColumnResizeParams = {
232
232
  column: VirtualTableColumn
233
233
  };
234
234
 
235
- /**
236
- * @see Table
237
- * @group Components
238
- */
239
- export type VirtualTableSize = "xs" | "s" | "m" | "l" | "xl";
240
235
 
241
236
  /**
242
237
  * @see Table
@@ -2,9 +2,8 @@ import React, { useCallback } from "react";
2
2
 
3
3
  import equal from "react-fast-compare"
4
4
 
5
- import { getRowHeight } from "./common";
6
5
  import { VirtualTableRowProps } from "./types";
7
- import { cn } from "@firecms/ui";
6
+ import { cls } from "@firecms/ui";
8
7
 
9
8
  export const VirtualTableRow = React.memo<VirtualTableRowProps<any>>(
10
9
  function VirtualTableRow<T>({
@@ -12,7 +11,7 @@ export const VirtualTableRow = React.memo<VirtualTableRowProps<any>>(
12
11
  rowIndex,
13
12
  children,
14
13
  onRowClick,
15
- size,
14
+ rowHeight,
16
15
  style,
17
16
  hoverRow,
18
17
  rowClassName
@@ -29,7 +28,7 @@ export const VirtualTableRow = React.memo<VirtualTableRowProps<any>>(
29
28
 
30
29
  return (
31
30
  <div
32
- className={cn(
31
+ className={cls(
33
32
  "flex min-w-full text-sm border-b border-gray-200 dark:border-gray-800 border-opacity-40 dark:border-opacity-40",
34
33
  rowClassName ? rowClassName(rowData) : "",
35
34
  {
@@ -40,7 +39,7 @@ export const VirtualTableRow = React.memo<VirtualTableRowProps<any>>(
40
39
  onClick={onClick}
41
40
  style={{
42
41
  ...(style),
43
- height: getRowHeight(size),
42
+ height: rowHeight,
44
43
  width: "fit-content"
45
44
  }}
46
45
  >
@@ -5,14 +5,13 @@ import {
5
5
  OnVirtualTableColumnResizeParams,
6
6
  VirtualTableColumn,
7
7
  VirtualTableFilterValues,
8
- VirtualTableSize,
9
8
  VirtualTableWhereFilterOp
10
9
  } from "./VirtualTableProps";
11
10
  import { FilterFormFieldProps } from "./VirtualTableHeader";
12
11
 
13
12
  export type VirtualTableRowProps<T> = {
14
13
  style: any,
15
- size: VirtualTableSize,
14
+ rowHeight: number,
16
15
  rowData: T;
17
16
  rowIndex: number;
18
17
  onRowClick?: (props: OnRowClickParams<any>) => void;
@@ -24,7 +23,7 @@ export type VirtualTableRowProps<T> = {
24
23
 
25
24
  export type VirtualTableContextProps<T extends any> = {
26
25
  data?: T[];
27
- size?: VirtualTableSize,
26
+ rowHeight?: number,
28
27
  columns: VirtualTableColumn[];
29
28
  cellRenderer: React.ComponentType<CellRendererParams<T>>;
30
29
  currentSort: "asc" | "desc" | undefined;
@@ -1,6 +1,6 @@
1
- import { EntityAction } from "../../../types";
2
1
  import { ArchiveIcon, DeleteIcon, FileCopyIcon, KeyboardTabIcon, OpenInNewIcon } from "@firecms/ui";
3
- import { DeleteEntityDialog } from "../../DeleteEntityDialog";
2
+ import { EntityAction } from "../../types";
3
+ import { DeleteEntityDialog } from "../DeleteEntityDialog";
4
4
 
5
5
  export const editEntityAction: EntityAction = {
6
6
  icon: <KeyboardTabIcon/>,
@@ -3,3 +3,4 @@ export * from "./useDebouncedData";
3
3
  export * from "./useColumnsIds";
4
4
  export * from "./useDataSourceEntityCollectionTableController";
5
5
  export * from "./useTableSearchHelper";
6
+ export * from "./default_entity_actions";
@@ -1,6 +1,9 @@
1
- import { VirtualTableSize } from "./VirtualTableProps";
1
+ /**
2
+ * @group Components
3
+ */
4
+ export type TableSize = "xs" | "s" | "m" | "l" | "xl";
2
5
 
3
- export function getRowHeight(size: VirtualTableSize): number {
6
+ export function getRowHeight(size: TableSize): number {
4
7
  switch (size) {
5
8
  case "xl":
6
9
  return 400;
@@ -1,4 +1,4 @@
1
- import { CollectionSize, Entity, FireCMSContext, ResolvedProperty, SelectedCellProps } from "../../types";
1
+ import { CollectionSize, ResolvedProperty, SelectedCellProps } from "../../types";
2
2
 
3
3
  export type EntityCollectionTableController<M extends Record<string, any>> = {
4
4
 
@@ -31,14 +31,12 @@ export type EntityCollectionTableController<M extends Record<string, any>> = {
31
31
  * Props passed in a callback when the content of a cell in a table has been edited
32
32
  * @group Collection components
33
33
  */
34
- export interface OnCellValueChangeParams<T = any, M extends Record<string, any> = any> {
34
+ export interface OnCellValueChangeParams<T = any, D = any> {
35
35
  value: T,
36
36
  propertyKey: string,
37
- entity: Entity<M>,
37
+ data?: D,
38
38
  onValueUpdated: () => void
39
39
  setError: (e: Error | undefined) => void
40
- fullPath: string
41
- context: FireCMSContext
42
40
  }
43
41
 
44
42
  /**
@@ -7,8 +7,16 @@ const COLLECTION_GROUP_PARENT_ID = "collectionGroupParent";
7
7
 
8
8
  export function useColumnIds<M extends Record<string, any>>(collection: ResolvedEntityCollection<M>, includeSubcollections: boolean): PropertyColumnConfig[] {
9
9
  return useMemo(() => {
10
- if (collection.propertiesOrder)
11
- return hideAndExpandKeys(collection, collection.propertiesOrder);
10
+ if (collection.propertiesOrder) {
11
+ const propertyColumnConfigs = hideAndExpandKeys(collection, collection.propertiesOrder);
12
+ if (collection.collectionGroup) {
13
+ propertyColumnConfigs.push({
14
+ key: COLLECTION_GROUP_PARENT_ID,
15
+ disabled: true
16
+ });
17
+ }
18
+ return propertyColumnConfigs;
19
+ }
12
20
  return getDefaultColumnKeys(collection, includeSubcollections);
13
21
  }, [collection, includeSubcollections]);
14
22
  }
@@ -12,6 +12,7 @@ import {
12
12
  User
13
13
  } from "../../types";
14
14
  import { useDebouncedData } from "./useDebouncedData";
15
+ import equal from "react-fast-compare"
15
16
 
16
17
  const DEFAULT_PAGE_SIZE = 50;
17
18
 
@@ -31,6 +32,10 @@ export type DataSourceEntityCollectionTableControllerProps<M extends Record<stri
31
32
  entitiesDisplayedFirst?: Entity<M>[];
32
33
 
33
34
  lastDeleteTimestamp?: number;
35
+
36
+ /**
37
+ * Force filter to be applied to the table.
38
+ */
34
39
  forceFilter?: FilterValues<string>;
35
40
  }
36
41
 
@@ -83,6 +88,12 @@ export function useDataSourceEntityCollectionTableController<M extends Record<st
83
88
  return initialSort;
84
89
  }, [initialSort, forceFilter]);
85
90
 
91
+ useEffect(() => {
92
+ if (!equal(forceFilter, filterValues)) {
93
+ setFilterValues(forceFilter)
94
+ }
95
+ }, [forceFilter]);
96
+
86
97
  const [filterValues, setFilterValues] = React.useState<FilterValues<Extract<keyof M, string>> | undefined>(forceFilter ?? initialFilter ?? undefined);
87
98
  const [sortBy, setSortBy] = React.useState<[Extract<keyof M, string>, "asc" | "desc"] | undefined>(initialSortInternal);
88
99
 
@@ -13,6 +13,7 @@ export * from "./common";
13
13
 
14
14
  export * from "./HomePage";
15
15
  export * from "./SelectableTable/SelectableTable";
16
+ export * from "./SelectableTable/SelectableTableContext";
16
17
  export * from "./EntityCollectionView/EntityCollectionView";
17
18
  export * from "./EntityCollectionView/EntityCollectionViewActions";
18
19
  export * from "./EntityCollectionView/useSelectionController";
@@ -2,31 +2,37 @@ import React, { useCallback } from "react";
2
2
 
3
3
  import { useLargeLayout, useNavigationController } from "../hooks";
4
4
 
5
- import { NavLink, useNavigate } from "react-router-dom";
5
+ import { useNavigate } from "react-router-dom";
6
6
  import { CMSAnalyticsEvent, TopNavigationEntry, TopNavigationResult } from "../types";
7
7
  import { IconForView } from "../util";
8
- import { cn, IconButton, Menu, MenuItem, MoreVertIcon, Tooltip, Typography } from "@firecms/ui";
8
+ import { cls, IconButton, Menu, MenuItem, MoreVertIcon, Tooltip, Typography } from "@firecms/ui";
9
9
  import { useAnalyticsController } from "../hooks/useAnalyticsController";
10
+ import { useDrawer } from "./Scaffold";
11
+ import { DrawerNavigationItem } from "./DrawerNavigationItem";
10
12
 
11
13
  /**
12
14
  * Props used in case you need to override the default drawer
13
15
  * @group Core
14
16
  */
15
- export type DrawerProps<T = {}> = T & {
17
+ export type DrawerProps = {
16
18
  hovered: boolean,
17
19
  drawerOpen: boolean,
18
- closeDrawer: () => any,
20
+ openDrawer: () => void,
21
+ closeDrawer: () => void,
22
+ autoOpenDrawer?: boolean
19
23
  }
20
24
 
21
25
  /**
22
26
  * Default drawer used in the CMS
23
27
  * @group Core
24
28
  */
25
- export function Drawer({
26
- hovered,
27
- drawerOpen,
28
- closeDrawer
29
- }: DrawerProps) {
29
+ export function Drawer() {
30
+
31
+ const {
32
+ hovered,
33
+ drawerOpen,
34
+ closeDrawer,
35
+ } = useDrawer();
30
36
 
31
37
  const analyticsController = useAnalyticsController();
32
38
  const navigation = useNavigationController();
@@ -108,7 +114,7 @@ export function Drawer({
108
114
  <MoreVertIcon/>
109
115
  </Tooltip>
110
116
  {drawerOpen && <div
111
- className={cn(
117
+ className={cls(
112
118
  drawerOpen ? "opacity-100" : "opacity-0 hidden",
113
119
  "mx-4 font-inherit text-inherit"
114
120
  )}>
@@ -131,61 +137,3 @@ export function Drawer({
131
137
  </>
132
138
  );
133
139
  }
134
-
135
- export function DrawerNavigationItem({
136
- name,
137
- icon,
138
- drawerOpen,
139
- tooltipsOpen,
140
- url,
141
- onClick
142
- }: {
143
- icon: React.ReactElement,
144
- name: string,
145
- tooltipsOpen: boolean,
146
- drawerOpen: boolean,
147
- url: string,
148
- onClick?: () => void,
149
- }) {
150
-
151
- const iconWrap = <div
152
- className={"text-gray-600 dark:text-gray-500"}>
153
- {icon}
154
- </div>;
155
-
156
- const listItem = <NavLink
157
- onClick={onClick}
158
- style={{
159
- width: !drawerOpen ? "72px" : "280px",
160
- transition: drawerOpen ? "width 150ms ease-in" : undefined
161
- }}
162
- className={({ isActive }: any) => cn("rounded-r-xl truncate",
163
- "hover:bg-slate-300 hover:bg-opacity-75 dark:hover:bg-gray-700 dark:hover:bg-opacity-75 text-gray-800 dark:text-gray-200 hover:text-gray-900 hover:dark:text-white",
164
- "flex flex-row items-center mr-8",
165
- // "transition-all ease-in-out delay-100 duration-300",
166
- // drawerOpen ? "w-full" : "w-18",
167
- drawerOpen ? "pl-8 h-12" : "pl-6 h-11",
168
- "font-medium text-sm",
169
- isActive ? "bg-slate-200 bg-opacity-75 dark:bg-gray-800" : ""
170
- )}
171
- to={url}
172
- >
173
-
174
- {iconWrap}
175
-
176
- <div
177
- className={cn(
178
- drawerOpen ? "opacity-100" : "opacity-0 hidden",
179
- "ml-4 font-inherit text-inherit"
180
- )}>
181
- {name.toUpperCase()}
182
- </div>
183
- </NavLink>;
184
-
185
- return <Tooltip
186
- open={drawerOpen ? false : tooltipsOpen}
187
- side="right"
188
- title={name}>
189
- {listItem}
190
- </Tooltip>;
191
- }
@@ -0,0 +1,62 @@
1
+ import React from "react";
2
+
3
+ import { NavLink } from "react-router-dom";
4
+ import { cls, Tooltip } from "@firecms/ui";
5
+
6
+ export function DrawerNavigationItem({
7
+ name,
8
+ icon,
9
+ drawerOpen,
10
+ tooltipsOpen,
11
+ url,
12
+ onClick
13
+ }: {
14
+ icon: React.ReactElement,
15
+ name: string,
16
+ tooltipsOpen: boolean,
17
+ drawerOpen: boolean,
18
+ url: string,
19
+ onClick?: () => void,
20
+ }) {
21
+
22
+ const iconWrap = <div
23
+ className={"text-gray-600 dark:text-gray-500"}>
24
+ {icon}
25
+ </div>;
26
+
27
+ const listItem = <NavLink
28
+ onClick={onClick}
29
+ style={{
30
+ width: !drawerOpen ? "72px" : "280px",
31
+ transition: drawerOpen ? "width 150ms ease-in" : undefined
32
+ }}
33
+ className={({ isActive }: any) => cls("rounded-r-lg truncate",
34
+ "hover:bg-slate-300 hover:bg-opacity-75 dark:hover:bg-gray-700 dark:hover:bg-opacity-75 text-gray-800 dark:text-gray-200 hover:text-gray-900 hover:dark:text-white",
35
+ "flex flex-row items-center mr-8",
36
+ // "transition-all ease-in-out delay-100 duration-300",
37
+ // drawerOpen ? "w-full" : "w-18",
38
+ drawerOpen ? "pl-8 h-12" : "pl-6 h-11",
39
+ "font-medium text-sm",
40
+ isActive ? "bg-slate-200 bg-opacity-60 dark:bg-gray-800 dark:bg-opacity-30" : ""
41
+ )}
42
+ to={url}
43
+ >
44
+
45
+ {iconWrap}
46
+
47
+ <div
48
+ className={cls(
49
+ drawerOpen ? "opacity-100" : "opacity-0 hidden",
50
+ "ml-4 font-inherit text-inherit"
51
+ )}>
52
+ {name.toUpperCase()}
53
+ </div>
54
+ </NavLink>;
55
+
56
+ return <Tooltip
57
+ open={drawerOpen ? false : tooltipsOpen}
58
+ side="right"
59
+ title={name}>
60
+ {listItem}
61
+ </Tooltip>;
62
+ }
@@ -29,9 +29,8 @@ import {
29
29
  useSnackbarController
30
30
  } from "../hooks";
31
31
  import { EntityForm } from "../form";
32
- import { CircularProgress, CloseIcon, cn, defaultBorderMixin, IconButton, Tab, Tabs, Typography } from "@firecms/ui";
32
+ import { CircularProgress, CloseIcon, cls, defaultBorderMixin, IconButton, Tab, Tabs, Typography } from "@firecms/ui";
33
33
  import { EntityFormSaveParams } from "../form/EntityForm";
34
- import { FORM_CONTAINER_WIDTH } from "../internal/common";
35
34
  import { useSideDialogContext } from "./index";
36
35
 
37
36
  const MAIN_TAB_VALUE = "main_##Q$SC^#S6";
@@ -91,8 +90,7 @@ export function EntityEditView<M extends Record<string, any>, UserType extends U
91
90
 
92
91
  // const largeLayout = useLargeLayout();
93
92
  // const largeLayoutTabSelected = useRef(!largeLayout);
94
-
95
- const resolvedFormWidth: string = typeof formWidth === "number" ? `${formWidth}px` : formWidth ?? FORM_CONTAINER_WIDTH;
93
+ // const resolvedFormWidth: string = typeof formWidth === "number" ? `${formWidth}px` : formWidth ?? FORM_CONTAINER_WIDTH;
96
94
 
97
95
  const dataSource = useDataSource(collection);
98
96
  const sideDialogContext = useSideDialogContext();
@@ -195,6 +193,7 @@ export function EntityEditView<M extends Record<string, any>, UserType extends U
195
193
  onUpdate({ entity: updatedEntity });
196
194
 
197
195
  if (closeAfterSave) {
196
+ console.log("Closing side dialog")
198
197
  sideDialogContext.setBlocked(false);
199
198
  sideDialogContext.close(true);
200
199
  onClose?.();
@@ -238,7 +237,7 @@ export function EntityEditView<M extends Record<string, any>, UserType extends U
238
237
  closeAfterSave: boolean,
239
238
  }) => {
240
239
  setSaving(true);
241
- saveEntityWithCallbacks({
240
+ return saveEntityWithCallbacks({
242
241
  path,
243
242
  entityId,
244
243
  values,
@@ -269,7 +268,7 @@ export function EntityEditView<M extends Record<string, any>, UserType extends U
269
268
  if (autoSave) {
270
269
  setValuesToBeSaved(values);
271
270
  } else {
272
- saveEntity({
271
+ return saveEntity({
273
272
  collection,
274
273
  path,
275
274
  entityId,
@@ -298,7 +297,7 @@ export function EntityEditView<M extends Record<string, any>, UserType extends U
298
297
  return null;
299
298
  }
300
299
  return <div
301
- className={cn(defaultBorderMixin,
300
+ className={cls(defaultBorderMixin,
302
301
  "relative flex-grow w-full h-full overflow-auto ")}
303
302
  key={`custom_view_${customView.key}`}
304
303
  role="tabpanel">
@@ -482,7 +481,7 @@ export function EntityEditView<M extends Record<string, any>, UserType extends U
482
481
  <>
483
482
 
484
483
  <div
485
- className={cn(defaultBorderMixin, "no-scrollbar border-b pl-2 pr-2 pt-1 flex items-end overflow-scroll bg-gray-50 dark:bg-gray-950")}>
484
+ className={cls(defaultBorderMixin, "no-scrollbar border-b pl-2 pr-2 pt-1 flex items-end overflow-scroll bg-gray-50 dark:bg-gray-950")}>
486
485
 
487
486
  <div
488
487
  className="pb-1 self-center">
@@ -33,7 +33,7 @@ export function EntitySidePanel(props: EntitySidePanelProps) {
33
33
  if (!props) return undefined;
34
34
  let usedCollection = props.collection;
35
35
 
36
- const registryCollection = navigationController.getCollection(props.path, props.entityId);
36
+ const registryCollection = navigationController.getCollection(props.path);
37
37
  if (registryCollection) {
38
38
  usedCollection = registryCollection;
39
39
  }