@firecms/core 3.0.0-canary.98 → 3.0.0-rc.1

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 (349) hide show
  1. package/README.md +2 -2
  2. package/dist/app/Drawer.d.ts +0 -1
  3. package/dist/app/Scaffold.d.ts +4 -0
  4. package/dist/components/ArrayContainer.d.ts +31 -12
  5. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  6. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +3 -1
  7. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
  8. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +17 -3
  9. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +1 -1
  10. package/dist/components/EntityCollectionTable/index.d.ts +1 -1
  11. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +6 -3
  12. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +8 -0
  13. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  14. package/dist/components/EntityJsonPreview.d.ts +3 -0
  15. package/dist/components/EntityPreview.d.ts +8 -6
  16. package/dist/components/HomePage/DefaultHomePage.d.ts +2 -15
  17. package/dist/components/HomePage/HomePageDnD.d.ts +76 -0
  18. package/dist/components/HomePage/NavigationCard.d.ts +3 -1
  19. package/dist/components/HomePage/NavigationCardBinding.d.ts +3 -2
  20. package/dist/components/HomePage/NavigationGroup.d.ts +8 -1
  21. package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
  22. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  23. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  24. package/dist/components/SelectableTable/SelectableTable.d.ts +13 -3
  25. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +1 -1
  26. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  27. package/dist/components/VirtualTable/VirtualTableProps.d.ts +11 -2
  28. package/dist/components/common/default_entity_actions.d.ts +0 -2
  29. package/dist/components/common/index.d.ts +1 -1
  30. package/dist/components/common/useColumnsIds.d.ts +1 -0
  31. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +10 -2
  32. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  33. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  34. package/dist/components/index.d.ts +3 -1
  35. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  36. package/dist/core/DefaultAppBar.d.ts +8 -2
  37. package/dist/core/DrawerNavigationItem.d.ts +2 -1
  38. package/dist/core/EntityEditView.d.ts +40 -22
  39. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  40. package/dist/core/FireCMS.d.ts +2 -2
  41. package/dist/core/FireCMSRouter.d.ts +4 -0
  42. package/dist/core/NavigationRoutes.d.ts +0 -1
  43. package/dist/core/SideDialogs.d.ts +4 -2
  44. package/dist/core/field_configs.d.ts +1 -1
  45. package/dist/core/index.d.ts +2 -1
  46. package/dist/form/EntityForm.d.ts +50 -0
  47. package/dist/form/EntityFormActions.d.ts +21 -0
  48. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  49. package/dist/form/components/FormEntry.d.ts +6 -0
  50. package/dist/form/components/FormLayout.d.ts +5 -0
  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/index.d.ts +3 -1
  54. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  55. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  56. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  57. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  58. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  59. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  60. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  61. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  62. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +9 -0
  63. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  64. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  65. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  66. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +4 -10
  67. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  68. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  69. package/dist/form/index.d.ts +17 -16
  70. package/dist/form/useClearRestoreValue.d.ts +2 -2
  71. package/dist/hooks/data/delete.d.ts +4 -4
  72. package/dist/hooks/data/save.d.ts +3 -3
  73. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  74. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  75. package/dist/hooks/useAuthController.d.ts +1 -1
  76. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  77. package/dist/hooks/useBuildNavigationController.d.ts +57 -12
  78. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  79. package/dist/hooks/useModeController.d.ts +1 -2
  80. package/dist/hooks/useProjectLog.d.ts +7 -1
  81. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  82. package/dist/hooks/useValidateAuthenticator.d.ts +3 -3
  83. package/dist/index.es.js +20108 -14471
  84. package/dist/index.es.js.map +1 -1
  85. package/dist/index.umd.js +20039 -14407
  86. package/dist/index.umd.js.map +1 -1
  87. package/dist/internal/useBuildDataSource.d.ts +3 -2
  88. package/dist/internal/useBuildSideEntityController.d.ts +3 -3
  89. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  90. package/dist/preview/PropertyPreviewProps.d.ts +1 -1
  91. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  92. package/dist/preview/components/ReferencePreview.d.ts +2 -2
  93. package/dist/preview/util.d.ts +3 -3
  94. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  95. package/dist/routes/FireCMSRoute.d.ts +1 -0
  96. package/dist/routes/HomePageRoute.d.ts +3 -0
  97. package/dist/types/analytics.d.ts +1 -1
  98. package/dist/types/auth.d.ts +7 -9
  99. package/dist/types/collections.d.ts +86 -25
  100. package/dist/types/customization_controller.d.ts +8 -0
  101. package/dist/types/datasource.d.ts +19 -17
  102. package/dist/types/dialogs_controller.d.ts +7 -3
  103. package/dist/types/entities.d.ts +2 -1
  104. package/dist/types/entity_actions.d.ts +58 -8
  105. package/dist/types/entity_callbacks.d.ts +16 -16
  106. package/dist/types/entity_overrides.d.ts +2 -2
  107. package/dist/types/export_import.d.ts +4 -4
  108. package/dist/types/fields.d.ts +43 -17
  109. package/dist/types/firecms.d.ts +16 -3
  110. package/dist/types/firecms_context.d.ts +1 -1
  111. package/dist/types/navigation.d.ts +60 -17
  112. package/dist/types/permissions.d.ts +4 -4
  113. package/dist/types/plugins.d.ts +42 -9
  114. package/dist/types/properties.d.ts +65 -22
  115. package/dist/types/property_config.d.ts +1 -3
  116. package/dist/types/roles.d.ts +3 -0
  117. package/dist/types/side_dialogs_controller.d.ts +10 -0
  118. package/dist/types/side_entity_controller.d.ts +14 -1
  119. package/dist/types/storage.d.ts +75 -0
  120. package/dist/types/user.d.ts +1 -0
  121. package/dist/util/builders.d.ts +3 -3
  122. package/dist/util/callbacks.d.ts +2 -0
  123. package/dist/util/createFormexStub.d.ts +2 -0
  124. package/dist/util/entities.d.ts +2 -2
  125. package/dist/util/entity_actions.d.ts +2 -0
  126. package/dist/util/entity_cache.d.ts +23 -0
  127. package/dist/util/icon_synonyms.d.ts +0 -1
  128. package/dist/util/icons.d.ts +5 -2
  129. package/dist/util/index.d.ts +3 -0
  130. package/dist/util/navigation_from_path.d.ts +10 -1
  131. package/dist/util/navigation_utils.d.ts +13 -1
  132. package/dist/util/objects.d.ts +2 -1
  133. package/dist/util/permissions.d.ts +4 -4
  134. package/dist/util/property_utils.d.ts +4 -4
  135. package/dist/util/references.d.ts +2 -2
  136. package/dist/util/resolutions.d.ts +30 -6
  137. package/dist/util/storage.d.ts +1 -1
  138. package/dist/util/useStorageUploadController.d.ts +2 -2
  139. package/package.json +133 -125
  140. package/src/app/Drawer.tsx +0 -1
  141. package/src/app/Scaffold.tsx +33 -29
  142. package/src/components/ArrayContainer.tsx +447 -229
  143. package/src/components/CircularProgressCenter.tsx +1 -1
  144. package/src/components/ClearFilterSortButton.tsx +1 -1
  145. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +12 -11
  146. package/src/components/DeleteEntityDialog.tsx +13 -20
  147. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +59 -25
  148. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +23 -17
  149. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +20 -3
  150. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +35 -9
  151. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +21 -16
  152. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +6 -12
  153. package/src/components/EntityCollectionTable/index.tsx +1 -1
  154. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +6 -6
  155. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +35 -26
  156. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  157. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +132 -101
  158. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
  159. package/src/components/EntityCollectionView/EntityCollectionView.tsx +178 -85
  160. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +7 -4
  161. package/src/components/EntityCollectionView/useSelectionController.tsx +5 -4
  162. package/src/components/EntityCollectionView/utils.ts +19 -0
  163. package/src/components/EntityJsonPreview.tsx +66 -0
  164. package/src/components/EntityPreview.tsx +75 -57
  165. package/src/components/EntityView.tsx +8 -5
  166. package/src/components/ErrorView.tsx +3 -3
  167. package/src/components/FireCMSLogo.tsx +7 -51
  168. package/src/components/HomePage/DefaultHomePage.tsx +522 -160
  169. package/src/components/HomePage/FavouritesView.tsx +9 -14
  170. package/src/components/HomePage/HomePageDnD.tsx +642 -0
  171. package/src/components/HomePage/NavigationCard.tsx +47 -38
  172. package/src/components/HomePage/NavigationCardBinding.tsx +16 -15
  173. package/src/components/HomePage/NavigationGroup.tsx +144 -30
  174. package/src/components/HomePage/RenameGroupDialog.tsx +117 -0
  175. package/src/components/HomePage/SmallNavigationCard.tsx +1 -2
  176. package/src/components/NotFoundPage.tsx +2 -2
  177. package/src/components/PropertyConfigBadge.tsx +9 -3
  178. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  179. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +22 -13
  180. package/src/components/SearchIconsView.tsx +2 -2
  181. package/src/components/SelectableTable/SelectableTable.tsx +154 -142
  182. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +4 -2
  183. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +10 -8
  184. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +59 -10
  185. package/src/components/UnsavedChangesDialog.tsx +46 -0
  186. package/src/components/VirtualTable/VirtualTable.tsx +65 -44
  187. package/src/components/VirtualTable/VirtualTableCell.tsx +0 -8
  188. package/src/components/VirtualTable/VirtualTableHeader.tsx +8 -8
  189. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +1 -1
  190. package/src/components/VirtualTable/VirtualTableProps.tsx +12 -2
  191. package/src/components/VirtualTable/VirtualTableRow.tsx +1 -1
  192. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
  193. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -2
  194. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  195. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  196. package/src/components/common/default_entity_actions.tsx +62 -42
  197. package/src/components/common/index.ts +1 -1
  198. package/src/components/common/useColumnsIds.tsx +1 -1
  199. package/src/components/common/useDataSourceTableController.tsx +420 -0
  200. package/src/components/common/useDebouncedCallback.tsx +20 -0
  201. package/src/components/common/useScrollRestoration.tsx +68 -0
  202. package/src/components/common/useTableSearchHelper.ts +1 -0
  203. package/src/components/index.tsx +4 -1
  204. package/src/contexts/BreacrumbsContext.tsx +38 -0
  205. package/src/contexts/DialogsProvider.tsx +3 -2
  206. package/src/contexts/ModeController.tsx +1 -3
  207. package/src/contexts/SnackbarProvider.tsx +2 -0
  208. package/src/core/DefaultAppBar.tsx +124 -85
  209. package/src/core/DefaultDrawer.tsx +30 -22
  210. package/src/core/DrawerNavigationItem.tsx +32 -28
  211. package/src/core/EntityEditView.tsx +388 -995
  212. package/src/core/EntityEditViewFormActions.tsx +329 -0
  213. package/src/core/EntitySidePanel.tsx +88 -20
  214. package/src/core/FireCMS.tsx +46 -25
  215. package/src/core/FireCMSRouter.tsx +17 -0
  216. package/src/core/NavigationRoutes.tsx +23 -32
  217. package/src/core/SideDialogs.tsx +22 -12
  218. package/src/core/field_configs.tsx +24 -10
  219. package/src/core/index.tsx +4 -2
  220. package/src/form/EntityForm.tsx +814 -0
  221. package/src/form/EntityFormActions.tsx +211 -0
  222. package/src/form/PropertyFieldBinding.tsx +55 -41
  223. package/src/form/components/CustomIdField.tsx +9 -3
  224. package/src/form/components/FieldHelperText.tsx +1 -1
  225. package/src/form/components/FormEntry.tsx +22 -0
  226. package/src/form/components/FormLayout.tsx +16 -0
  227. package/src/form/components/LabelWithIcon.tsx +30 -19
  228. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  229. package/src/form/components/StorageItemPreview.tsx +5 -4
  230. package/src/form/components/StorageUploadProgress.tsx +2 -3
  231. package/src/form/components/index.tsx +3 -1
  232. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +30 -18
  233. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +47 -36
  234. package/src/form/field_bindings/BlockFieldBinding.tsx +55 -33
  235. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  236. package/src/form/field_bindings/KeyValueFieldBinding.tsx +19 -15
  237. package/src/form/field_bindings/MapFieldBinding.tsx +72 -62
  238. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +159 -0
  239. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
  240. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +10 -8
  241. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
  242. package/src/form/field_bindings/ReferenceFieldBinding.tsx +28 -19
  243. package/src/form/field_bindings/RepeatFieldBinding.tsx +56 -32
  244. package/src/form/field_bindings/SelectFieldBinding.tsx +22 -13
  245. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +247 -168
  246. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  247. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  248. package/src/form/index.tsx +17 -37
  249. package/src/form/useClearRestoreValue.tsx +2 -2
  250. package/src/form/validation.ts +12 -6
  251. package/src/hooks/data/delete.ts +6 -5
  252. package/src/hooks/data/save.ts +26 -35
  253. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  254. package/src/hooks/data/useDataSource.tsx +10 -2
  255. package/src/hooks/data/useEntityFetch.tsx +10 -6
  256. package/src/hooks/useAuthController.tsx +1 -1
  257. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  258. package/src/hooks/useBrowserTitleAndIcon.tsx +1 -1
  259. package/src/hooks/useBuildModeController.tsx +15 -28
  260. package/src/hooks/useBuildNavigationController.tsx +386 -124
  261. package/src/hooks/useFireCMSContext.tsx +3 -33
  262. package/src/hooks/useLargeLayout.tsx +0 -35
  263. package/src/hooks/useModeController.tsx +1 -2
  264. package/src/hooks/useProjectLog.tsx +16 -5
  265. package/src/hooks/useResolvedNavigationFrom.tsx +9 -11
  266. package/src/hooks/useValidateAuthenticator.tsx +3 -3
  267. package/src/internal/useBuildDataSource.ts +67 -80
  268. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  269. package/src/internal/useBuildSideEntityController.tsx +149 -86
  270. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  271. package/src/preview/PropertyPreview.tsx +28 -12
  272. package/src/preview/PropertyPreviewProps.tsx +1 -1
  273. package/src/preview/components/BooleanPreview.tsx +1 -1
  274. package/src/preview/components/EmptyValue.tsx +1 -1
  275. package/src/preview/components/EnumValuesChip.tsx +1 -1
  276. package/src/preview/components/ImagePreview.tsx +10 -9
  277. package/src/preview/components/ReferencePreview.tsx +6 -16
  278. package/src/preview/components/UrlComponentPreview.tsx +20 -21
  279. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -5
  280. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +5 -4
  281. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -3
  282. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -3
  283. package/src/preview/property_previews/ArrayOneOfPreview.tsx +6 -4
  284. package/src/preview/property_previews/ArrayPropertyPreview.tsx +5 -3
  285. package/src/preview/property_previews/MapPropertyPreview.tsx +7 -6
  286. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
  287. package/src/preview/property_previews/StringPropertyPreview.tsx +2 -2
  288. package/src/preview/util.ts +10 -10
  289. package/src/routes/CustomCMSRoute.tsx +21 -0
  290. package/src/routes/FireCMSRoute.tsx +246 -0
  291. package/src/routes/HomePageRoute.tsx +17 -0
  292. package/src/types/analytics.ts +3 -0
  293. package/src/types/auth.tsx +8 -12
  294. package/src/types/collections.ts +101 -28
  295. package/src/types/customization_controller.tsx +9 -0
  296. package/src/types/datasource.ts +21 -20
  297. package/src/types/dialogs_controller.tsx +7 -3
  298. package/src/types/entities.ts +3 -1
  299. package/src/types/entity_actions.tsx +71 -8
  300. package/src/types/entity_callbacks.ts +18 -18
  301. package/src/types/entity_overrides.tsx +2 -2
  302. package/src/types/export_import.ts +4 -4
  303. package/src/types/fields.tsx +52 -19
  304. package/src/types/firecms.tsx +18 -4
  305. package/src/types/firecms_context.tsx +1 -1
  306. package/src/types/navigation.ts +76 -22
  307. package/src/types/permissions.ts +5 -5
  308. package/src/types/plugins.tsx +50 -9
  309. package/src/types/properties.ts +74 -22
  310. package/src/types/property_config.tsx +1 -2
  311. package/src/types/roles.ts +3 -0
  312. package/src/types/side_dialogs_controller.tsx +15 -0
  313. package/src/types/side_entity_controller.tsx +16 -1
  314. package/src/types/storage.ts +82 -0
  315. package/src/types/user.ts +2 -0
  316. package/src/util/builders.ts +10 -8
  317. package/src/util/callbacks.ts +119 -0
  318. package/src/util/createFormexStub.tsx +62 -0
  319. package/src/util/entities.ts +5 -3
  320. package/src/util/entity_actions.ts +28 -0
  321. package/src/util/entity_cache.ts +204 -0
  322. package/src/util/icon_list.ts +1 -1
  323. package/src/util/icon_synonyms.ts +0 -1
  324. package/src/util/icons.tsx +36 -11
  325. package/src/util/index.ts +3 -0
  326. package/src/util/join_collections.ts +9 -2
  327. package/src/util/make_properties_editable.ts +13 -5
  328. package/src/util/navigation_from_path.ts +33 -12
  329. package/src/util/navigation_utils.ts +135 -19
  330. package/src/util/objects.ts +74 -14
  331. package/src/util/parent_references_from_path.ts +3 -3
  332. package/src/util/permissions.ts +8 -8
  333. package/src/util/property_utils.tsx +17 -6
  334. package/src/util/references.ts +19 -8
  335. package/src/util/resolutions.ts +93 -24
  336. package/src/util/storage.ts +6 -2
  337. package/src/util/useStorageUploadController.tsx +74 -29
  338. package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
  339. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  340. package/dist/form/PropertiesForm.d.ts +0 -8
  341. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  342. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  343. package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
  344. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -27
  345. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -236
  346. package/src/form/PropertiesForm.tsx +0 -81
  347. package/src/form/components/FormikArrayContainer.tsx +0 -44
  348. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  349. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -13,7 +13,7 @@ export function CircularProgressCenter({ text, ...props }: CircularProgressProps
13
13
  }) {
14
14
  return (
15
15
  <div
16
- className="flex w-full h-screen max-h-full max-w-full bg-gray-50 dark:bg-gray-900 gap-4">
16
+ className="flex w-full h-screen max-h-full max-w-full gap-4">
17
17
  <div className="m-auto flex flex-col gap-2 items-center">
18
18
  <CircularProgress {...props}/>
19
19
  {text && <Typography
@@ -18,7 +18,7 @@ export function ClearFilterSortButton({
18
18
  if ((filterIsSet || sortIsSet) && (tableController.clearFilter || tableController.setSortBy)) {
19
19
  let label;
20
20
  if (filterIsSet && sortIsSet) {
21
- label = "Clear filter and sort";
21
+ label = "Clear filter/sort";
22
22
  } else if (filterIsSet) {
23
23
  label = "Clear filter";
24
24
  } else {
@@ -1,15 +1,15 @@
1
1
  import React from "react";
2
2
 
3
- import { Button, Dialog, DialogActions, DialogContent, LoadingButton, Typography } from "@firecms/ui";
3
+ import { Button, Dialog, DialogActions, DialogContent, DialogTitle, LoadingButton } from "@firecms/ui";
4
4
 
5
- export function DeleteConfirmationDialog({
6
- open,
7
- onAccept,
8
- onCancel,
9
- title,
10
- loading,
11
- body
12
- }: {
5
+ export function ConfirmationDialog({
6
+ open,
7
+ onAccept,
8
+ onCancel,
9
+ title,
10
+ loading,
11
+ body
12
+ }: {
13
13
  open: boolean,
14
14
  onAccept: () => void,
15
15
  onCancel: () => void,
@@ -22,13 +22,14 @@ export function DeleteConfirmationDialog({
22
22
  open={open}
23
23
  onOpenChange={(open) => !open ? onCancel() : undefined}
24
24
  >
25
+ <DialogTitle variant={"h6"} className={"mb-2"}>{title}</DialogTitle>
25
26
  <DialogContent>
26
- <Typography variant={"h6"} className={"mb-2"}>{title}</Typography>
27
27
  {body}
28
28
  </DialogContent>
29
29
 
30
30
  <DialogActions>
31
31
  <Button
32
+ color={"primary"}
32
33
  variant={"text"}
33
34
  onClick={onCancel}
34
35
  autoFocus>Cancel</Button>
@@ -38,7 +39,7 @@ export function DeleteConfirmationDialog({
38
39
  type="submit"
39
40
  loading={loading}
40
41
  onClick={onAccept}
41
- >
42
+ autoFocus>
42
43
  Ok
43
44
  </LoadingButton>
44
45
  </DialogActions>
@@ -1,8 +1,9 @@
1
1
  import { Entity, EntityCallbacks, EntityCollection } from "../types";
2
2
  import React, { useCallback, useMemo, useState } from "react";
3
- import { Button, CircularProgress, Dialog, DialogActions, DialogContent, Typography } from "@firecms/ui";
3
+ import { Button, CircularProgress, Dialog, DialogActions, DialogContent, DialogTitle } from "@firecms/ui";
4
4
  import {
5
5
  deleteEntityWithCallbacks,
6
+ useAuthController,
6
7
  useCustomizationController,
7
8
  useDataSource,
8
9
  useFireCMSContext,
@@ -34,31 +35,24 @@ export function DeleteEntityDialog<M extends Record<string, any>>({
34
35
  onMultipleEntitiesDelete,
35
36
  path
36
37
  }: DeleteEntityDialogProps<M>) {
37
-
38
+ const authController = useAuthController();
38
39
  const dataSource = useDataSource(collection);
39
40
  const customizationController = useCustomizationController();
40
41
  const snackbarController = useSnackbarController();
41
42
  const [loading, setLoading] = useState(false);
42
43
 
43
- const [entityOrEntities, setUsedEntityOrEntities] = React.useState<Entity<M> | Entity<M>[]>();
44
-
45
- const [multipleEntities, setMultipleEntities] = React.useState<boolean>();
46
44
  const context = useFireCMSContext();
45
+ const entityOrEntities = Array.isArray(entityOrEntitiesToDelete) && entityOrEntitiesToDelete.length === 1
46
+ ? entityOrEntitiesToDelete[0]
47
+ : entityOrEntitiesToDelete;
47
48
 
48
- React.useEffect(() => {
49
- if (entityOrEntitiesToDelete) {
50
- const revisedEntityOrEntities = Array.isArray(entityOrEntitiesToDelete) && entityOrEntitiesToDelete.length === 1
51
- ? entityOrEntitiesToDelete[0]
52
- : entityOrEntitiesToDelete;
53
- setUsedEntityOrEntities(revisedEntityOrEntities);
54
- setMultipleEntities(Array.isArray(revisedEntityOrEntities));
55
- }
56
- }, [entityOrEntitiesToDelete]);
49
+ const multipleEntities = Array.isArray(entityOrEntities);
57
50
 
58
51
  const resolvedCollection = useMemo(() => resolveCollection<M>({
59
52
  collection,
60
53
  path,
61
- fields: customizationController.propertyConfigs
54
+ propertyConfigs: customizationController.propertyConfigs,
55
+ authController
62
56
  }), [collection, path]);
63
57
 
64
58
  const handleCancel = useCallback(() => {
@@ -181,16 +175,15 @@ export function DeleteEntityDialog<M extends Record<string, any>>({
181
175
  open={open}
182
176
  onOpenChange={(open) => !open ? onClose() : undefined}
183
177
  >
178
+ <DialogTitle id="delete-dialog-title">
179
+ {dialogTitle}
180
+ </DialogTitle>
184
181
  <DialogContent fullHeight={true}>
185
- <Typography variant={"subtitle2"} className={"p-4"}>
186
- {dialogTitle}
187
- </Typography>
188
-
189
182
  {!multipleEntities && <div className={"p-4"}>{content}</div>}
190
183
  </DialogContent>
191
184
  <DialogActions>
192
185
 
193
- {loading && <CircularProgress size={"small"}/>}
186
+ {loading && <CircularProgress size={"smallest"}/>}
194
187
 
195
188
  <Button onClick={handleCancel}
196
189
  disabled={loading}
@@ -1,8 +1,20 @@
1
1
  import React, { MouseEvent, useCallback } from "react";
2
2
 
3
3
  import { CollectionSize, Entity, EntityAction, EntityCollection, SelectionController } from "../../types";
4
- import { Checkbox, cls, IconButton, Menu, MenuItem, MoreVertIcon, Skeleton, Tooltip } from "@firecms/ui";
4
+ import {
5
+ Checkbox,
6
+ Chip,
7
+ cls,
8
+ EditIcon,
9
+ IconButton,
10
+ Menu,
11
+ MenuItem,
12
+ MoreVertIcon,
13
+ Skeleton,
14
+ Tooltip
15
+ } from "@firecms/ui";
5
16
  import { useFireCMSContext, useLargeLayout } from "../../hooks";
17
+ import { hasEntityInCache } from "../../util/entity_cache";
6
18
 
7
19
  /**
8
20
  *
@@ -21,6 +33,7 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
21
33
  entity,
22
34
  collection,
23
35
  fullPath,
36
+ fullIdPath,
24
37
  width,
25
38
  frozen,
26
39
  isSelected,
@@ -32,23 +45,26 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
32
45
  actions = [],
33
46
  hideId,
34
47
  selectionController,
48
+ openEntityMode
35
49
  }:
36
- {
37
- entity: Entity<any>,
38
- collection?: EntityCollection<any>,
39
- fullPath?: string,
40
- width: number,
41
- frozen?: boolean,
42
- size: CollectionSize,
43
- isSelected?: boolean,
44
- selectionEnabled?: boolean,
45
- actions?: EntityAction[],
46
- hideId?: boolean,
47
- onCollectionChange?: () => void,
48
- selectionController?: SelectionController;
49
- highlightEntity?: (entity: Entity<any>) => void;
50
- unhighlightEntity?: (entity: Entity<any>) => void;
51
- }) {
50
+ {
51
+ entity: Entity<any>,
52
+ collection?: EntityCollection<any>,
53
+ fullPath?: string,
54
+ fullIdPath?: string,
55
+ width: number,
56
+ frozen?: boolean,
57
+ size: CollectionSize,
58
+ isSelected?: boolean,
59
+ selectionEnabled?: boolean,
60
+ actions?: EntityAction[],
61
+ hideId?: boolean,
62
+ onCollectionChange?: () => void,
63
+ selectionController?: SelectionController;
64
+ highlightEntity?: (entity: Entity<any>) => void;
65
+ unhighlightEntity?: (entity: Entity<any>) => void;
66
+ openEntityMode: "side_panel" | "full_screen";
67
+ }) {
52
68
 
53
69
  const largeLayout = useLargeLayout();
54
70
 
@@ -63,12 +79,16 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
63
79
 
64
80
  const collapsedActions = actions.filter(a => a.collapsed || a.collapsed === undefined);
65
81
  const uncollapsedActions = actions.filter(a => a.collapsed === false);
82
+ const hasDraft = hasEntityInCache(fullPath + "/" + entity.id);
66
83
  return (
67
84
  <div
68
85
  className={cls(
69
- "h-full flex items-center justify-center flex-col bg-gray-50 dark:bg-gray-900 bg-opacity-90 dark:bg-opacity-90 z-10",
86
+ "h-full flex items-center justify-center flex-col bg-surface-50 dark:bg-surface-900 bg-opacity-90 dark:bg-opacity-90 z-10",
70
87
  frozen ? "sticky left-0" : ""
71
88
  )}
89
+ onClick={useCallback((event: any) => {
90
+ event.stopPropagation();
91
+ }, [])}
72
92
  style={{
73
93
  width,
74
94
  position: frozen ? "sticky" : "initial",
@@ -80,19 +100,24 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
80
100
  <div className="w-34 flex justify-center">
81
101
 
82
102
  {uncollapsedActions.map((action, index) => (
83
- <Tooltip key={index} title={action.name}>
103
+ <Tooltip key={index}
104
+ title={action.name}
105
+ asChild={true}>
84
106
  <IconButton
85
107
  onClick={(event: MouseEvent) => {
86
108
  event.stopPropagation();
87
109
  action.onClick({
110
+ view: "collection",
88
111
  entity,
89
112
  fullPath,
113
+ fullIdPath,
90
114
  collection,
91
115
  context,
92
116
  selectionController,
93
117
  highlightEntity,
94
118
  unhighlightEntity,
95
119
  onCollectionChange,
120
+ openEntityMode: openEntityMode ?? collection?.openEntityMode
96
121
  });
97
122
  }}
98
123
  size={largeLayout ? "medium" : "small"}>
@@ -113,14 +138,17 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
113
138
  onClick={(e) => {
114
139
  e.stopPropagation();
115
140
  action.onClick({
141
+ view: "collection",
116
142
  entity,
117
143
  fullPath,
144
+ fullIdPath,
118
145
  collection,
119
146
  context,
120
147
  selectionController,
121
148
  highlightEntity,
122
149
  unhighlightEntity,
123
150
  onCollectionChange,
151
+ openEntityMode: openEntityMode ?? collection?.openEntityMode
124
152
  });
125
153
  }}>
126
154
  {action.icon}
@@ -143,15 +171,21 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
143
171
 
144
172
  {!hideId && size !== "xs" && (
145
173
  <div
146
- className="w-[138px] text-center overflow-hidden truncate font-mono text-xs text-text-secondary dark:text-text-secondary-dark max-w-full text-ellipsis px-2"
174
+ className="w-[138px] overflow-hidden truncate font-mono text-xs text-text-secondary dark:text-text-secondary-dark max-w-full text-ellipsis px-2 align-center justify-center flex items-center gap-1"
147
175
  onClick={(event) => {
148
176
  event.stopPropagation();
149
177
  }}>
150
-
151
- {entity
152
- ? entity.id
153
- : <Skeleton/>
154
- }
178
+ {hasDraft && <Tooltip title={"Local unsaved changes"} className={"inline"}>
179
+ <Chip colorScheme={"orangeDarker"} className={"p-0.5"}>
180
+ <EditIcon size={12}/>
181
+ </Chip>
182
+ </Tooltip>}
183
+ <span className="min-w-0 truncate text-center">
184
+ {entity
185
+ ? entity.id
186
+ : <Skeleton/>
187
+ }
188
+ </span>
155
189
  </div>
156
190
  )}
157
191
 
@@ -34,14 +34,14 @@ import { getRowHeight } from "../common/table_height";
34
34
  *
35
35
  * The data displayed in the table is managed by a {@link EntityTableController}.
36
36
  * You can build the default, bound to a path in the datasource, by using the hook
37
- * {@link useDataSourceEntityCollectionTableController}
37
+ * {@link useDataSourceTableController}
38
38
  *
39
39
  * @see EntityCollectionTableProps
40
40
  * @see EntityCollectionView
41
41
  * @see VirtualTable
42
42
  * @group Components
43
43
  */
44
- export const EntityCollectionTable = function EntityCollectionTable<M extends Record<string, any>, UserType extends User>
44
+ export const EntityCollectionTable = function EntityCollectionTable<M extends Record<string, any> = any, USER extends User = any>
45
45
  ({
46
46
  className,
47
47
  style,
@@ -57,6 +57,8 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
57
57
  highlightedEntities,
58
58
  onEntityClick,
59
59
  onColumnResize,
60
+ initialScroll,
61
+ onScroll,
60
62
  onSizeChanged,
61
63
  textSearchEnabled = false,
62
64
  hoverRow = true,
@@ -76,7 +78,8 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
76
78
  getIdColumnWidth,
77
79
  onTextSearchClick,
78
80
  textSearchLoading,
79
- enablePopupIcon
81
+ enablePopupIcon,
82
+ openEntityMode = "side_panel"
80
83
  }: EntityCollectionTableProps<M>) {
81
84
 
82
85
  const ref = useRef<HTMLDivElement>(null);
@@ -84,12 +87,10 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
84
87
  const largeLayout = useLargeLayout();
85
88
  const selectedEntities = (selectionController?.selectedEntities?.length > 0 ? selectionController?.selectedEntities : highlightedEntities)?.filter(Boolean);
86
89
 
87
- const context: FireCMSContext<UserType> = useFireCMSContext();
90
+ const context: FireCMSContext<USER> = useFireCMSContext();
88
91
 
89
92
  const [size, setSize] = React.useState<CollectionSize>(defaultSize ?? "m");
90
93
 
91
- const selectedEntityIds = selectedEntities?.map(e => e.id);
92
-
93
94
  const updateSize = useCallback((size: CollectionSize) => {
94
95
  if (onSizeChanged)
95
96
  onSizeChanged(size);
@@ -98,12 +99,12 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
98
99
 
99
100
  const onTextSearch = useCallback((newSearchString?: string) => tableController.setSearchString?.(newSearchString), []);
100
101
 
101
- const additionalFieldsMap: Record<string, AdditionalFieldDelegate<M, UserType>> = useMemo(() => {
102
+ const additionalFieldsMap: Record<string, AdditionalFieldDelegate<M, USER>> = useMemo(() => {
102
103
  return (additionalFields
103
104
  ? additionalFields
104
105
  .map((aC) => ({ [aC.key]: aC as AdditionalFieldDelegate<M, any> }))
105
106
  .reduce((a, b) => ({ ...a, ...b }), {})
106
- : {}) as Record<string, AdditionalFieldDelegate<M, UserType>>;
107
+ : {}) as Record<string, AdditionalFieldDelegate<M, USER>>;
107
108
  }, [additionalFields]);
108
109
 
109
110
  const customFieldValidator: CustomFieldValidator | undefined = uniqueFieldValidator;
@@ -176,12 +177,14 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
176
177
  throw new Error("When using additional fields you need to provide a Builder or a value");
177
178
  }
178
179
 
179
- const child = Builder
180
+ const child: React.ReactNode = Builder
180
181
  ? <Builder entity={entity} context={context}/>
181
- : <>{additionalField.value?.({
182
- entity,
183
- context
184
- })}</>;
182
+ : <>
183
+ {additionalField.value?.({
184
+ entity,
185
+ context
186
+ })?.toString()}
187
+ </>;
185
188
 
186
189
  return (
187
190
  <EntityTableCell
@@ -202,7 +205,7 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
202
205
  </EntityTableCell>
203
206
  );
204
207
 
205
- }, [size, selectedEntityIds]);
208
+ }, [size]);
206
209
 
207
210
  const collectionColumns: VirtualTableColumn[] = (() => {
208
211
  const columnsResult: VirtualTableColumn[] = propertiesToColumns({
@@ -265,7 +268,8 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
265
268
  width={column.width}
266
269
  frozen={column.frozen}
267
270
  isSelected={false}
268
- size={size}/>;
271
+ size={size}
272
+ openEntityMode={openEntityMode}/>;
269
273
  } else if (additionalFieldsMap[columnKey]) {
270
274
  return additionalCellRenderer(props);
271
275
  } else if (props.columnIndex < columns.length + 1) {
@@ -292,7 +296,7 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
292
296
 
293
297
  <div ref={ref}
294
298
  style={style}
295
- className={cls("h-full w-full flex flex-col bg-white dark:bg-gray-950", className)}>
299
+ className={cls("h-full w-full flex flex-col bg-white dark:bg-surface-950", className)}>
296
300
 
297
301
  <CollectionTableToolbar
298
302
  onTextSearch={textSearchEnabled ? onTextSearch : undefined}
@@ -310,9 +314,11 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
310
314
  inlineEditing={inlineEditing}
311
315
  cellRenderer={cellRenderer}
312
316
  onEntityClick={onEntityClick}
313
- highlightedRow={useCallback((entity: Entity<M>) => selectedEntityIds?.includes(entity.id) ?? false, [selectedEntityIds])}
317
+ highlightedRow={(entity: Entity<M>) => Boolean(selectedEntities?.find(e => e.id === entity.id && e.path === entity.path))}
314
318
  tableController={tableController}
315
319
  onValueChange={onValueChange}
320
+ initialScroll={initialScroll}
321
+ onScroll={onScroll}
316
322
  onColumnResize={onColumnResize}
317
323
  hoverRow={hoverRow}
318
324
  filterable={filterable}
@@ -16,7 +16,7 @@ import { OnCellValueChange, OnColumnResizeParams, UniqueFieldValidator } from ".
16
16
  * @group Collection components
17
17
  */
18
18
  export type EntityCollectionTableProps<M extends Record<string, any>,
19
- UserType extends User = User> = {
19
+ USER extends User = User> = {
20
20
 
21
21
  className?: string;
22
22
 
@@ -72,6 +72,21 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
72
72
  */
73
73
  onColumnResize?(params: OnColumnResizeParams): void;
74
74
 
75
+ /**
76
+ * Initial scroll position
77
+ */
78
+ initialScroll?: number;
79
+
80
+ /**
81
+ * Callback when the table is scrolled
82
+ * @param props
83
+ */
84
+ onScroll?: (props: {
85
+ scrollDirection: "forward" | "backward",
86
+ scrollOffset: number,
87
+ scrollUpdateWasRequested: boolean
88
+ }) => void;
89
+
75
90
  /**
76
91
  * Callback when the selected size of the table is changed
77
92
  */
@@ -90,7 +105,7 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
90
105
 
91
106
  /**
92
107
  * Controller holding the logic for the table
93
- * {@link useDataSourceEntityCollectionTableController}
108
+ * {@link useDataSourceTableController}
94
109
  * {@link EntityTableController}
95
110
  */
96
111
  tableController: EntityTableController<M>;
@@ -103,7 +118,7 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
103
118
 
104
119
  inlineEditing?: boolean;
105
120
 
106
- additionalFields?: AdditionalFieldDelegate<M, UserType>[];
121
+ additionalFields?: AdditionalFieldDelegate<M, USER>[];
107
122
 
108
123
  defaultSize?: CollectionSize;
109
124
 
@@ -136,6 +151,8 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
136
151
  textSearchLoading?: boolean;
137
152
 
138
153
  enablePopupIcon: boolean;
154
+
155
+ openEntityMode?: "side_panel" | "full_screen";
139
156
  };
140
157
 
141
158
  export type GetPropertyForProps<M extends Record<string, any>> = {
@@ -4,10 +4,12 @@ import {
4
4
  CMSType,
5
5
  Entity,
6
6
  EntityReference,
7
+ ReferenceProperty,
7
8
  ResolvedArrayProperty,
8
9
  ResolvedNumberProperty,
9
10
  ResolvedProperty,
10
- ResolvedStringProperty
11
+ ResolvedStringProperty,
12
+ StringProperty
11
13
  } from "../../types";
12
14
 
13
15
  import { VirtualTableInput } from "../VirtualTable/fields/VirtualTableInput";
@@ -49,6 +51,8 @@ export interface PropertyTableCellProps<T extends CMSType> {
49
51
  }
50
52
 
51
53
  function isStorageProperty(property: ResolvedProperty) {
54
+ if (property.dataType === "string" && property.markdown)
55
+ return false;
52
56
  if (property.dataType === "string" && (property as ResolvedStringProperty).storage)
53
57
  return true;
54
58
  if (property.dataType === "array") {
@@ -87,8 +91,8 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
87
91
  } = useSelectableTableController();
88
92
 
89
93
  const selected = selectedCell?.propertyKey === propertyKey &&
90
- selectedCell?.entity.path === entity.path &&
91
- selectedCell?.entity.id === entity.id;
94
+ selectedCell?.entityPath === entity.path &&
95
+ selectedCell?.entityId === entity.id;
92
96
 
93
97
  const [internalValue, setInternalValue] = useState<any | null>(value);
94
98
  const internalValueRef = useRef(value);
@@ -147,7 +151,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
147
151
  onValueUpdated,
148
152
  data: entity,
149
153
  });
150
- } catch (e:any) {
154
+ } catch (e: any) {
151
155
  console.error("onValueChange error", e);
152
156
  setError(e);
153
157
  }
@@ -191,7 +195,8 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
191
195
  select({
192
196
  width,
193
197
  height,
194
- entity,
198
+ entityPath: entity.path,
199
+ entityId: entity.id,
195
200
  cellRect,
196
201
  propertyKey: propertyKey as Extract<keyof M, string>
197
202
  });
@@ -207,7 +212,8 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
207
212
  setPopupCell({
208
213
  width,
209
214
  height,
210
- entity,
215
+ entityPath: entity.path,
216
+ entityId: entity.id,
211
217
  cellRect,
212
218
  propertyKey: propertyKey as Extract<keyof M, string>
213
219
  });
@@ -247,7 +253,27 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
247
253
 
248
254
  if (!customField && (!customPreview || selected)) {
249
255
  const isAStorageProperty = isStorageProperty(property);
250
- if (isAStorageProperty) {
256
+ if (property.dataType === "string" && (property as StringProperty).reference?.path) {
257
+ const stringProperty = property as StringProperty;
258
+ const path = stringProperty.reference?.path as string;
259
+ const referenceProperty = stringProperty.reference as ReferenceProperty;
260
+ const referenceValue = internalValue ? new EntityReference(internalValue, path) : undefined;
261
+ innerComponent =
262
+ <TableReferenceField name={propertyKey as string}
263
+ internalValue={referenceValue}
264
+ updateValue={(v) => updateValue(v ? (v as EntityReference).id : null)}
265
+ disabled={disabled}
266
+ size={size}
267
+ path={path}
268
+ multiselect={false}
269
+ previewProperties={referenceProperty.previewProperties}
270
+ includeId={referenceProperty.includeId}
271
+ includeEntityLink={referenceProperty.includeEntityLink}
272
+ title={stringProperty.name}
273
+ forceFilter={referenceProperty.forceFilter}
274
+ />;
275
+ allowScroll = false;
276
+ } else if (isAStorageProperty) {
251
277
  innerComponent = <TableStorageUpload error={validationError ?? error}
252
278
  disabled={disabled}
253
279
  focused={selected}
@@ -306,7 +332,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
306
332
  updateValue={updateValue}
307
333
  />;
308
334
  fullHeight = true;
309
- } else if (!stringProperty.storage) {
335
+ } else if (stringProperty.markdown || !stringProperty.storage || !stringProperty.reference) {
310
336
  const multiline = Boolean(stringProperty.multiline) || Boolean(stringProperty.markdown);
311
337
  innerComponent = <VirtualTableInput error={validationError ?? error}
312
338
  disabled={disabled}
@@ -390,7 +416,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
390
416
  size={size}
391
417
  multiselect={true}
392
418
  path={arrayProperty.of.path}
393
- previewProperties={arrayProperty.of.previewProperties}
419
+ previewProperties={arrayProperty.of.previewKeys}
394
420
  title={arrayProperty.name}
395
421
  forceFilter={arrayProperty.of.forceFilter}
396
422
  includeId={arrayProperty.of.includeId}