@firecms/core 3.0.0-canary.13 → 3.0.0-canary.131

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 (293) hide show
  1. package/README.md +2 -2
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +17 -0
  4. package/dist/app/Scaffold.d.ts +30 -0
  5. package/dist/app/index.d.ts +4 -0
  6. package/dist/app/useApp.d.ts +16 -0
  7. package/dist/components/ArrayContainer.d.ts +2 -1
  8. package/dist/components/CircularProgressCenter.d.ts +1 -1
  9. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  10. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  11. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +11 -12
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +5 -3
  14. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
  15. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  16. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
  17. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  18. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  19. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +2 -2
  20. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +12 -2
  21. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  22. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  23. package/dist/components/EntityPreview.d.ts +7 -6
  24. package/dist/components/ErrorView.d.ts +1 -1
  25. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  26. package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
  27. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  28. package/dist/components/ReferenceWidget.d.ts +3 -1
  29. package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
  30. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  31. package/dist/components/VirtualTable/VirtualTableProps.d.ts +15 -12
  32. package/dist/components/VirtualTable/types.d.ts +3 -3
  33. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
  34. package/dist/components/common/index.d.ts +1 -0
  35. package/dist/components/common/table_height.d.ts +5 -0
  36. package/dist/components/common/types.d.ts +4 -6
  37. package/dist/components/common/useColumnsIds.d.ts +2 -1
  38. package/dist/components/common/useDataSourceEntityCollectionTableController.d.ts +3 -0
  39. package/dist/components/index.d.ts +4 -2
  40. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
  41. package/dist/core/DefaultDrawer.d.ts +19 -0
  42. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  43. package/dist/core/EntityEditView.d.ts +18 -4
  44. package/dist/core/FireCMS.d.ts +1 -1
  45. package/dist/core/NavigationRoutes.d.ts +3 -3
  46. package/dist/core/index.d.ts +3 -4
  47. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  48. package/dist/form/components/ErrorFocus.d.ts +1 -1
  49. package/dist/form/components/FieldHelperText.d.ts +3 -3
  50. package/dist/form/components/FormikArrayContainer.d.ts +2 -1
  51. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  52. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  53. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  54. package/dist/form/components/index.d.ts +1 -0
  55. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  56. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  57. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  58. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  59. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  60. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  61. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  62. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  63. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  64. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  65. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
  66. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  67. package/dist/form/index.d.ts +3 -5
  68. package/dist/form/useClearRestoreValue.d.ts +2 -2
  69. package/dist/hooks/data/save.d.ts +1 -2
  70. package/dist/hooks/index.d.ts +1 -0
  71. package/dist/hooks/useBuildNavigationController.d.ts +1 -2
  72. package/dist/hooks/useProjectLog.d.ts +8 -2
  73. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  74. package/dist/index.d.ts +1 -0
  75. package/dist/index.es.js +15834 -12470
  76. package/dist/index.es.js.map +1 -1
  77. package/dist/index.umd.js +20045 -587
  78. package/dist/index.umd.js.map +1 -1
  79. package/dist/internal/useBuildDataSource.d.ts +1 -16
  80. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  81. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  82. package/dist/preview/components/ReferencePreview.d.ts +3 -2
  83. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  84. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  85. package/dist/types/auth.d.ts +3 -3
  86. package/dist/types/collections.d.ts +39 -5
  87. package/dist/types/datasource.d.ts +55 -35
  88. package/dist/types/entities.d.ts +6 -1
  89. package/dist/types/entity_actions.d.ts +14 -0
  90. package/dist/types/entity_overrides.d.ts +2 -2
  91. package/dist/types/fields.d.ts +47 -41
  92. package/dist/types/firecms.d.ts +4 -0
  93. package/dist/types/index.d.ts +0 -1
  94. package/dist/types/navigation.d.ts +6 -5
  95. package/dist/types/plugins.d.ts +14 -4
  96. package/dist/types/properties.d.ts +34 -21
  97. package/dist/types/side_dialogs_controller.d.ts +10 -0
  98. package/dist/types/storage.d.ts +86 -3
  99. package/dist/util/entities.d.ts +2 -2
  100. package/dist/util/icon_list.d.ts +5 -1
  101. package/dist/util/icon_synonyms.d.ts +1 -97
  102. package/dist/util/icons.d.ts +3 -2
  103. package/dist/util/index.d.ts +1 -0
  104. package/dist/util/navigation_utils.d.ts +2 -2
  105. package/dist/util/objects.d.ts +1 -1
  106. package/dist/util/plurals.d.ts +0 -2
  107. package/dist/util/property_utils.d.ts +1 -1
  108. package/dist/util/resolutions.d.ts +27 -13
  109. package/dist/util/storage.d.ts +23 -2
  110. package/dist/util/useStorageUploadController.d.ts +3 -3
  111. package/package.json +128 -119
  112. package/src/app/AppBar.tsx +18 -0
  113. package/src/app/Drawer.tsx +25 -0
  114. package/src/app/Scaffold.tsx +244 -0
  115. package/src/app/index.ts +4 -0
  116. package/src/app/useApp.tsx +32 -0
  117. package/src/components/ArrayContainer.tsx +16 -11
  118. package/src/components/CircularProgressCenter.tsx +1 -1
  119. package/src/components/ClearFilterSortButton.tsx +41 -0
  120. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +1 -1
  121. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +12 -19
  122. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +21 -20
  123. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +10 -6
  124. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +41 -35
  125. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  126. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +31 -16
  127. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +14 -6
  128. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +29 -34
  129. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +32 -30
  130. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +19 -7
  131. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +7 -10
  132. package/src/components/EntityCollectionView/EntityCollectionView.tsx +136 -83
  133. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  134. package/src/components/EntityCollectionView/useSelectionController.tsx +19 -7
  135. package/src/components/EntityCollectionView/utils.ts +19 -0
  136. package/src/components/EntityPreview.tsx +42 -38
  137. package/src/components/EntityView.tsx +5 -5
  138. package/src/components/ErrorView.tsx +1 -1
  139. package/src/components/HomePage/DefaultHomePage.tsx +25 -19
  140. package/src/components/HomePage/NavigationCard.tsx +3 -3
  141. package/src/components/HomePage/NavigationCardBinding.tsx +1 -1
  142. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  143. package/src/components/PropertyIdCopyTooltip.tsx +48 -0
  144. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +8 -6
  145. package/src/components/ReferenceWidget.tsx +22 -12
  146. package/src/components/SearchIconsView.tsx +10 -7
  147. package/src/components/SelectableTable/SelectableTable.tsx +7 -7
  148. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  149. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +22 -7
  150. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +28 -6
  151. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +88 -21
  152. package/src/components/VirtualTable/VirtualTable.tsx +77 -46
  153. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  154. package/src/components/VirtualTable/VirtualTableHeader.tsx +4 -4
  155. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  156. package/src/components/VirtualTable/VirtualTableProps.tsx +18 -14
  157. package/src/components/VirtualTable/VirtualTableRow.tsx +4 -5
  158. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
  159. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -1
  160. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  161. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +14 -28
  162. package/src/components/VirtualTable/types.tsx +2 -3
  163. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +6 -2
  164. package/src/components/common/index.ts +1 -0
  165. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  166. package/src/components/common/types.tsx +4 -6
  167. package/src/components/common/useColumnsIds.tsx +23 -2
  168. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +23 -12
  169. package/src/components/common/useTableSearchHelper.ts +53 -12
  170. package/src/components/index.tsx +4 -2
  171. package/src/contexts/DialogsProvider.tsx +2 -2
  172. package/src/{components/FireCMSAppBar.tsx → core/DefaultAppBar.tsx} +52 -37
  173. package/src/core/DefaultDrawer.tsx +183 -0
  174. package/src/core/DrawerNavigationItem.tsx +66 -0
  175. package/src/core/EntityEditView.tsx +715 -149
  176. package/src/core/EntitySidePanel.tsx +1 -2
  177. package/src/core/FireCMS.tsx +53 -49
  178. package/src/core/NavigationRoutes.tsx +7 -8
  179. package/src/core/SideDialogs.tsx +1 -0
  180. package/src/core/field_configs.tsx +7 -8
  181. package/src/core/index.tsx +3 -4
  182. package/src/form/PropertyFieldBinding.tsx +53 -21
  183. package/src/form/components/CustomIdField.tsx +4 -2
  184. package/src/form/components/FieldHelperText.tsx +4 -4
  185. package/src/form/components/FormikArrayContainer.tsx +4 -1
  186. package/src/form/components/LabelWithIcon.tsx +27 -19
  187. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  188. package/src/form/components/StorageItemPreview.tsx +21 -11
  189. package/src/form/components/StorageUploadProgress.tsx +3 -4
  190. package/src/form/components/index.tsx +1 -0
  191. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +26 -15
  192. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +29 -24
  193. package/src/form/field_bindings/BlockFieldBinding.tsx +14 -12
  194. package/src/form/field_bindings/DateTimeFieldBinding.tsx +17 -14
  195. package/src/form/field_bindings/KeyValueFieldBinding.tsx +52 -46
  196. package/src/form/field_bindings/MapFieldBinding.tsx +17 -17
  197. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +150 -0
  198. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
  199. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  200. package/src/form/field_bindings/ReferenceFieldBinding.tsx +41 -30
  201. package/src/form/field_bindings/RepeatFieldBinding.tsx +32 -19
  202. package/src/form/field_bindings/SelectFieldBinding.tsx +20 -13
  203. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +36 -46
  204. package/src/form/field_bindings/SwitchFieldBinding.tsx +9 -5
  205. package/src/form/field_bindings/TextFieldBinding.tsx +26 -23
  206. package/src/form/index.tsx +4 -9
  207. package/src/form/useClearRestoreValue.tsx +2 -2
  208. package/src/form/validation.ts +1 -17
  209. package/src/hooks/data/delete.ts +2 -1
  210. package/src/hooks/data/save.ts +6 -1
  211. package/src/hooks/data/useDataSource.tsx +11 -3
  212. package/src/hooks/index.tsx +1 -0
  213. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  214. package/src/hooks/useBuildModeController.tsx +11 -5
  215. package/src/hooks/useBuildNavigationController.tsx +91 -31
  216. package/src/hooks/useProjectLog.tsx +32 -10
  217. package/src/hooks/useResolvedNavigationFrom.tsx +1 -1
  218. package/src/hooks/useValidateAuthenticator.tsx +21 -41
  219. package/src/index.ts +1 -0
  220. package/src/internal/useBuildDataSource.ts +71 -81
  221. package/src/internal/useBuildSideDialogsController.tsx +1 -0
  222. package/src/internal/useBuildSideEntityController.tsx +102 -22
  223. package/src/internal/useUnsavedChangesDialog.tsx +3 -1
  224. package/src/preview/PropertyPreview.tsx +10 -17
  225. package/src/preview/PropertyPreviewProps.tsx +7 -1
  226. package/src/preview/components/BooleanPreview.tsx +2 -2
  227. package/src/preview/components/EnumValuesChip.tsx +2 -2
  228. package/src/preview/components/ImagePreview.tsx +24 -34
  229. package/src/preview/components/ReferencePreview.tsx +23 -34
  230. package/src/preview/components/StorageThumbnail.tsx +5 -1
  231. package/src/preview/components/UrlComponentPreview.tsx +44 -11
  232. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +1 -2
  233. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +3 -2
  234. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +1 -2
  235. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +0 -1
  236. package/src/preview/property_previews/ArrayOneOfPreview.tsx +3 -4
  237. package/src/preview/property_previews/ArrayPropertyPreview.tsx +3 -4
  238. package/src/preview/property_previews/MapPropertyPreview.tsx +6 -6
  239. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +2 -2
  240. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  241. package/src/preview/util.ts +2 -2
  242. package/src/types/auth.tsx +3 -3
  243. package/src/types/collections.ts +48 -7
  244. package/src/types/customization_controller.tsx +0 -1
  245. package/src/types/datasource.ts +65 -43
  246. package/src/types/entities.ts +11 -1
  247. package/src/types/entity_actions.tsx +16 -3
  248. package/src/types/entity_overrides.tsx +2 -2
  249. package/src/types/fields.tsx +51 -45
  250. package/src/types/firecms.tsx +5 -0
  251. package/src/types/index.ts +0 -1
  252. package/src/types/navigation.ts +7 -7
  253. package/src/types/plugins.tsx +16 -6
  254. package/src/types/properties.ts +39 -22
  255. package/src/types/side_dialogs_controller.tsx +13 -0
  256. package/src/types/storage.ts +94 -3
  257. package/src/util/entities.ts +6 -5
  258. package/src/util/enums.ts +1 -1
  259. package/src/util/icon_list.ts +15 -10
  260. package/src/util/icon_synonyms.ts +3 -99
  261. package/src/util/icons.tsx +8 -2
  262. package/src/util/index.ts +1 -0
  263. package/src/util/make_properties_editable.ts +13 -5
  264. package/src/util/navigation_utils.ts +6 -6
  265. package/src/util/objects.ts +25 -28
  266. package/src/util/permissions.ts +1 -0
  267. package/src/util/plurals.ts +0 -2
  268. package/src/util/property_utils.tsx +1 -1
  269. package/src/util/references.ts +3 -0
  270. package/src/util/resolutions.ts +74 -41
  271. package/src/util/storage.ts +79 -21
  272. package/src/util/strings.ts +2 -2
  273. package/src/util/useStorageUploadController.tsx +33 -7
  274. package/src/util/useTraceUpdate.tsx +1 -0
  275. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  276. package/dist/components/VirtualTable/common.d.ts +0 -2
  277. package/dist/core/Drawer.d.ts +0 -23
  278. package/dist/core/Scaffold.d.ts +0 -55
  279. package/dist/core/SideEntityView.d.ts +0 -7
  280. package/dist/form/EntityForm.d.ts +0 -77
  281. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  282. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  283. package/dist/internal/useLocaleConfig.d.ts +0 -1
  284. package/dist/types/appcheck.d.ts +0 -26
  285. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  286. package/src/core/Drawer.tsx +0 -191
  287. package/src/core/Scaffold.tsx +0 -281
  288. package/src/core/SideEntityView.tsx +0 -38
  289. package/src/form/EntityForm.tsx +0 -728
  290. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  291. package/src/internal/useBuildCustomizationController.tsx +0 -5
  292. package/src/internal/useLocaleConfig.tsx +0 -18
  293. package/src/types/appcheck.ts +0 -29
@@ -21,7 +21,6 @@ export interface PropertiesToColumnsParams<M extends Record<string, any>> {
21
21
  properties: ResolvedProperties<M>;
22
22
  sortable?: boolean;
23
23
  forceFilter?: FilterValues<keyof M extends string ? keyof M : never>;
24
- disabledFilter?: boolean;
25
24
  AdditionalHeaderWidget?: React.ComponentType<{
26
25
  property: ResolvedProperty,
27
26
  propertyKey: string,
@@ -29,7 +28,8 @@ export interface PropertiesToColumnsParams<M extends Record<string, any>> {
29
28
  }>;
30
29
  }
31
30
 
32
- export function propertiesToColumns<M extends Record<string, any>>({ properties, sortable, forceFilter, disabledFilter, AdditionalHeaderWidget }: PropertiesToColumnsParams<M>): VirtualTableColumn[] {
31
+ export function propertiesToColumns<M extends Record<string, any>>({ properties, sortable, forceFilter, AdditionalHeaderWidget }: PropertiesToColumnsParams<M>): VirtualTableColumn[] {
32
+ const disabledFilter = Boolean(forceFilter);
33
33
  return Object.entries<ResolvedProperty>(properties)
34
34
  .flatMap(([key, property]) => getColumnKeysForProperty(property, key))
35
35
  .map(({
@@ -45,7 +45,7 @@ export function propertiesToColumns<M extends Record<string, any>>({ properties,
45
45
  align: getTableCellAlignment(property),
46
46
  icon: getIconForProperty(property, "small"),
47
47
  title: property.name ?? key as string,
48
- sortable: sortable && (forceFilter ? Object.keys(forceFilter).includes(key) : true),
48
+ sortable: sortable,
49
49
  filter: !disabledFilter && filterable,
50
50
  width: getTablePropertyColumnWidth(property),
51
51
  resizable: true,
@@ -1,14 +1,14 @@
1
- import React, { useCallback, useState } from "react";
1
+ import React, { useCallback } from "react";
2
2
  import equal from "react-fast-compare"
3
3
 
4
4
  import { ReferencePreview } from "../../../preview";
5
5
  import { CollectionSize, Entity, EntityCollection, EntityReference, FilterValues } from "../../../types";
6
6
 
7
7
  import { getPreviewSizeFrom } from "../../../preview/util";
8
- import { getReferenceFrom } from "../../../util";
8
+ import { getReferenceFrom, IconForView } from "../../../util";
9
9
  import { useCustomizationController, useNavigationController, useReferenceDialog } from "../../../hooks";
10
10
  import { ErrorView } from "../../ErrorView";
11
- import { Button } from "@firecms/ui";
11
+ import { cls } from "@firecms/ui";
12
12
  import { EntityPreviewContainer } from "../../EntityPreview";
13
13
 
14
14
  type TableReferenceFieldProps = {
@@ -22,6 +22,8 @@ type TableReferenceFieldProps = {
22
22
  title?: string;
23
23
  path: string;
24
24
  forceFilter?: FilterValues<string>;
25
+ includeId?: boolean;
26
+ includeEntityLink?: boolean;
25
27
  };
26
28
 
27
29
  export function TableReferenceField(props: TableReferenceFieldProps) {
@@ -29,7 +31,7 @@ export function TableReferenceField(props: TableReferenceFieldProps) {
29
31
 
30
32
  const navigationController = useNavigationController();
31
33
  const { path } = props;
32
- const collection = navigationController.getCollection<EntityCollection>(path);
34
+ const collection = navigationController.getCollection(path);
33
35
  if (!collection) {
34
36
  if (customizationController.components?.missingReference) {
35
37
  return <customizationController.components.missingReference path={path}/>;
@@ -37,11 +39,11 @@ export function TableReferenceField(props: TableReferenceFieldProps) {
37
39
  throw Error(`Couldn't find the corresponding collection view for the path: ${path}`);
38
40
  }
39
41
  }
40
- return <TableReferenceFieldSuccess {...props} collection={collection}/>;
42
+ return <TableReferenceFieldInternal {...props} collection={collection}/>;
41
43
  }
42
44
 
43
- export const TableReferenceFieldSuccess = React.memo(
44
- function TableReferenceFieldSuccess(props: TableReferenceFieldProps & {
45
+ export const TableReferenceFieldInternal = React.memo(
46
+ function TableReferenceFieldInternal(props: TableReferenceFieldProps & {
45
47
  collection: EntityCollection;
46
48
  }) {
47
49
  const {
@@ -55,7 +57,9 @@ export const TableReferenceFieldSuccess = React.memo(
55
57
  title,
56
58
  disabled,
57
59
  forceFilter,
58
- collection
60
+ collection,
61
+ includeId,
62
+ includeEntityLink
59
63
  } = props;
60
64
 
61
65
  const onSingleEntitySelected = useCallback((entity: Entity<any>) => {
@@ -83,11 +87,11 @@ export const TableReferenceFieldSuccess = React.memo(
83
87
  }
84
88
  );
85
89
 
86
- const handleOpen = useCallback(() => {
90
+ const handleOpen = () => {
87
91
  if (disabled)
88
92
  return;
89
93
  referenceDialogController.open();
90
- }, [disabled, referenceDialogController]);
94
+ };
91
95
 
92
96
  const valueNotSet = !internalValue || (Array.isArray(internalValue) && internalValue.length === 0);
93
97
 
@@ -100,6 +104,8 @@ export const TableReferenceFieldSuccess = React.memo(
100
104
  hover={!disabled}
101
105
  disabled={!path}
102
106
  previewProperties={previewProperties}
107
+ includeId={includeId}
108
+ includeEntityLink={includeEntityLink}
103
109
  />;
104
110
  else
105
111
  return <EntityPreviewContainer
@@ -117,11 +123,13 @@ export const TableReferenceFieldSuccess = React.memo(
117
123
  key={`preview_array_ref_${name}_${index}`}>
118
124
  <ReferencePreview
119
125
  onClick={disabled ? undefined : handleOpen}
120
- size={"tiny"}
126
+ size={"smallest"}
121
127
  reference={reference}
122
128
  hover={!disabled}
123
129
  disabled={!path}
124
130
  previewProperties={previewProperties}
131
+ includeId={includeId}
132
+ includeEntityLink={includeEntityLink}
125
133
  />
126
134
  </div>
127
135
  )
@@ -142,13 +150,20 @@ export const TableReferenceFieldSuccess = React.memo(
142
150
  {internalValue && multiselect && buildMultipleReferenceField()}
143
151
 
144
152
  {valueNotSet &&
145
- <Button
153
+ <EntityPreviewContainer
154
+ className={cls("px-4 py-2 text-sm font-medium flex items-center uppercase",
155
+ multiselect ? "gap-4" : "gap-6",
156
+ disabled
157
+ ? "text-slate-500"
158
+ : "cursor-pointer text-slate-700 dark:text-slate-300 hover:bg-slate-50 dark:hover:bg-gray-800 group-hover:bg-slate-50 dark:group-hover:bg-gray-800")}
146
159
  onClick={handleOpen}
147
- size={"small"}
148
- variant="outlined"
149
- color="primary">
160
+ size={"medium"}>
161
+ <IconForView
162
+ size={"small"}
163
+ collectionOrView={collection}
164
+ className={"text-gray-300 dark:text-gray-600"}/>
150
165
  Edit {title}
151
- </Button>}
166
+ </EntityPreviewContainer>}
152
167
 
153
168
  </div>
154
169
  );
@@ -9,7 +9,7 @@ import { useSnackbarController, useStorageSource } from "../../../hooks";
9
9
  import { getThumbnailMeasure } from "../../../preview/util";
10
10
  import { StorageFieldItem, useStorageUploadController } from "../../../util/useStorageUploadController";
11
11
  import { StorageUploadProgress } from "../../../form/components/StorageUploadProgress";
12
- import { cn, EditIcon, IconButton, Typography } from "@firecms/ui";
12
+ import { cls, EditIcon, IconButton, Typography } from "@firecms/ui";
13
13
  import { EntityTableCellActions } from "../internal/EntityTableCellActions";
14
14
 
15
15
  const dropZoneClasses = "max-w-full box-border relative pt-[2px] items-center border border-transparent outline-none rounded-md duration-200 ease-[cubic-bezier(0.4,0,0.2,1)] focus:border-primary-solid";
@@ -179,10 +179,18 @@ function StorageUpload({
179
179
  onDropRejected: (fileRejections, event) => {
180
180
  for (const fileRejection of fileRejections) {
181
181
  for (const error of fileRejection.errors) {
182
- snackbarContext.open({
183
- type: "error",
184
- message: `Error uploading file: File is larger than ${storage.maxSize} bytes`
185
- });
182
+ console.error("Error uploading file: ", error);
183
+ if (error.code === "file-too-large") {
184
+ snackbarContext.open({
185
+ type: "error",
186
+ message: `Error uploading file: File is larger than ${storage.maxSize} bytes`
187
+ });
188
+ } else if (error.code === "file-invalid-type") {
189
+ snackbarContext.open({
190
+ type: "error",
191
+ message: "Error uploading file: File type is not supported"
192
+ });
193
+ }
186
194
  }
187
195
  }
188
196
  }
@@ -207,7 +215,7 @@ function StorageUpload({
207
215
  onMouseEnter={() => setOnHover(true)}
208
216
  onMouseMove={() => setOnHover(true)}
209
217
  onMouseLeave={() => setOnHover(false)}
210
- className={cn(dropZoneClasses,
218
+ className={cls(dropZoneClasses,
211
219
  "relative w-full h-full flex",
212
220
  `justify-${hasValue ? "start" : "center"}`,
213
221
  isDragActive ? activeDropClasses : "",
@@ -3,7 +3,7 @@ import React, { useEffect } from "react";
3
3
  import {
4
4
  Button,
5
5
  CircularProgress,
6
- cn,
6
+ cls,
7
7
  defaultBorderMixin,
8
8
  FilterListOffIcon,
9
9
  SearchBar,
@@ -16,20 +16,27 @@ import { useLargeLayout } from "../../../hooks";
16
16
 
17
17
  interface CollectionTableToolbarProps {
18
18
  size: CollectionSize;
19
- filterIsSet: boolean;
20
19
  loading: boolean;
21
- forceFilter?: boolean;
22
20
  actionsStart?: React.ReactNode;
23
21
  actions?: React.ReactNode;
24
22
  title?: React.ReactNode,
25
23
  onTextSearchClick?: () => void;
26
24
  onTextSearch?: (searchString?: string) => void;
27
25
  onSizeChanged: (size: CollectionSize) => void;
28
- clearFilter?: () => void;
29
26
  textSearchLoading?: boolean;
30
27
  }
31
28
 
32
- export function CollectionTableToolbar(props: CollectionTableToolbarProps) {
29
+ export function CollectionTableToolbar({
30
+ actions,
31
+ actionsStart,
32
+ loading,
33
+ onSizeChanged,
34
+ onTextSearch,
35
+ onTextSearchClick,
36
+ size,
37
+ textSearchLoading,
38
+ title
39
+ }: CollectionTableToolbarProps) {
33
40
 
34
41
  const searchInputRef = React.useRef<HTMLInputElement>(null);
35
42
  const largeLayout = useLargeLayout();
@@ -37,30 +44,20 @@ export function CollectionTableToolbar(props: CollectionTableToolbarProps) {
37
44
  const searchLoading = React.useRef<boolean>(false);
38
45
 
39
46
  useEffect(() => {
40
- if (searchInputRef.current && searchLoading.current && !props.textSearchLoading) {
47
+ if (searchInputRef.current && searchLoading.current && !textSearchLoading) {
41
48
  searchInputRef.current.focus();
42
49
  }
43
- searchLoading.current = props.textSearchLoading ?? false;
44
- }, [props.textSearchLoading]);
45
-
46
- const clearFilterButton = !props.forceFilter && props.filterIsSet && props.clearFilter &&
47
- <Button
48
- variant={"outlined"}
49
- className="h-fit-content"
50
- aria-label="filter clear"
51
- onClick={props.clearFilter}
52
- size={"small"}>
53
- <FilterListOffIcon/>
54
- Clear filter
55
- </Button>;
50
+ searchLoading.current = textSearchLoading ?? false;
51
+ }, [textSearchLoading]);
52
+
56
53
 
57
54
  const sizeSelect = (
58
55
  <Tooltip title={"Table row size"} side={"right"} sideOffset={4}>
59
56
  <Select
60
- value={props.size as string}
57
+ value={size as string}
61
58
  className="w-16 h-10"
62
59
  size={"small"}
63
- onValueChange={(v) => props.onSizeChanged(v as CollectionSize)}
60
+ onValueChange={(v) => onSizeChanged(v as CollectionSize)}
64
61
  renderValue={(v) => <div className={"font-medium"}>{v.toUpperCase()}</div>}
65
62
  >
66
63
  {["xs", "s", "m", "l", "xl"].map((size) => (
@@ -74,40 +71,38 @@ export function CollectionTableToolbar(props: CollectionTableToolbarProps) {
74
71
 
75
72
  return (
76
73
  <div
77
- className={cn(defaultBorderMixin, "no-scrollbar min-h-[56px] overflow-x-auto px-2 md:px-4 bg-gray-50 dark:bg-gray-900 border-b flex flex-row justify-between items-center w-full")}>
74
+ className={cls(defaultBorderMixin, "no-scrollbar min-h-[56px] overflow-x-auto px-2 md:px-4 bg-gray-50 dark:bg-gray-900 border-b flex flex-row justify-between items-center w-full")}>
78
75
 
79
76
  <div className="flex items-center gap-2 md:mr-4 mr-2">
80
77
 
81
- {props.title && <div className={"hidden lg:block"}>
82
- {props.title}
78
+ {title && <div className={"hidden lg:block"}>
79
+ {title}
83
80
  </div>}
84
81
 
85
82
  {sizeSelect}
86
83
 
87
- {props.actionsStart}
88
-
89
- {clearFilterButton}
84
+ {actionsStart}
90
85
 
91
86
  </div>
92
87
 
93
88
  <div className="flex items-center gap-2">
94
89
 
95
90
  {largeLayout && <div className="w-[22px]">
96
- {props.loading &&
91
+ {loading &&
97
92
  <CircularProgress size={"small"}/>}
98
93
  </div>}
99
94
 
100
- {(props.onTextSearch || props.onTextSearchClick) &&
95
+ {(onTextSearch || onTextSearchClick) &&
101
96
  <SearchBar
102
97
  key={"search-bar"}
103
98
  inputRef={searchInputRef}
104
- loading={props.textSearchLoading}
105
- disabled={Boolean(props.onTextSearchClick)}
106
- onClick={props.onTextSearchClick}
107
- onTextSearch={props.onTextSearchClick ? undefined : props.onTextSearch}
99
+ loading={textSearchLoading}
100
+ disabled={Boolean(onTextSearchClick)}
101
+ onClick={onTextSearchClick}
102
+ onTextSearch={onTextSearchClick ? undefined : onTextSearch}
108
103
  expandable={true}/>}
109
104
 
110
- {props.actions}
105
+ {actions}
111
106
 
112
107
  </div>
113
108
 
@@ -2,10 +2,9 @@ import React, { useCallback, useEffect, useMemo, useRef, useState } from "react"
2
2
 
3
3
  import useMeasure from "react-use-measure";
4
4
 
5
- import { VirtualTableSize } from "../../VirtualTable";
6
- import { getRowHeight } from "../../VirtualTable/common";
7
- import { cn, RemoveCircleIcon, Tooltip } from "@firecms/ui";
5
+ import { cls, RemoveCircleIcon, Tooltip } from "@firecms/ui";
8
6
  import { ErrorBoundary } from "../../../components";
7
+ import { getRowHeight, TableSize } from "../../common/table_height";
9
8
 
10
9
  interface EntityTableCellProps {
11
10
  children: React.ReactNode;
@@ -19,7 +18,7 @@ interface EntityTableCellProps {
19
18
  error?: Error;
20
19
  allowScroll?: boolean;
21
20
  align: "right" | "left" | "center";
22
- size: VirtualTableSize;
21
+ size: TableSize;
23
22
  disabledTooltip?: string;
24
23
  width: number;
25
24
  showExpandIcon?: boolean;
@@ -46,22 +45,21 @@ const TableCellInner = ({
46
45
  children
47
46
  }: TableCellInnerProps) => {
48
47
  return (
49
- <div
50
- className={cn("flex flex-col max-h-full w-full",
51
- {
52
- "items-start": faded || scrollable
53
- })}
54
- style={{
55
- justifyContent,
56
- height: fullHeight ? "100%" : undefined,
57
- overflow: scrollable ? "auto" : undefined,
58
- WebkitMaskImage: faded
59
- ? "linear-gradient(to bottom, black 60%, transparent 100%)"
60
- : undefined,
61
- maskImage: faded
62
- ? "linear-gradient(to bottom, black 60%, transparent 100%)"
63
- : undefined
64
- }}
48
+ <div className={cls("flex flex-col max-h-full w-full",
49
+ {
50
+ "items-start": faded || scrollable
51
+ })}
52
+ style={{
53
+ justifyContent,
54
+ height: fullHeight ? "100%" : undefined,
55
+ overflow: scrollable ? "auto" : undefined,
56
+ WebkitMaskImage: faded
57
+ ? "linear-gradient(to bottom, black 60%, transparent 100%)"
58
+ : undefined,
59
+ maskImage: faded
60
+ ? "linear-gradient(to bottom, black 60%, transparent 100%)"
61
+ : undefined
62
+ }}
65
63
  >
66
64
  {children}
67
65
  </div>
@@ -96,7 +94,7 @@ export const EntityTableCell = React.memo<EntityTableCellProps>(
96
94
  const [onHover, setOnHover] = useState(false);
97
95
  const [internalSaved, setInternalSaved] = useState(saved);
98
96
 
99
- const showError = !disabled && error;
97
+ const showError = !disabled && Boolean(error);
100
98
 
101
99
  useEffect(() => {
102
100
  if (saved) {
@@ -157,8 +155,9 @@ export const EntityTableCell = React.memo<EntityTableCellProps>(
157
155
  }, [ref, onSelect, selected, disabled]);
158
156
 
159
157
  const onFocus = useCallback((event: React.SyntheticEvent<HTMLDivElement>) => {
160
- onSelectCallback();
161
158
  event.stopPropagation();
159
+ event.preventDefault();
160
+ onSelectCallback();
162
161
  }, [onSelectCallback]);
163
162
 
164
163
  const isOverflowing = useMemo(() => {
@@ -176,21 +175,26 @@ export const EntityTableCell = React.memo<EntityTableCellProps>(
176
175
  const setOnHoverTrue = useCallback(() => setOnHover(true), []);
177
176
  const setOnHoverFalse = useCallback(() => setOnHover(false), []);
178
177
 
178
+ const borderClass = showError
179
+ ? "border-red-500"
180
+ : internalSaved
181
+ ? "border-green-500"
182
+ : isSelected
183
+ ? "border-primary"
184
+ : "border-transparent";
185
+
179
186
  return (
180
187
  <div
181
- ref={ref}
182
- className={cn(
188
+ className={cls(
183
189
  "transition-colors duration-100 ease-in-out",
184
190
  `flex relative h-full rounded-md p-${p} border border-4 border-opacity-75`,
185
191
  onHover && !disabled ? "bg-gray-50 dark:bg-gray-900" : "",
186
192
  saved ? "bg-gray-100 bg-opacity-75 dark:bg-gray-800 dark:bg-opacity-75" : "",
187
- !isSelected && !internalSaved && !showError ? "border-transparent" : "",
188
193
  hideOverflow ? "overflow-hidden" : "",
189
194
  isSelected ? "bg-gray-50 dark:bg-gray-900" : "",
190
- isSelected && !internalSaved ? "border-primary" : "",
191
- internalSaved ? "border-green-500 " : "",
192
- showError ? "border-red-500" : ""
195
+ borderClass
193
196
  )}
197
+ ref={ref}
194
198
  style={{
195
199
  justifyContent,
196
200
  alignItems: disabled || !isOverflowing ? "center" : undefined,
@@ -199,11 +203,9 @@ export const EntityTableCell = React.memo<EntityTableCellProps>(
199
203
  }}
200
204
  tabIndex={selected || disabled ? undefined : 0}
201
205
  onFocus={onFocus}
202
- // onClick={onClick}
203
206
  onMouseEnter={setOnHoverTrue}
204
207
  onMouseMove={setOnHoverTrue}
205
208
  onMouseLeave={setOnHoverFalse}
206
- // contain={scrollable ? "content" : "size"}
207
209
  >
208
210
 
209
211
  <ErrorBoundary>
@@ -11,7 +11,14 @@ export interface EntityTableCellActionsProps {
11
11
  children?: React.ReactNode;
12
12
  }
13
13
 
14
- export function EntityTableCellActions({ showError, disabled, showExpandIcon, selected, openPopup, children }: EntityTableCellActionsProps) {
14
+ export function EntityTableCellActions({
15
+ showError,
16
+ disabled,
17
+ showExpandIcon,
18
+ selected,
19
+ openPopup,
20
+ children
21
+ }: EntityTableCellActionsProps) {
15
22
 
16
23
  const ref = useRef<HTMLDivElement>(null);
17
24
  const doOpenPopup = useCallback(() => {
@@ -54,13 +61,18 @@ export function EntityTableCellActions({ showError, disabled, showExpandIcon, se
54
61
 
55
62
  {showError && <ErrorTooltip
56
63
  side={"left"}
57
- className={"flex items-center justify-center"}
58
- style={{ width: 32, height: 32 }}
59
64
  title={showError.message}>
60
- <ErrorOutlineIcon
61
- size={"small"}
62
- color={"error"}
63
- />
65
+ <div
66
+ className={"flex items-center justify-center"}
67
+ style={{
68
+ width: 32,
69
+ height: 32
70
+ }}>
71
+ <ErrorOutlineIcon
72
+ size={"small"}
73
+ color={"error"}
74
+ />
75
+ </div>
64
76
  </ErrorTooltip>
65
77
  }
66
78
 
@@ -27,7 +27,7 @@ import { useCustomizationController, useFireCMSContext } from "../../../../hooks
27
27
  import { OnCellValueChangeParams } from "../../../common";
28
28
 
29
29
  interface PopupFormFieldProps<M extends Record<string, any>> {
30
- entity?: Entity<M>;
30
+ entity: Entity<M>;
31
31
  customFieldValidator?: CustomFieldValidator;
32
32
  path: string;
33
33
  tableKey: string;
@@ -41,7 +41,7 @@ interface PopupFormFieldProps<M extends Record<string, any>> {
41
41
  * Callback when the value of a cell has been edited
42
42
  * @param params
43
43
  */
44
- onCellValueChange?: (params: OnCellValueChangeParams<any, M>) => Promise<void> | void;
44
+ onCellValueChange?: (params: OnCellValueChangeParams<any, any>) => Promise<void> | void;
45
45
  }
46
46
 
47
47
  export function PopupFormField<M extends Record<string, any>>(props: PopupFormFieldProps<M>) {
@@ -74,7 +74,7 @@ export function PopupFormFieldInternal<M extends Record<string, any>>({
74
74
  y: number
75
75
  }>();
76
76
 
77
- const entityId = entityProp?.id;
77
+ const entityId = entityProp.id;
78
78
  const [entity, setEntity] = useState<Entity<M> | undefined>(entityProp);
79
79
  // useEffect(() => {
80
80
  // if (entityId && inputCollection) {
@@ -205,12 +205,10 @@ export function PopupFormFieldInternal<M extends Record<string, any>>({
205
205
  return onCellValueChange({
206
206
  value: values[propertyKey as string],
207
207
  propertyKey: propertyKey as string,
208
- entity,
208
+ data: entity,
209
209
  setError: setSavingError,
210
210
  onValueUpdated: () => {
211
211
  },
212
- fullPath: path,
213
- context: fireCMSContext
214
212
  });
215
213
  }
216
214
  return Promise.resolve();
@@ -219,7 +217,6 @@ export function PopupFormFieldInternal<M extends Record<string, any>>({
219
217
  if (!entity)
220
218
  return <></>;
221
219
 
222
- // enableReinitialize={true}
223
220
  // eslint-disable-next-line react-hooks/rules-of-hooks
224
221
  const formex = useCreateFormex<M>({
225
222
  initialValues: (entity?.values ?? {}) as EntityValues<M>,
@@ -266,7 +263,8 @@ export function PopupFormFieldInternal<M extends Record<string, any>>({
266
263
  values,
267
264
  path,
268
265
  setFieldValue,
269
- save: saveValue
266
+ save: saveValue,
267
+ formex
270
268
  };
271
269
 
272
270
  const property: ResolvedProperty<any> | undefined = propertyKey && getPropertyInPath(collection.properties, propertyKey as string);
@@ -278,9 +276,8 @@ export function PopupFormFieldInternal<M extends Record<string, any>>({
278
276
  includeDescription: false,
279
277
  underlyingValueHasChanged: false,
280
278
  context: formContext,
281
- tableMode: true,
282
279
  partOfArray: false,
283
- partOfBlock: false,
280
+ minimalistView: false,
284
281
  autoFocus: open
285
282
  }
286
283
  : undefined;