@firecms/core 3.0.0-canary.29 → 3.0.0-canary.290

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 (433) hide show
  1. package/README.md +3 -3
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +16 -0
  4. package/dist/app/Scaffold.d.ts +34 -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 +31 -12
  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 +14 -13
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +22 -6
  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/index.d.ts +1 -1
  18. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  19. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  20. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +7 -4
  21. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +20 -2
  22. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  23. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  24. package/dist/components/EntityJsonPreview.d.ts +3 -0
  25. package/dist/components/EntityPreview.d.ts +10 -7
  26. package/dist/components/ErrorView.d.ts +1 -1
  27. package/dist/components/HomePage/DefaultHomePage.d.ts +2 -15
  28. package/dist/components/HomePage/HomePageDnD.d.ts +77 -0
  29. package/dist/components/HomePage/NavigationCard.d.ts +3 -1
  30. package/dist/components/HomePage/NavigationCardBinding.d.ts +4 -3
  31. package/dist/components/HomePage/NavigationGroup.d.ts +8 -1
  32. package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
  33. package/dist/components/PropertyCollectionView.d.ts +23 -0
  34. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  35. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  36. package/dist/components/ReferenceWidget.d.ts +3 -1
  37. package/dist/components/SelectableTable/SelectableTable.d.ts +14 -4
  38. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  39. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  40. package/dist/components/UserDisplay.d.ts +7 -0
  41. package/dist/components/VirtualTable/VirtualTableProps.d.ts +24 -12
  42. package/dist/components/VirtualTable/fields/VirtualTableUserSelect.d.ts +12 -0
  43. package/dist/components/VirtualTable/types.d.ts +3 -3
  44. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
  45. package/dist/components/common/index.d.ts +2 -1
  46. package/dist/components/common/table_height.d.ts +5 -0
  47. package/dist/components/common/types.d.ts +4 -6
  48. package/dist/components/common/useColumnsIds.d.ts +3 -1
  49. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
  50. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  51. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  52. package/dist/components/index.d.ts +5 -2
  53. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  54. package/dist/contexts/InternalUserManagementContext.d.ts +3 -0
  55. package/dist/core/DefaultAppBar.d.ts +29 -0
  56. package/dist/core/DefaultDrawer.d.ts +19 -0
  57. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  58. package/dist/core/EntityEditView.d.ts +49 -11
  59. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  60. package/dist/core/FireCMS.d.ts +2 -3
  61. package/dist/core/FireCMSRouter.d.ts +4 -0
  62. package/dist/core/NavigationRoutes.d.ts +2 -3
  63. package/dist/core/SideDialogs.d.ts +4 -2
  64. package/dist/core/field_configs.d.ts +1 -1
  65. package/dist/core/index.d.ts +4 -4
  66. package/dist/form/EntityForm.d.ts +40 -64
  67. package/dist/form/EntityFormActions.d.ts +21 -0
  68. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  69. package/dist/form/components/ErrorFocus.d.ts +1 -1
  70. package/dist/form/components/FieldHelperText.d.ts +3 -3
  71. package/dist/form/components/FormEntry.d.ts +6 -0
  72. package/dist/form/components/FormLayout.d.ts +5 -0
  73. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  74. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  75. package/dist/form/components/LocalChangesMenu.d.ts +11 -0
  76. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  77. package/dist/form/components/index.d.ts +3 -1
  78. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  79. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  80. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  81. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  82. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  83. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  84. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  85. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  86. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +9 -0
  87. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  88. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  89. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  90. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +5 -13
  91. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  92. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  93. package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +12 -0
  94. package/dist/form/index.d.ts +18 -18
  95. package/dist/form/useClearRestoreValue.d.ts +2 -2
  96. package/dist/hooks/data/delete.d.ts +4 -4
  97. package/dist/hooks/data/save.d.ts +4 -5
  98. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  99. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  100. package/dist/hooks/index.d.ts +3 -0
  101. package/dist/hooks/useAuthController.d.ts +1 -1
  102. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  103. package/dist/hooks/useBuildNavigationController.d.ts +57 -13
  104. package/dist/hooks/useCollapsedGroups.d.ts +9 -0
  105. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  106. package/dist/hooks/useInternalUserManagementController.d.ts +12 -0
  107. package/dist/hooks/useModeController.d.ts +1 -2
  108. package/dist/hooks/useProjectLog.d.ts +8 -2
  109. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  110. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  111. package/dist/index.d.ts +1 -0
  112. package/dist/index.es.js +24546 -13965
  113. package/dist/index.es.js.map +1 -1
  114. package/dist/index.umd.js +27256 -588
  115. package/dist/index.umd.js.map +1 -1
  116. package/dist/internal/useBuildDataSource.d.ts +3 -17
  117. package/dist/internal/useBuildSideEntityController.d.ts +3 -3
  118. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  119. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  120. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  121. package/dist/preview/components/ReferencePreview.d.ts +4 -3
  122. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  123. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  124. package/dist/preview/components/UserPreview.d.ts +8 -0
  125. package/dist/preview/index.d.ts +1 -0
  126. package/dist/preview/util.d.ts +3 -3
  127. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  128. package/dist/routes/FireCMSRoute.d.ts +1 -0
  129. package/dist/routes/HomePageRoute.d.ts +3 -0
  130. package/dist/types/analytics.d.ts +1 -1
  131. package/dist/types/auth.d.ts +8 -10
  132. package/dist/types/collections.d.ts +123 -25
  133. package/dist/types/customization_controller.d.ts +8 -0
  134. package/dist/types/datasource.d.ts +52 -36
  135. package/dist/types/dialogs_controller.d.ts +7 -3
  136. package/dist/types/entities.d.ts +12 -3
  137. package/dist/types/entity_actions.d.ts +72 -8
  138. package/dist/types/entity_callbacks.d.ts +16 -16
  139. package/dist/types/entity_overrides.d.ts +2 -2
  140. package/dist/types/export_import.d.ts +4 -4
  141. package/dist/types/fields.d.ts +79 -39
  142. package/dist/types/firecms.d.ts +31 -3
  143. package/dist/types/firecms_context.d.ts +17 -1
  144. package/dist/types/index.d.ts +1 -1
  145. package/dist/types/internal_user_management.d.ts +20 -0
  146. package/dist/types/navigation.d.ts +62 -19
  147. package/dist/types/permissions.d.ts +4 -4
  148. package/dist/types/plugins.d.ts +58 -13
  149. package/dist/types/properties.d.ts +122 -31
  150. package/dist/types/property_config.d.ts +1 -3
  151. package/dist/types/roles.d.ts +3 -0
  152. package/dist/types/side_dialogs_controller.d.ts +10 -0
  153. package/dist/types/side_entity_controller.d.ts +14 -1
  154. package/dist/types/storage.d.ts +75 -0
  155. package/dist/types/user.d.ts +2 -1
  156. package/dist/util/builders.d.ts +3 -3
  157. package/dist/util/callbacks.d.ts +2 -0
  158. package/dist/util/collections.d.ts +1 -0
  159. package/dist/util/createFormexStub.d.ts +2 -0
  160. package/dist/util/entities.d.ts +3 -3
  161. package/dist/util/entity_actions.d.ts +2 -0
  162. package/dist/util/entity_cache.d.ts +28 -0
  163. package/dist/util/icon_list.d.ts +5 -1
  164. package/dist/util/icon_synonyms.d.ts +1 -98
  165. package/dist/util/icons.d.ts +7 -4
  166. package/dist/util/index.d.ts +3 -0
  167. package/dist/util/make_properties_editable.d.ts +1 -2
  168. package/dist/util/navigation_from_path.d.ts +10 -1
  169. package/dist/util/navigation_utils.d.ts +15 -3
  170. package/dist/util/objects.d.ts +3 -1
  171. package/dist/util/permissions.d.ts +4 -4
  172. package/dist/util/plurals.d.ts +0 -2
  173. package/dist/util/property_utils.d.ts +4 -4
  174. package/dist/util/references.d.ts +2 -2
  175. package/dist/util/resolutions.d.ts +42 -17
  176. package/dist/util/storage.d.ts +23 -2
  177. package/dist/util/useStorageUploadController.d.ts +4 -3
  178. package/package.json +70 -53
  179. package/src/app/AppBar.tsx +18 -0
  180. package/src/app/Drawer.tsx +24 -0
  181. package/src/app/Scaffold.tsx +253 -0
  182. package/src/app/index.ts +4 -0
  183. package/src/app/useApp.tsx +32 -0
  184. package/src/components/ArrayContainer.tsx +447 -229
  185. package/src/components/CircularProgressCenter.tsx +2 -2
  186. package/src/components/ClearFilterSortButton.tsx +41 -0
  187. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +12 -11
  188. package/src/components/DeleteEntityDialog.tsx +13 -20
  189. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +87 -62
  190. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
  191. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
  192. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +84 -42
  193. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  194. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
  195. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
  196. package/src/components/EntityCollectionTable/index.tsx +1 -1
  197. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +34 -39
  198. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +49 -36
  199. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  200. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +135 -105
  201. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
  202. package/src/components/EntityCollectionView/EntityCollectionView.tsx +241 -119
  203. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +7 -4
  204. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  205. package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
  206. package/src/components/EntityCollectionView/utils.ts +19 -0
  207. package/src/components/EntityJsonPreview.tsx +66 -0
  208. package/src/components/EntityPreview.tsx +83 -62
  209. package/src/components/EntityView.tsx +34 -42
  210. package/src/components/ErrorView.tsx +4 -4
  211. package/src/components/FireCMSLogo.tsx +7 -51
  212. package/src/components/HomePage/DefaultHomePage.tsx +516 -158
  213. package/src/components/HomePage/FavouritesView.tsx +9 -14
  214. package/src/components/HomePage/HomePageDnD.tsx +702 -0
  215. package/src/components/HomePage/NavigationCard.tsx +48 -39
  216. package/src/components/HomePage/NavigationCardBinding.tsx +17 -16
  217. package/src/components/HomePage/NavigationGroup.tsx +144 -30
  218. package/src/components/HomePage/RenameGroupDialog.tsx +123 -0
  219. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  220. package/src/components/NotFoundPage.tsx +2 -2
  221. package/src/components/PropertyCollectionView.tsx +329 -0
  222. package/src/components/PropertyConfigBadge.tsx +10 -4
  223. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  224. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +23 -13
  225. package/src/components/ReferenceWidget.tsx +21 -11
  226. package/src/components/SearchIconsView.tsx +10 -7
  227. package/src/components/SelectableTable/SelectableTable.tsx +157 -157
  228. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  229. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +27 -9
  230. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
  231. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -24
  232. package/src/components/UnsavedChangesDialog.tsx +46 -0
  233. package/src/components/UserDisplay.tsx +55 -0
  234. package/src/components/VirtualTable/VirtualTable.tsx +105 -51
  235. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  236. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  237. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  238. package/src/components/VirtualTable/VirtualTableProps.tsx +28 -14
  239. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  240. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  241. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -2
  242. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  243. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  244. package/src/components/VirtualTable/fields/VirtualTableUserSelect.tsx +99 -0
  245. package/src/components/VirtualTable/types.tsx +2 -3
  246. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +64 -44
  247. package/src/components/common/index.ts +2 -1
  248. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  249. package/src/components/common/types.tsx +4 -6
  250. package/src/components/common/useColumnsIds.tsx +16 -2
  251. package/src/components/common/useDataSourceTableController.tsx +420 -0
  252. package/src/components/common/useDebouncedCallback.tsx +20 -0
  253. package/src/components/common/useScrollRestoration.tsx +68 -0
  254. package/src/components/common/useTableSearchHelper.ts +53 -12
  255. package/src/components/index.tsx +6 -2
  256. package/src/contexts/BreacrumbsContext.tsx +38 -0
  257. package/src/contexts/DialogsProvider.tsx +5 -4
  258. package/src/contexts/InternalUserManagementContext.tsx +4 -0
  259. package/src/contexts/ModeController.tsx +1 -3
  260. package/src/contexts/SnackbarProvider.tsx +2 -0
  261. package/src/core/DefaultAppBar.tsx +219 -0
  262. package/src/core/DefaultDrawer.tsx +185 -0
  263. package/src/core/DrawerNavigationItem.tsx +66 -0
  264. package/src/core/EntityEditView.tsx +447 -469
  265. package/src/core/EntityEditViewFormActions.tsx +344 -0
  266. package/src/core/EntitySidePanel.tsx +96 -23
  267. package/src/core/FireCMS.tsx +85 -60
  268. package/src/core/FireCMSRouter.tsx +17 -0
  269. package/src/core/NavigationRoutes.tsx +28 -38
  270. package/src/core/SideDialogs.tsx +22 -12
  271. package/src/core/field_configs.tsx +41 -14
  272. package/src/core/index.tsx +6 -5
  273. package/src/form/EntityForm.tsx +740 -523
  274. package/src/form/EntityFormActions.tsx +226 -0
  275. package/src/form/PropertyFieldBinding.tsx +88 -41
  276. package/src/form/components/CustomIdField.tsx +9 -3
  277. package/src/form/components/ErrorFocus.tsx +22 -29
  278. package/src/form/components/FieldHelperText.tsx +4 -4
  279. package/src/form/components/FormEntry.tsx +22 -0
  280. package/src/form/components/FormLayout.tsx +16 -0
  281. package/src/form/components/LabelWithIcon.tsx +30 -19
  282. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  283. package/src/form/components/LocalChangesMenu.tsx +144 -0
  284. package/src/form/components/StorageItemPreview.tsx +23 -13
  285. package/src/form/components/StorageUploadProgress.tsx +5 -6
  286. package/src/form/components/index.tsx +3 -1
  287. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +34 -19
  288. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +50 -36
  289. package/src/form/field_bindings/BlockFieldBinding.tsx +56 -33
  290. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  291. package/src/form/field_bindings/KeyValueFieldBinding.tsx +61 -52
  292. package/src/form/field_bindings/MapFieldBinding.tsx +73 -55
  293. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +159 -0
  294. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
  295. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  296. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
  297. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  298. package/src/form/field_bindings/RepeatFieldBinding.tsx +62 -35
  299. package/src/form/field_bindings/SelectFieldBinding.tsx +24 -15
  300. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +257 -199
  301. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  302. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  303. package/src/form/field_bindings/UserSelectFieldBinding.tsx +94 -0
  304. package/src/form/index.tsx +21 -37
  305. package/src/form/useClearRestoreValue.tsx +2 -2
  306. package/src/form/validation.ts +13 -23
  307. package/src/hooks/data/delete.ts +6 -5
  308. package/src/hooks/data/save.ts +26 -33
  309. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  310. package/src/hooks/data/useDataSource.tsx +11 -3
  311. package/src/hooks/data/useEntityFetch.tsx +10 -6
  312. package/src/hooks/index.tsx +4 -0
  313. package/src/hooks/useAuthController.tsx +1 -1
  314. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  315. package/src/hooks/useBrowserTitleAndIcon.tsx +1 -1
  316. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  317. package/src/hooks/useBuildModeController.tsx +22 -29
  318. package/src/hooks/useBuildNavigationController.tsx +515 -121
  319. package/src/hooks/useCollapsedGroups.ts +64 -0
  320. package/src/hooks/useFireCMSContext.tsx +9 -35
  321. package/src/hooks/useInternalUserManagementController.tsx +16 -0
  322. package/src/hooks/useLargeLayout.tsx +0 -35
  323. package/src/hooks/useModeController.tsx +1 -2
  324. package/src/hooks/useProjectLog.tsx +32 -10
  325. package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
  326. package/src/hooks/useValidateAuthenticator.tsx +17 -37
  327. package/src/index.ts +1 -0
  328. package/src/internal/useBuildDataSource.ts +79 -85
  329. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  330. package/src/internal/useBuildSideEntityController.tsx +204 -77
  331. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  332. package/src/preview/PropertyPreview.tsx +42 -25
  333. package/src/preview/PropertyPreviewProps.tsx +7 -1
  334. package/src/preview/components/BooleanPreview.tsx +2 -2
  335. package/src/preview/components/EmptyValue.tsx +1 -1
  336. package/src/preview/components/EnumValuesChip.tsx +2 -2
  337. package/src/preview/components/ImagePreview.tsx +26 -37
  338. package/src/preview/components/ReferencePreview.tsx +30 -38
  339. package/src/preview/components/StorageThumbnail.tsx +5 -1
  340. package/src/preview/components/UrlComponentPreview.tsx +60 -28
  341. package/src/preview/components/UserPreview.tsx +27 -0
  342. package/src/preview/index.ts +1 -0
  343. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -6
  344. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +7 -5
  345. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -4
  346. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -4
  347. package/src/preview/property_previews/ArrayOneOfPreview.tsx +7 -6
  348. package/src/preview/property_previews/ArrayPropertyPreview.tsx +8 -7
  349. package/src/preview/property_previews/MapPropertyPreview.tsx +14 -13
  350. package/src/preview/property_previews/NumberPropertyPreview.tsx +2 -2
  351. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
  352. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  353. package/src/preview/util.ts +10 -10
  354. package/src/routes/CustomCMSRoute.tsx +21 -0
  355. package/src/routes/FireCMSRoute.tsx +246 -0
  356. package/src/routes/HomePageRoute.tsx +17 -0
  357. package/src/types/analytics.ts +3 -0
  358. package/src/types/auth.tsx +9 -13
  359. package/src/types/collections.ts +146 -30
  360. package/src/types/customization_controller.tsx +9 -1
  361. package/src/types/datasource.ts +61 -43
  362. package/src/types/dialogs_controller.tsx +7 -3
  363. package/src/types/entities.ts +19 -3
  364. package/src/types/entity_actions.tsx +86 -10
  365. package/src/types/entity_callbacks.ts +18 -18
  366. package/src/types/entity_overrides.tsx +2 -2
  367. package/src/types/export_import.ts +4 -4
  368. package/src/types/fields.tsx +91 -42
  369. package/src/types/firecms.tsx +34 -4
  370. package/src/types/firecms_context.tsx +18 -1
  371. package/src/types/index.ts +1 -1
  372. package/src/types/internal_user_management.ts +24 -0
  373. package/src/types/navigation.ts +77 -24
  374. package/src/types/permissions.ts +5 -5
  375. package/src/types/plugins.tsx +69 -15
  376. package/src/types/properties.ts +141 -33
  377. package/src/types/property_config.tsx +2 -2
  378. package/src/types/roles.ts +3 -0
  379. package/src/types/side_dialogs_controller.tsx +15 -0
  380. package/src/types/side_entity_controller.tsx +16 -1
  381. package/src/types/storage.ts +83 -1
  382. package/src/types/user.ts +3 -1
  383. package/src/util/builders.ts +10 -8
  384. package/src/util/callbacks.ts +119 -0
  385. package/src/util/collections.ts +8 -0
  386. package/src/util/createFormexStub.tsx +66 -0
  387. package/src/util/entities.ts +11 -8
  388. package/src/util/entity_actions.ts +28 -0
  389. package/src/util/entity_cache.ts +223 -0
  390. package/src/util/enums.ts +1 -1
  391. package/src/util/icon_list.ts +16 -10
  392. package/src/util/icon_synonyms.ts +3 -100
  393. package/src/util/icons.tsx +36 -11
  394. package/src/util/index.ts +3 -0
  395. package/src/util/join_collections.ts +11 -4
  396. package/src/util/make_properties_editable.ts +5 -19
  397. package/src/util/navigation_from_path.ts +33 -12
  398. package/src/util/navigation_utils.ts +141 -25
  399. package/src/util/objects.ts +128 -33
  400. package/src/util/parent_references_from_path.ts +3 -3
  401. package/src/util/permissions.ts +9 -8
  402. package/src/util/plurals.ts +0 -2
  403. package/src/util/property_utils.tsx +17 -6
  404. package/src/util/references.ts +19 -8
  405. package/src/util/resolutions.ts +122 -48
  406. package/src/util/storage.ts +79 -21
  407. package/src/util/strings.ts +2 -2
  408. package/src/util/useStorageUploadController.tsx +162 -62
  409. package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
  410. package/dist/components/FireCMSAppBar.d.ts +0 -26
  411. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  412. package/dist/components/VirtualTable/common.d.ts +0 -2
  413. package/dist/core/Drawer.d.ts +0 -23
  414. package/dist/core/Scaffold.d.ts +0 -55
  415. package/dist/core/SideEntityView.d.ts +0 -7
  416. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  417. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  418. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  419. package/dist/internal/useLocaleConfig.d.ts +0 -1
  420. package/dist/types/appcheck.d.ts +0 -26
  421. package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
  422. package/src/components/FireCMSAppBar.tsx +0 -165
  423. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  424. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
  425. package/src/core/Drawer.tsx +0 -191
  426. package/src/core/Scaffold.tsx +0 -281
  427. package/src/core/SideEntityView.tsx +0 -38
  428. package/src/form/components/FormikArrayContainer.tsx +0 -44
  429. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  430. package/src/internal/useBuildCustomizationController.tsx +0 -5
  431. package/src/internal/useLocaleConfig.tsx +0 -18
  432. package/src/types/appcheck.ts +0 -29
  433. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -2,7 +2,7 @@ import React from "react";
2
2
  import {
3
3
  AdditionalFieldDelegate,
4
4
  CollectionSize,
5
- Entity, EntityCollection,
5
+ Entity,
6
6
  EntityTableController,
7
7
  FilterValues,
8
8
  ResolvedProperties,
@@ -12,12 +12,15 @@ import {
12
12
  } from "../../types";
13
13
  import { OnCellValueChange, OnColumnResizeParams, UniqueFieldValidator } from "../common/types";
14
14
 
15
-
16
15
  /**
17
16
  * @group Collection components
18
17
  */
19
18
  export type EntityCollectionTableProps<M extends Record<string, any>,
20
- UserType extends User = User> = {
19
+ USER extends User = User> = {
20
+
21
+ className?: string;
22
+
23
+ style?: React.CSSProperties;
21
24
 
22
25
  /**
23
26
  * Display these entities as selected
@@ -69,6 +72,21 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
69
72
  */
70
73
  onColumnResize?(params: OnColumnResizeParams): void;
71
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
+
72
90
  /**
73
91
  * Callback when the selected size of the table is changed
74
92
  */
@@ -87,12 +105,12 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
87
105
 
88
106
  /**
89
107
  * Controller holding the logic for the table
90
- * {@link useDataSourceEntityCollectionTableController}
108
+ * {@link useDataSourceTableController}
91
109
  * {@link EntityTableController}
92
110
  */
93
111
  tableController: EntityTableController<M>;
94
112
 
95
- displayedColumnIds: PropertyColumnConfig[];
113
+ displayedColumnIds?: PropertyColumnConfig[];
96
114
 
97
115
  forceFilter?: FilterValues<Extract<keyof M, string>>;
98
116
 
@@ -100,7 +118,7 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
100
118
 
101
119
  inlineEditing?: boolean;
102
120
 
103
- additionalFields?: AdditionalFieldDelegate<M, UserType>[];
121
+ additionalFields?: AdditionalFieldDelegate<M, USER>[];
104
122
 
105
123
  defaultSize?: CollectionSize;
106
124
 
@@ -131,15 +149,18 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
131
149
  onTextSearchClick?: () => void;
132
150
 
133
151
  textSearchLoading?: boolean;
134
- }
152
+
153
+ enablePopupIcon: boolean;
154
+
155
+ openEntityMode?: "side_panel" | "full_screen";
156
+ };
135
157
 
136
158
  export type GetPropertyForProps<M extends Record<string, any>> = {
137
159
  propertyKey: string,
138
- propertyValue: any,
139
160
  entity: Entity<M>
140
161
  };
141
162
 
142
163
  export type PropertyColumnConfig = {
143
164
  key: string,
144
- disabled: boolean,
165
+ disabled?: boolean,
145
166
  };
@@ -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";
@@ -15,6 +17,7 @@ import { VirtualTableSelect } from "../VirtualTable/fields/VirtualTableSelect";
15
17
  import { VirtualTableNumberInput } from "../VirtualTable/fields/VirtualTableNumberInput";
16
18
  import { VirtualTableSwitch } from "../VirtualTable/fields/VirtualTableSwitch";
17
19
  import { VirtualTableDateField } from "../VirtualTable/fields/VirtualTableDateField";
20
+ import { VirtualTableUserSelect } from "../VirtualTable/fields/VirtualTableUserSelect";
18
21
 
19
22
  import { TableStorageUpload } from "./fields/TableStorageUpload";
20
23
  import { TableReferenceField } from "./fields/TableReferenceField";
@@ -24,14 +27,13 @@ import { getPreviewSizeFrom } from "../../preview/util";
24
27
  import { isReadOnly } from "../../util";
25
28
 
26
29
  import { CustomFieldValidator, mapPropertyToYup } from "../../form/validation";
27
- import { useFireCMSContext } from "../../hooks";
28
30
 
29
31
  import { EntityTableCell } from "./internal/EntityTableCell";
30
32
  import { EntityTableCellActions } from "./internal/EntityTableCellActions";
31
33
 
32
- import { getRowHeight } from "../VirtualTable/common";
33
34
  import { useSelectableTableController } from "../SelectableTable/SelectableTableContext";
34
35
  import { useClearRestoreValue } from "../../form/useClearRestoreValue";
36
+ import { getRowHeight } from "../common/table_height";
35
37
 
36
38
  export interface PropertyTableCellProps<T extends CMSType> {
37
39
  propertyKey: string;
@@ -46,9 +48,12 @@ export interface PropertyTableCellProps<T extends CMSType> {
46
48
  entity: Entity<any>;
47
49
  path: string;
48
50
  disabled: boolean;
51
+ enablePopupIcon?: boolean;
49
52
  }
50
53
 
51
54
  function isStorageProperty(property: ResolvedProperty) {
55
+ if (property.dataType === "string" && property.markdown)
56
+ return false;
52
57
  if (property.dataType === "string" && (property as ResolvedStringProperty).storage)
53
58
  return true;
54
59
  if (property.dataType === "array") {
@@ -74,11 +79,10 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
74
79
  path,
75
80
  entity,
76
81
  readonly,
77
- disabled: disabledProp
82
+ disabled: disabledProp,
83
+ enablePopupIcon = true
78
84
  }: PropertyTableCellProps<T>) {
79
85
 
80
- const context = useFireCMSContext();
81
-
82
86
  const {
83
87
  onValueChange,
84
88
  size,
@@ -88,13 +92,14 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
88
92
  } = useSelectableTableController();
89
93
 
90
94
  const selected = selectedCell?.propertyKey === propertyKey &&
91
- selectedCell?.entity.path === entity.path &&
92
- selectedCell?.entity.id === entity.id;
95
+ selectedCell?.entityPath === entity.path &&
96
+ selectedCell?.entityId === entity.id;
93
97
 
94
98
  const [internalValue, setInternalValue] = useState<any | null>(value);
95
99
  const internalValueRef = useRef(value);
96
100
 
97
101
  const [error, setError] = useState<Error | undefined>();
102
+ const [validationError, setValidationError] = useState<Error | undefined>();
98
103
  const [saved, setSaved] = useState<boolean>(false);
99
104
 
100
105
  const onValueUpdated = useCallback(() => {
@@ -120,7 +125,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
120
125
  useEffect(
121
126
  () => {
122
127
  if (!equal(value, internalValueRef.current)) {
123
- setError(undefined);
128
+ setValidationError(undefined);
124
129
  setInternalValue(value);
125
130
  internalValueRef.current = value;
126
131
  onValueUpdated();
@@ -136,32 +141,34 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
136
141
  validation
137
142
  .validate(value)
138
143
  .then(() => {
139
- setError(undefined);
144
+ setValidationError(undefined);
140
145
  internalValueRef.current = value;
141
146
  if (onValueChange) {
142
- onValueChange({
143
- value,
144
- propertyKey,
145
- setError,
146
- onValueUpdated,
147
- entity,
148
- fullPath: path,
149
- context
150
- });
147
+ try {
148
+ onValueChange({
149
+ value,
150
+ propertyKey,
151
+ setError,
152
+ onValueUpdated,
153
+ data: entity,
154
+ });
155
+ } catch (e: any) {
156
+ console.error("onValueChange error", e);
157
+ setError(e);
158
+ }
159
+
151
160
  }
152
161
  })
153
162
  .catch((e) => {
154
- setError(e);
163
+ setValidationError(e);
155
164
  });
156
165
  };
157
166
 
158
167
  useEffect(() => {
159
168
  validation
160
169
  .validate(internalValue)
161
- .then(() => setError(undefined))
162
- .catch((e) => {
163
- setError(e);
164
- });
170
+ .then(() => setValidationError(undefined))
171
+ .catch(setValidationError);
165
172
  }, [internalValue, validation, propertyKey, property, entity]);
166
173
 
167
174
  const updateValue = (newValue: any | null) => {
@@ -189,7 +196,8 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
189
196
  select({
190
197
  width,
191
198
  height,
192
- entity,
199
+ entityPath: entity.path,
200
+ entityId: entity.id,
193
201
  cellRect,
194
202
  propertyKey: propertyKey as Extract<keyof M, string>
195
203
  });
@@ -205,7 +213,8 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
205
213
  setPopupCell({
206
214
  width,
207
215
  height,
208
- entity,
216
+ entityPath: entity.path,
217
+ entityId: entity.id,
209
218
  cellRect,
210
219
  propertyKey: propertyKey as Extract<keyof M, string>
211
220
  });
@@ -237,7 +246,6 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
237
246
  height={getRowHeight(size)}
238
247
  propertyKey={propertyKey}
239
248
  property={property}
240
- // entity={entity}
241
249
  value={internalValue}
242
250
  size={getPreviewSizeFrom(size)}
243
251
  />
@@ -246,8 +254,28 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
246
254
 
247
255
  if (!customField && (!customPreview || selected)) {
248
256
  const isAStorageProperty = isStorageProperty(property);
249
- if (isAStorageProperty) {
250
- innerComponent = <TableStorageUpload error={error}
257
+ if (property.dataType === "string" && (property as StringProperty).reference?.path) {
258
+ const stringProperty = property as StringProperty;
259
+ const path = stringProperty.reference?.path as string;
260
+ const referenceProperty = stringProperty.reference as ReferenceProperty;
261
+ const referenceValue = internalValue ? new EntityReference(internalValue, path) : undefined;
262
+ innerComponent =
263
+ <TableReferenceField name={propertyKey as string}
264
+ internalValue={referenceValue}
265
+ updateValue={(v) => updateValue(v ? (v as EntityReference).id : null)}
266
+ disabled={disabled}
267
+ size={size}
268
+ path={path}
269
+ multiselect={false}
270
+ previewProperties={referenceProperty.previewProperties}
271
+ includeId={referenceProperty.includeId}
272
+ includeEntityLink={referenceProperty.includeEntityLink}
273
+ title={stringProperty.name}
274
+ forceFilter={referenceProperty.forceFilter}
275
+ />;
276
+ allowScroll = false;
277
+ } else if (isAStorageProperty) {
278
+ innerComponent = <TableStorageUpload error={validationError ?? error}
251
279
  disabled={disabled}
252
280
  focused={selected}
253
281
  selected={selected}
@@ -274,7 +302,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
274
302
  valueType={"number"}
275
303
  small={getPreviewSizeFrom(size) !== "medium"}
276
304
  enumValues={numberProperty.enumValues}
277
- error={error}
305
+ error={validationError ?? error}
278
306
  internalValue={internalValue as string | number}
279
307
  updateValue={updateValue}
280
308
  />;
@@ -282,7 +310,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
282
310
  } else {
283
311
  innerComponent = <VirtualTableNumberInput
284
312
  align={align}
285
- error={error}
313
+ error={validationError ?? error}
286
314
  focused={selected}
287
315
  disabled={disabled}
288
316
  value={internalValue as number}
@@ -300,14 +328,25 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
300
328
  valueType={"string"}
301
329
  small={getPreviewSizeFrom(size) !== "medium"}
302
330
  enumValues={stringProperty.enumValues}
303
- error={error}
331
+ error={validationError ?? error}
304
332
  internalValue={internalValue as string | number}
305
333
  updateValue={updateValue}
306
334
  />;
307
335
  fullHeight = true;
308
- } else if (!stringProperty.storage) {
336
+ } else if (stringProperty.userSelect) {
337
+ innerComponent = <VirtualTableUserSelect name={propertyKey as string}
338
+ multiple={false}
339
+ focused={selected}
340
+ disabled={disabled}
341
+ small={getPreviewSizeFrom(size) !== "medium"}
342
+ error={validationError ?? error}
343
+ internalValue={internalValue as string}
344
+ updateValue={updateValue}
345
+ />;
346
+ fullHeight = true;
347
+ } else if (stringProperty.markdown || !stringProperty.storage || !stringProperty.reference) {
309
348
  const multiline = Boolean(stringProperty.multiline) || Boolean(stringProperty.markdown);
310
- innerComponent = <VirtualTableInput error={error}
349
+ innerComponent = <VirtualTableInput error={validationError ?? error}
311
350
  disabled={disabled}
312
351
  multiline={multiline}
313
352
  focused={selected}
@@ -317,7 +356,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
317
356
  allowScroll = true;
318
357
  }
319
358
  } else if (property.dataType === "boolean") {
320
- innerComponent = <VirtualTableSwitch error={error}
359
+ innerComponent = <VirtualTableSwitch error={validationError ?? error}
321
360
  disabled={disabled}
322
361
  focused={selected}
323
362
  internalValue={internalValue as boolean}
@@ -325,7 +364,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
325
364
  />;
326
365
  } else if (property.dataType === "date") {
327
366
  innerComponent = <VirtualTableDateField name={propertyKey as string}
328
- error={error}
367
+ error={validationError ?? error}
329
368
  disabled={disabled}
330
369
  mode={property.mode}
331
370
  focused={selected}
@@ -346,6 +385,8 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
346
385
  path={property.path}
347
386
  multiselect={false}
348
387
  previewProperties={property.previewProperties}
388
+ includeId={property.includeId}
389
+ includeEntityLink={property.includeEntityLink}
349
390
  title={property.name}
350
391
  forceFilter={property.forceFilter}
351
392
  />;
@@ -368,7 +409,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
368
409
  small={getPreviewSizeFrom(size) !== "medium"}
369
410
  valueType={arrayProperty.of.dataType}
370
411
  enumValues={arrayProperty.of.enumValues}
371
- error={error}
412
+ error={validationError ?? error}
372
413
  internalValue={internalValue as string | number}
373
414
  updateValue={updateValue}
374
415
  />;
@@ -387,9 +428,11 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
387
428
  size={size}
388
429
  multiselect={true}
389
430
  path={arrayProperty.of.path}
390
- previewProperties={arrayProperty.of.previewProperties}
431
+ previewProperties={arrayProperty.of.previewKeys}
391
432
  title={arrayProperty.name}
392
433
  forceFilter={arrayProperty.of.forceFilter}
434
+ includeId={arrayProperty.of.includeId}
435
+ includeEntityLink={arrayProperty.of.includeEntityLink}
393
436
  />;
394
437
  }
395
438
  allowScroll = false;
@@ -401,11 +444,10 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
401
444
 
402
445
  if (!innerComponent) {
403
446
  allowScroll = false;
404
- showExpandIcon = selected && !innerComponent && !disabled && !readOnlyProperty;
447
+ showExpandIcon = enablePopupIcon && selected && !innerComponent && !disabled && !readOnlyProperty;
405
448
  innerComponent = (
406
- <PropertyPreview width={width}
449
+ <PropertyPreview width={width}
407
450
  height={height}
408
- // entity={entity}
409
451
  propertyKey={propertyKey as string}
410
452
  value={internalValue}
411
453
  property={property}
@@ -426,7 +468,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
426
468
  removePadding={removePadding}
427
469
  fullHeight={fullHeight}
428
470
  saved={saved}
429
- error={error}
471
+ error={validationError ?? error}
430
472
  align={align}
431
473
  allowScroll={allowScroll}
432
474
  showExpandIcon={showExpandIcon}
@@ -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, EditIcon } 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) {
@@ -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={"small"}
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,19 @@ export const TableReferenceFieldSuccess = React.memo(
142
150
  {internalValue && multiselect && buildMultipleReferenceField()}
143
151
 
144
152
  {valueNotSet &&
145
- <Button
153
+ <EntityPreviewContainer
154
+ className={cls("px-3 py-2 text-sm font-medium flex items-center",
155
+ multiselect ? "gap-4" : "gap-6",
156
+ disabled
157
+ ? "text-surface-accent-500"
158
+ : "cursor-pointer text-text-secondary dark:text-text-secondary-dark hover:bg-surface-accent-50 dark:hover:bg-surface-800 group-hover:bg-surface-accent-50 dark:group-hover:bg-surface-800")}
146
159
  onClick={handleOpen}
147
- size={"small"}
148
- variant="outlined"
149
- color="primary">
150
- Edit {title}
151
- </Button>}
160
+ size={"medium"}>
161
+ <EditIcon
162
+ size={"small"}
163
+ className={"ml-2 mr-1 text-surface-300 dark:text-surface-600"}/>
164
+ {title}
165
+ </EntityPreviewContainer>}
152
166
 
153
167
  </div>
154
168
  );
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import { useMemo, useState } from "react";
2
+ import { useMemo } from "react";
3
3
 
4
4
  import { Entity, ResolvedArrayProperty, ResolvedStringProperty, StorageConfig } from "../../../types";
5
5
  import { useDropzone } from "react-dropzone";
@@ -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";
@@ -140,9 +140,7 @@ function StorageUpload({
140
140
  storagePathBuilder,
141
141
  }: StorageUploadProps) {
142
142
 
143
- const [onHover, setOnHover] = useState(false);
144
-
145
- const previewSize = multipleFilesSupported && previewSizeInput === "medium" ? "small" : previewSizeInput;
143
+ const previewSize = previewSizeInput;
146
144
  if (multipleFilesSupported) {
147
145
  const arrayProperty = property as ResolvedArrayProperty<string[]>;
148
146
  if (Array.isArray(arrayProperty.of)) {
@@ -179,10 +177,18 @@ function StorageUpload({
179
177
  onDropRejected: (fileRejections, event) => {
180
178
  for (const fileRejection of fileRejections) {
181
179
  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
- });
180
+ console.error("Error uploading file: ", error);
181
+ if (error.code === "file-too-large") {
182
+ snackbarContext.open({
183
+ type: "error",
184
+ message: `Error uploading file: File is larger than ${storage.maxSize} bytes`
185
+ });
186
+ } else if (error.code === "file-invalid-type") {
187
+ snackbarContext.open({
188
+ type: "error",
189
+ message: "Error uploading file: File type is not supported"
190
+ });
191
+ }
186
192
  }
187
193
  }
188
194
  }
@@ -204,10 +210,7 @@ function StorageUpload({
204
210
 
205
211
  return (
206
212
  <div {...rootProps}
207
- onMouseEnter={() => setOnHover(true)}
208
- onMouseMove={() => setOnHover(true)}
209
- onMouseLeave={() => setOnHover(false)}
210
- className={cn(dropZoneClasses,
213
+ className={cls(dropZoneClasses,
211
214
  "relative w-full h-full flex",
212
215
  `justify-${hasValue ? "start" : "center"}`,
213
216
  isDragActive ? activeDropClasses : "",
@@ -244,14 +247,13 @@ function StorageUpload({
244
247
  }
245
248
 
246
249
  return child;
247
- })
248
- }
250
+ })}
249
251
 
250
252
  {!internalValue && <div
251
253
  className="flex-grow m-2 max-w-[200px]"
252
254
  onClick={open}>
253
255
  <Typography
254
- className="text-gray-400 dark:text-gray-600"
256
+ className="text-surface-400 dark:text-surface-600"
255
257
  variant={"body2"}
256
258
  align={"center"}>
257
259
  {helpText}
@@ -268,7 +270,7 @@ function StorageUpload({
268
270
  color={"inherit"}
269
271
  size={"small"}
270
272
  onClick={open}>
271
- <EditIcon size={"small"} className={"text-gray-500"}/>
273
+ <EditIcon size={"small"} className={"text-surface-500"}/>
272
274
  </IconButton>
273
275
  </EntityTableCellActions>
274
276
 
@@ -8,5 +8,5 @@ export type {
8
8
 
9
9
  export * from "./PropertyTableCell";
10
10
  export * from "./EntityCollectionRowActions";
11
- export * from "../common/useDataSourceEntityCollectionTableController";
11
+ export * from "../common/useDataSourceTableController";
12
12
  export * from "./column_utils";