@firecms/core 3.0.0-canary.25 → 3.0.0-canary.251

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 (401) 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 +13 -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 +8 -5
  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 +76 -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 +7 -1
  32. package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
  33. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  34. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  35. package/dist/components/ReferenceWidget.d.ts +3 -1
  36. package/dist/components/SelectableTable/SelectableTable.d.ts +14 -4
  37. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  38. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  39. package/dist/components/VirtualTable/VirtualTableProps.d.ts +24 -12
  40. package/dist/components/VirtualTable/types.d.ts +3 -3
  41. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
  42. package/dist/components/common/index.d.ts +2 -1
  43. package/dist/components/common/table_height.d.ts +5 -0
  44. package/dist/components/common/types.d.ts +4 -6
  45. package/dist/components/common/useColumnsIds.d.ts +3 -1
  46. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
  47. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  48. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  49. package/dist/components/index.d.ts +5 -2
  50. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  51. package/dist/core/DefaultAppBar.d.ts +29 -0
  52. package/dist/core/DefaultDrawer.d.ts +19 -0
  53. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  54. package/dist/core/EntityEditView.d.ts +40 -11
  55. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  56. package/dist/core/FireCMS.d.ts +3 -3
  57. package/dist/core/FireCMSRouter.d.ts +4 -0
  58. package/dist/core/NavigationRoutes.d.ts +2 -3
  59. package/dist/core/SideDialogs.d.ts +4 -2
  60. package/dist/core/field_configs.d.ts +1 -1
  61. package/dist/core/index.d.ts +4 -4
  62. package/dist/form/EntityForm.d.ts +36 -64
  63. package/dist/form/EntityFormActions.d.ts +17 -0
  64. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  65. package/dist/form/components/ErrorFocus.d.ts +1 -1
  66. package/dist/form/components/FieldHelperText.d.ts +3 -3
  67. package/dist/form/components/FormEntry.d.ts +6 -0
  68. package/dist/form/components/FormLayout.d.ts +5 -0
  69. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  70. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  71. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  72. package/dist/form/components/index.d.ts +3 -1
  73. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  74. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  75. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  76. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  77. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  78. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  79. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  80. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  81. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +9 -0
  82. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  83. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  84. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  85. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +5 -13
  86. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  87. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  88. package/dist/form/index.d.ts +17 -18
  89. package/dist/form/useClearRestoreValue.d.ts +2 -2
  90. package/dist/hooks/data/delete.d.ts +4 -4
  91. package/dist/hooks/data/save.d.ts +4 -5
  92. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  93. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  94. package/dist/hooks/index.d.ts +1 -0
  95. package/dist/hooks/useAuthController.d.ts +1 -1
  96. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  97. package/dist/hooks/useBuildNavigationController.d.ts +57 -13
  98. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  99. package/dist/hooks/useModeController.d.ts +1 -2
  100. package/dist/hooks/useProjectLog.d.ts +8 -2
  101. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  102. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  103. package/dist/index.d.ts +1 -0
  104. package/dist/index.es.js +22838 -13874
  105. package/dist/index.es.js.map +1 -1
  106. package/dist/index.umd.js +25639 -588
  107. package/dist/index.umd.js.map +1 -1
  108. package/dist/internal/useBuildDataSource.d.ts +3 -17
  109. package/dist/internal/useBuildSideEntityController.d.ts +3 -3
  110. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  111. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  112. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  113. package/dist/preview/components/ReferencePreview.d.ts +3 -2
  114. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  115. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  116. package/dist/preview/util.d.ts +3 -3
  117. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  118. package/dist/routes/FireCMSRoute.d.ts +1 -0
  119. package/dist/routes/HomePageRoute.d.ts +3 -0
  120. package/dist/types/analytics.d.ts +1 -1
  121. package/dist/types/auth.d.ts +8 -10
  122. package/dist/types/collections.d.ts +107 -25
  123. package/dist/types/datasource.d.ts +52 -36
  124. package/dist/types/dialogs_controller.d.ts +7 -3
  125. package/dist/types/entities.d.ts +7 -2
  126. package/dist/types/entity_actions.d.ts +28 -4
  127. package/dist/types/entity_callbacks.d.ts +16 -16
  128. package/dist/types/entity_overrides.d.ts +2 -2
  129. package/dist/types/export_import.d.ts +4 -4
  130. package/dist/types/fields.d.ts +74 -42
  131. package/dist/types/firecms.d.ts +8 -3
  132. package/dist/types/firecms_context.d.ts +1 -1
  133. package/dist/types/index.d.ts +0 -1
  134. package/dist/types/navigation.d.ts +62 -19
  135. package/dist/types/permissions.d.ts +4 -4
  136. package/dist/types/plugins.d.ts +48 -12
  137. package/dist/types/properties.d.ts +80 -24
  138. package/dist/types/property_config.d.ts +1 -3
  139. package/dist/types/side_dialogs_controller.d.ts +10 -0
  140. package/dist/types/side_entity_controller.d.ts +10 -1
  141. package/dist/types/storage.d.ts +75 -0
  142. package/dist/types/user.d.ts +1 -0
  143. package/dist/util/builders.d.ts +3 -3
  144. package/dist/util/callbacks.d.ts +2 -0
  145. package/dist/util/createFormexStub.d.ts +2 -0
  146. package/dist/util/entities.d.ts +3 -3
  147. package/dist/util/entity_actions.d.ts +2 -0
  148. package/dist/util/entity_cache.d.ts +23 -0
  149. package/dist/util/icon_list.d.ts +5 -1
  150. package/dist/util/icon_synonyms.d.ts +1 -98
  151. package/dist/util/icons.d.ts +7 -4
  152. package/dist/util/index.d.ts +3 -0
  153. package/dist/util/navigation_from_path.d.ts +6 -1
  154. package/dist/util/navigation_utils.d.ts +15 -3
  155. package/dist/util/objects.d.ts +2 -1
  156. package/dist/util/permissions.d.ts +4 -4
  157. package/dist/util/plurals.d.ts +0 -2
  158. package/dist/util/property_utils.d.ts +4 -4
  159. package/dist/util/references.d.ts +2 -2
  160. package/dist/util/resolutions.d.ts +41 -17
  161. package/dist/util/storage.d.ts +23 -2
  162. package/dist/util/useStorageUploadController.d.ts +3 -3
  163. package/package.json +64 -48
  164. package/src/app/AppBar.tsx +18 -0
  165. package/src/app/Drawer.tsx +24 -0
  166. package/src/app/Scaffold.tsx +253 -0
  167. package/src/app/index.ts +4 -0
  168. package/src/app/useApp.tsx +32 -0
  169. package/src/components/ArrayContainer.tsx +447 -229
  170. package/src/components/CircularProgressCenter.tsx +2 -2
  171. package/src/components/ClearFilterSortButton.tsx +41 -0
  172. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +11 -11
  173. package/src/components/DeleteEntityDialog.tsx +13 -20
  174. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +59 -40
  175. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
  176. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
  177. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +72 -42
  178. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  179. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
  180. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
  181. package/src/components/EntityCollectionTable/index.tsx +1 -1
  182. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +32 -37
  183. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +49 -36
  184. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  185. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +135 -105
  186. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
  187. package/src/components/EntityCollectionView/EntityCollectionView.tsx +231 -117
  188. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +4 -2
  189. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  190. package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
  191. package/src/components/EntityCollectionView/utils.ts +19 -0
  192. package/src/components/EntityJsonPreview.tsx +66 -0
  193. package/src/components/EntityPreview.tsx +80 -59
  194. package/src/components/EntityView.tsx +13 -10
  195. package/src/components/ErrorView.tsx +4 -4
  196. package/src/components/HomePage/DefaultHomePage.tsx +486 -159
  197. package/src/components/HomePage/FavouritesView.tsx +9 -14
  198. package/src/components/HomePage/HomePageDnD.tsx +613 -0
  199. package/src/components/HomePage/NavigationCard.tsx +48 -39
  200. package/src/components/HomePage/NavigationCardBinding.tsx +17 -16
  201. package/src/components/HomePage/NavigationGroup.tsx +63 -29
  202. package/src/components/HomePage/RenameGroupDialog.tsx +113 -0
  203. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  204. package/src/components/NotFoundPage.tsx +2 -2
  205. package/src/components/PropertyConfigBadge.tsx +9 -3
  206. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  207. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +21 -13
  208. package/src/components/ReferenceWidget.tsx +21 -11
  209. package/src/components/SearchIconsView.tsx +10 -7
  210. package/src/components/SelectableTable/SelectableTable.tsx +157 -145
  211. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  212. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
  213. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
  214. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -23
  215. package/src/components/UnsavedChangesDialog.tsx +42 -0
  216. package/src/components/VirtualTable/VirtualTable.tsx +105 -51
  217. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  218. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  219. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  220. package/src/components/VirtualTable/VirtualTableProps.tsx +28 -14
  221. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  222. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  223. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -2
  224. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  225. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  226. package/src/components/VirtualTable/types.tsx +2 -3
  227. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +44 -40
  228. package/src/components/common/index.ts +2 -1
  229. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  230. package/src/components/common/types.tsx +4 -6
  231. package/src/components/common/useColumnsIds.tsx +24 -3
  232. package/src/components/common/useDataSourceTableController.tsx +420 -0
  233. package/src/components/common/useDebouncedCallback.tsx +20 -0
  234. package/src/components/common/useScrollRestoration.tsx +68 -0
  235. package/src/components/common/useTableSearchHelper.ts +53 -12
  236. package/src/components/index.tsx +6 -2
  237. package/src/contexts/BreacrumbsContext.tsx +38 -0
  238. package/src/contexts/DialogsProvider.tsx +5 -4
  239. package/src/contexts/ModeController.tsx +1 -3
  240. package/src/contexts/SnackbarProvider.tsx +2 -0
  241. package/src/core/DefaultAppBar.tsx +219 -0
  242. package/src/core/DefaultDrawer.tsx +185 -0
  243. package/src/core/DrawerNavigationItem.tsx +66 -0
  244. package/src/core/EntityEditView.tsx +408 -478
  245. package/src/core/EntityEditViewFormActions.tsx +199 -0
  246. package/src/core/EntitySidePanel.tsx +85 -21
  247. package/src/core/FireCMS.tsx +72 -58
  248. package/src/core/FireCMSRouter.tsx +17 -0
  249. package/src/core/NavigationRoutes.tsx +28 -38
  250. package/src/core/SideDialogs.tsx +22 -12
  251. package/src/core/field_configs.tsx +26 -13
  252. package/src/core/index.tsx +6 -5
  253. package/src/form/EntityForm.tsx +589 -535
  254. package/src/form/EntityFormActions.tsx +169 -0
  255. package/src/form/PropertyFieldBinding.tsx +88 -45
  256. package/src/form/components/CustomIdField.tsx +9 -3
  257. package/src/form/components/FieldHelperText.tsx +4 -4
  258. package/src/form/components/FormEntry.tsx +22 -0
  259. package/src/form/components/FormLayout.tsx +16 -0
  260. package/src/form/components/LabelWithIcon.tsx +30 -19
  261. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  262. package/src/form/components/StorageItemPreview.tsx +23 -13
  263. package/src/form/components/StorageUploadProgress.tsx +5 -6
  264. package/src/form/components/index.tsx +3 -1
  265. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +34 -19
  266. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +50 -36
  267. package/src/form/field_bindings/BlockFieldBinding.tsx +56 -34
  268. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  269. package/src/form/field_bindings/KeyValueFieldBinding.tsx +61 -52
  270. package/src/form/field_bindings/MapFieldBinding.tsx +73 -55
  271. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +157 -0
  272. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
  273. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  274. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
  275. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  276. package/src/form/field_bindings/RepeatFieldBinding.tsx +62 -35
  277. package/src/form/field_bindings/SelectFieldBinding.tsx +24 -15
  278. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +257 -199
  279. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  280. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  281. package/src/form/index.tsx +17 -37
  282. package/src/form/useClearRestoreValue.tsx +2 -2
  283. package/src/form/validation.ts +13 -23
  284. package/src/hooks/data/delete.ts +6 -5
  285. package/src/hooks/data/save.ts +26 -33
  286. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  287. package/src/hooks/data/useDataSource.tsx +11 -3
  288. package/src/hooks/data/useEntityFetch.tsx +10 -6
  289. package/src/hooks/index.tsx +1 -0
  290. package/src/hooks/useAuthController.tsx +1 -1
  291. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  292. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  293. package/src/hooks/useBuildModeController.tsx +22 -29
  294. package/src/hooks/useBuildNavigationController.tsx +440 -119
  295. package/src/hooks/useFireCMSContext.tsx +3 -33
  296. package/src/hooks/useLargeLayout.tsx +0 -35
  297. package/src/hooks/useModeController.tsx +1 -2
  298. package/src/hooks/useProjectLog.tsx +32 -10
  299. package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
  300. package/src/hooks/useValidateAuthenticator.tsx +17 -37
  301. package/src/index.ts +1 -0
  302. package/src/internal/useBuildDataSource.ts +79 -85
  303. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  304. package/src/internal/useBuildSideEntityController.tsx +201 -77
  305. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  306. package/src/preview/PropertyPreview.tsx +34 -25
  307. package/src/preview/PropertyPreviewProps.tsx +7 -1
  308. package/src/preview/components/BooleanPreview.tsx +2 -2
  309. package/src/preview/components/EmptyValue.tsx +1 -1
  310. package/src/preview/components/EnumValuesChip.tsx +2 -2
  311. package/src/preview/components/ImagePreview.tsx +26 -37
  312. package/src/preview/components/ReferencePreview.tsx +23 -34
  313. package/src/preview/components/StorageThumbnail.tsx +5 -1
  314. package/src/preview/components/UrlComponentPreview.tsx +60 -28
  315. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -6
  316. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +7 -5
  317. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -4
  318. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -4
  319. package/src/preview/property_previews/ArrayOneOfPreview.tsx +7 -6
  320. package/src/preview/property_previews/ArrayPropertyPreview.tsx +7 -6
  321. package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
  322. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
  323. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  324. package/src/preview/util.ts +10 -10
  325. package/src/routes/CustomCMSRoute.tsx +21 -0
  326. package/src/routes/FireCMSRoute.tsx +246 -0
  327. package/src/routes/HomePageRoute.tsx +17 -0
  328. package/src/types/analytics.ts +3 -0
  329. package/src/types/auth.tsx +9 -13
  330. package/src/types/collections.ts +129 -30
  331. package/src/types/customization_controller.tsx +0 -1
  332. package/src/types/datasource.ts +61 -43
  333. package/src/types/dialogs_controller.tsx +7 -3
  334. package/src/types/entities.ts +12 -2
  335. package/src/types/entity_actions.tsx +32 -7
  336. package/src/types/entity_callbacks.ts +18 -18
  337. package/src/types/entity_overrides.tsx +2 -2
  338. package/src/types/export_import.ts +4 -4
  339. package/src/types/fields.tsx +85 -46
  340. package/src/types/firecms.tsx +9 -4
  341. package/src/types/firecms_context.tsx +1 -1
  342. package/src/types/index.ts +0 -1
  343. package/src/types/navigation.ts +77 -24
  344. package/src/types/permissions.ts +5 -5
  345. package/src/types/plugins.tsx +57 -14
  346. package/src/types/properties.ts +95 -26
  347. package/src/types/property_config.tsx +1 -2
  348. package/src/types/side_dialogs_controller.tsx +15 -0
  349. package/src/types/side_entity_controller.tsx +11 -1
  350. package/src/types/storage.ts +83 -1
  351. package/src/types/user.ts +2 -0
  352. package/src/util/builders.ts +10 -8
  353. package/src/util/callbacks.ts +119 -0
  354. package/src/util/createFormexStub.tsx +62 -0
  355. package/src/util/entities.ts +9 -6
  356. package/src/util/entity_actions.ts +28 -0
  357. package/src/util/entity_cache.ts +204 -0
  358. package/src/util/enums.ts +1 -1
  359. package/src/util/icon_list.ts +16 -10
  360. package/src/util/icon_synonyms.ts +3 -100
  361. package/src/util/icons.tsx +36 -11
  362. package/src/util/index.ts +3 -0
  363. package/src/util/join_collections.ts +6 -1
  364. package/src/util/make_properties_editable.ts +13 -5
  365. package/src/util/navigation_from_path.ts +18 -7
  366. package/src/util/navigation_utils.ts +141 -25
  367. package/src/util/objects.ts +90 -33
  368. package/src/util/parent_references_from_path.ts +3 -3
  369. package/src/util/permissions.ts +9 -8
  370. package/src/util/plurals.ts +0 -2
  371. package/src/util/property_utils.tsx +17 -6
  372. package/src/util/references.ts +19 -8
  373. package/src/util/resolutions.ts +110 -48
  374. package/src/util/storage.ts +79 -21
  375. package/src/util/strings.ts +2 -2
  376. package/src/util/useStorageUploadController.tsx +91 -28
  377. package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
  378. package/dist/components/FireCMSAppBar.d.ts +0 -26
  379. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  380. package/dist/components/VirtualTable/common.d.ts +0 -2
  381. package/dist/core/Drawer.d.ts +0 -23
  382. package/dist/core/Scaffold.d.ts +0 -55
  383. package/dist/core/SideEntityView.d.ts +0 -7
  384. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  385. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  386. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  387. package/dist/internal/useLocaleConfig.d.ts +0 -1
  388. package/dist/types/appcheck.d.ts +0 -26
  389. package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
  390. package/src/components/FireCMSAppBar.tsx +0 -165
  391. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  392. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
  393. package/src/core/Drawer.tsx +0 -191
  394. package/src/core/Scaffold.tsx +0 -281
  395. package/src/core/SideEntityView.tsx +0 -38
  396. package/src/form/components/FormikArrayContainer.tsx +0 -44
  397. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  398. package/src/internal/useBuildCustomizationController.tsx +0 -5
  399. package/src/internal/useLocaleConfig.tsx +0 -18
  400. package/src/types/appcheck.ts +0 -29
  401. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -1,4 +1,5 @@
1
- import { ArrowForwardIcon, Card, cn, Markdown, Typography, } from "@firecms/ui";
1
+ import { ArrowForwardIcon, Card, cls, Markdown, Typography, } from "@firecms/ui";
2
+ import React from "react"; // Import React
2
3
 
3
4
  export type NavigationCardProps = {
4
5
  name: string,
@@ -6,64 +7,72 @@ export type NavigationCardProps = {
6
7
  actions: React.ReactNode;
7
8
  icon: React.ReactNode;
8
9
  onClick?: () => void,
10
+ shrink?: boolean
9
11
  };
10
12
 
11
- export function NavigationCard({
13
+ // Wrap the component with React.memo
14
+ export const NavigationCard = React.memo(function NavigationCard({
12
15
  name,
13
16
  description,
14
17
  icon,
15
18
  actions,
16
19
  onClick,
20
+ shrink
17
21
  }: NavigationCardProps) {
18
22
 
19
- return (<Card
20
- className={cn("h-full p-4 cursor-pointer min-h-[230px]")}
21
- onClick={() => {
22
- onClick?.();
23
- }}>
23
+ return (
24
+ <Card
25
+ className={cls(
26
+ "h-full p-4 cursor-pointer min-h-[230px] transition-all duration-200 ease-in-out",
27
+ shrink && "w-full max-w-full min-h-0 scale-75"
28
+ )}
29
+ onClick={() => {
30
+ onClick?.();
31
+ }}
32
+ >
33
+
34
+ <div className="flex flex-col items-start h-full">
35
+ <div
36
+ className="flex-grow w-full">
24
37
 
25
- <div className="flex flex-col items-start h-full">
26
- <div
27
- className="flex-grow w-full">
38
+ <div
39
+ className="h-10 flex items-center w-full justify-between text-surface-300 dark:text-surface-600">
28
40
 
29
- <div
30
- className="h-10 flex items-center w-full justify-between text-gray-300 dark:text-gray-600">
41
+ {icon}
31
42
 
32
- {icon}
43
+ <div
44
+ className="flex items-center gap-1"
45
+ onClick={(event: React.MouseEvent) => {
46
+ event.preventDefault();
47
+ event.stopPropagation();
48
+ }}>
33
49
 
34
- <div
35
- className="flex items-center gap-1"
36
- onClick={(event: React.MouseEvent) => {
37
- event.preventDefault();
38
- event.stopPropagation();
39
- }}>
50
+ {actions}
40
51
 
41
- {actions}
52
+ </div>
42
53
 
43
54
  </div>
44
55
 
45
- </div>
46
-
47
- <Typography gutterBottom variant="h5"
48
- component="h2">
49
- {name}
50
- </Typography>
56
+ <Typography gutterBottom variant="h5"
57
+ component="h2">
58
+ {name}
59
+ </Typography>
51
60
 
52
- {description && <Typography variant="body2"
53
- color="secondary"
54
- component="div">
55
- <Markdown source={description} size={"small"}/>
56
- </Typography>}
57
- </div>
61
+ {description && <Typography variant="body2"
62
+ color="secondary"
63
+ component="div">
64
+ <Markdown source={description} size={"small"}/>
65
+ </Typography>}
66
+ </div>
58
67
 
59
- <div style={{ alignSelf: "flex-end" }}>
68
+ <div style={{ alignSelf: "flex-end" }}>
60
69
 
61
- <div className={"p-4"}>
62
- <ArrowForwardIcon className="text-primary"/>
70
+ <div className={"p-4"}>
71
+ <ArrowForwardIcon className="text-primary"/>
72
+ </div>
63
73
  </div>
64
- </div>
65
74
 
66
- </div>
75
+ </div>
67
76
 
68
- </Card>)
69
- }
77
+ </Card>)
78
+ });
@@ -1,12 +1,13 @@
1
1
  import { useNavigate } from "react-router-dom";
2
2
 
3
3
  import { useCustomizationController, useFireCMSContext } from "../../hooks";
4
- import { PluginHomePageActionsProps, TopNavigationEntry } from "../../types";
4
+ import { NavigationEntry, PluginHomePageActionsProps } from "../../types";
5
5
  import { IconForView } from "../../util";
6
6
  import { useUserConfigurationPersistence } from "../../hooks/useUserConfigurationPersistence";
7
- import { IconButton, StarBorderIcon, StarIcon } from "@firecms/ui";
7
+ import { IconButton, StarIcon } from "@firecms/ui";
8
8
  import { NavigationCard } from "./NavigationCard";
9
9
  import { SmallNavigationCard } from "./SmallNavigationCard";
10
+ import React from "react";
10
11
 
11
12
  /**
12
13
  * This is the component used in the home page to render a card for each
@@ -19,7 +20,7 @@ import { SmallNavigationCard } from "./SmallNavigationCard";
19
20
  * @param name
20
21
  * @param description
21
22
  * @param onClick
22
- * @constructor
23
+
23
24
  */
24
25
  export function NavigationCardBinding({
25
26
  path,
@@ -29,9 +30,11 @@ export function NavigationCardBinding({
29
30
  name,
30
31
  description,
31
32
  onClick,
32
- type
33
- }: TopNavigationEntry & {
34
- onClick?: () => void
33
+ type,
34
+ shrink
35
+ }: NavigationEntry & {
36
+ onClick?: () => void,
37
+ shrink?: boolean // <-- add shrink prop type
35
38
  }) {
36
39
 
37
40
  const userConfigurationPersistence = useUserConfigurationPersistence();
@@ -47,6 +50,7 @@ export function NavigationCardBinding({
47
50
  ? [
48
51
  <IconButton
49
52
  key={"favourite"}
53
+ size={"small"}
50
54
  onClick={(e) => {
51
55
  e.preventDefault();
52
56
  e.stopPropagation();
@@ -60,14 +64,9 @@ export function NavigationCardBinding({
60
64
  );
61
65
  }
62
66
  }}>
63
- {
64
- favourite
65
- ? <StarIcon
66
- size={18}
67
- className={"text-secondary"}/>
68
- : <StarBorderIcon
69
- size={18}
70
- className={"text-gray-400 dark:text-gray-500"}/>}
67
+ <StarIcon
68
+ size={"small"}
69
+ className={favourite ? "text-secondary" : "text-surface-400 dark:text-surface-500"}/>
71
70
  </IconButton>
72
71
  ]
73
72
  : [];
@@ -96,7 +95,7 @@ export function NavigationCardBinding({
96
95
  if (type === "admin") {
97
96
  return <SmallNavigationCard icon={collectionIcon}
98
97
  name={name}
99
- url={url}/>
98
+ url={url}/>;
100
99
  }
101
100
 
102
101
  return <NavigationCard
@@ -112,5 +111,7 @@ export function NavigationCardBinding({
112
111
  [path, ...(userConfigurationPersistence.recentlyVisitedPaths ?? []).filter(p => p !== path)]
113
112
  );
114
113
  }
115
- }}/>;
114
+ }}
115
+ shrink={shrink}
116
+ />;
116
117
  }
@@ -1,39 +1,73 @@
1
- import { PropsWithChildren } from "react";
2
- import { useUserConfigurationPersistence } from "../../hooks/useUserConfigurationPersistence";
3
- import { ExpandablePanel, Typography } from "@firecms/ui";
1
+ import React, { PropsWithChildren, useState } from "react";
2
+ import { cls, EditIcon, IconButton, Typography } from "@firecms/ui";
4
3
 
5
4
  export function NavigationGroup({
6
5
  children,
7
- group
6
+ group,
7
+ minimised,
8
+ isPreview,
9
+ isPotentialCardDropTarget,
10
+ onEditGroup, // New prop to handle editing
11
+ dndDisabled // New prop to disable editing when D&D is off
8
12
  }: PropsWithChildren<{
9
- group: string | undefined
13
+ group: string | undefined,
14
+ minimised?: boolean,
15
+ isPreview?: boolean,
16
+ isPotentialCardDropTarget?: boolean,
17
+ onEditGroup?: (groupName: string) => void; // Callback to open dialog
18
+ dndDisabled?: boolean; // Added dndDisabled prop
10
19
  }>) {
11
- const userConfigurationPersistence = useUserConfigurationPersistence();
12
- return (
13
- <ExpandablePanel
14
- invisible={true}
15
- titleClassName={"font-medium text-sm text-gray-600 dark:text-gray-400"}
16
- className={"py-4"}
17
- initiallyExpanded={!(userConfigurationPersistence?.collapsedGroups ?? []).includes(group ?? "ungrouped")}
18
- onExpandedChange={expanded => {
19
- if (userConfigurationPersistence) {
20
20
 
21
- if (!expanded) {
22
- const paths = (userConfigurationPersistence.collapsedGroups ?? []).concat(group ?? "ungrouped");
23
- userConfigurationPersistence.setCollapsedGroups(paths);
24
- } else {
25
- userConfigurationPersistence.setCollapsedGroups((userConfigurationPersistence.collapsedGroups ?? []).filter(g => g !== (group ?? "ungrouped")));
26
- }
27
- }
28
- }}
29
- title={<Typography color={"secondary"}
30
- className="font-medium ml-1">
31
- {group?.toUpperCase() ?? "Views".toUpperCase()}
32
- </Typography>}>
21
+ const [isHovered, setIsHovered] = useState(false);
22
+ const currentGroupName = group ?? "Views";
23
+
24
+ return (
25
+ <div className={cls(
26
+ !isPotentialCardDropTarget ? "my-10" : "my-6",
27
+ "transition-all duration-200 ease-in-out"
28
+ )}
29
+ >
30
+ <div className={`flex items-center ${isPreview ? "px-1 py-0.5 m-0" : "ml-3.5 mt-6"} `}
33
31
 
34
- <div className="mb-8">
35
- {children}
32
+ onMouseEnter={() => setIsHovered(true)}
33
+ onMouseLeave={() => setIsHovered(false)}>
34
+ <Typography
35
+ variant={isPreview ? "body2" : "caption"}
36
+ component={"h2"}
37
+ color="secondary"
38
+ // Minimal padding and no margin for preview title
39
+ className={`${isPreview ? "px-1 py-0.5" : "ml-3.5"} font-medium uppercase text-sm text-surface-600 dark:text-surface-400`}
40
+ >
41
+ {currentGroupName}
42
+ </Typography>
43
+ {!isPreview && onEditGroup && !dndDisabled && (
44
+ <IconButton
45
+ size="smallest"
46
+ onClick={(e) => {
47
+ e.stopPropagation(); // Prevent other click events
48
+ onEditGroup(currentGroupName);
49
+ }}
50
+ className={cls("ml-2 ", isHovered ? "opacity-100" : "opacity-0", "transition-opacity duration-100")}
51
+ >
52
+ <EditIcon size="smallest"/>
53
+ </IconButton>
54
+ )}
36
55
  </div>
37
- </ExpandablePanel>
56
+
57
+ {isPreview ? (
58
+ children
59
+ ) : minimised ? (
60
+ // For minimised view in the main list
61
+ <div className={cls("mt-4 p-8 bg-surface-accent-200 dark:bg-surface-accent-800 rounded-lg")}
62
+ style={{ minHeight: "50px" }}>
63
+ </div>
64
+ ) : (
65
+ // If highlighted, the parent div already has padding, so children (NavigationGroupDroppable) don't need extra margin top as much.
66
+ // The inner content of NavigationGroupDroppable will define its own padding if needed when active.
67
+ <div className={cls("mt-4", !minimised ? "pt-0" : "")}>
68
+ {children}
69
+ </div>
70
+ )}
71
+ </div>
38
72
  );
39
73
  }
@@ -0,0 +1,113 @@
1
+ import React, { useState, useEffect, useRef } from "react";
2
+ import { Button, Dialog, DialogActions, DialogContent, DialogTitle, TextField } from "@firecms/ui";
3
+
4
+ interface RenameGroupDialogProps {
5
+ open: boolean;
6
+ initialName: string;
7
+ existingGroupNames: string[]; // Names of other existing groups to check for duplicates
8
+ onClose: () => void;
9
+ onRename: (newName: string) => void;
10
+ }
11
+
12
+ export function RenameGroupDialog({ open, initialName, existingGroupNames, onClose, onRename }: RenameGroupDialogProps) {
13
+ const [name, setName] = useState(initialName);
14
+ const [error, setError] = useState<string | null>(null);
15
+ const inputRef = useRef<HTMLInputElement | HTMLTextAreaElement | null>(null); // Create a ref for the input
16
+
17
+ useEffect(() => {
18
+ if (open) {
19
+ setName(initialName);
20
+ setError(null);
21
+ // Focus and select text when dialog opens
22
+ setTimeout(() => { // setTimeout to ensure the input is rendered and focusable
23
+ if (inputRef.current) {
24
+ inputRef.current.focus();
25
+ inputRef.current.select();
26
+ }
27
+ }, 100);
28
+ }
29
+ }, [initialName, open]);
30
+
31
+ const handleNameChange = (event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {
32
+ const newName = event.target.value;
33
+ setName(newName);
34
+ if (!newName.trim()) {
35
+ setError("Group name cannot be empty.");
36
+ } else if (existingGroupNames.includes(newName.trim())) {
37
+ setError("This group name already exists.");
38
+ } else {
39
+ setError(null);
40
+ }
41
+ };
42
+
43
+ const handleSave = () => {
44
+ const trimmedName = name.trim();
45
+ if (!trimmedName) {
46
+ setError("Group name cannot be empty.");
47
+ return;
48
+ }
49
+ if (existingGroupNames.includes(trimmedName)) {
50
+ setError("This group name already exists.");
51
+ return;
52
+ }
53
+ if (!error) {
54
+ onRename(trimmedName);
55
+ onClose();
56
+ }
57
+ };
58
+
59
+ const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {
60
+ if (event.key === "Enter") {
61
+ event.preventDefault(); // Prevent default form submission behavior
62
+ const trimmedName = name.trim();
63
+ // We need to check the error state directly as well,
64
+ // because the error state might not have updated if the user types and immediately hits enter.
65
+ let currentError = null;
66
+ if (!trimmedName) {
67
+ currentError = "Group name cannot be empty.";
68
+ } else if (existingGroupNames.includes(trimmedName)) {
69
+ currentError = "This group name already exists.";
70
+ }
71
+
72
+ if (!currentError && trimmedName) {
73
+ handleSave();
74
+ } else if (currentError) {
75
+ setError(currentError); // Ensure error is displayed if trying to submit with Enter
76
+ }
77
+ }
78
+ };
79
+
80
+ const handleClose = () => {
81
+ setName(initialName);
82
+ setError(null);
83
+ onClose();
84
+ };
85
+
86
+ if (!open) return null;
87
+
88
+ return (
89
+ <Dialog open={open} onOpenChange={onClose}>
90
+ <DialogTitle>Rename Group</DialogTitle>
91
+ <DialogContent>
92
+ <TextField
93
+ inputRef={inputRef} // Pass the ref to the TextField
94
+ label="Group Name"
95
+ value={name}
96
+ onChange={handleNameChange}
97
+ onKeyDown={handleKeyDown} // Added onKeyDown handler
98
+ error={!!error}
99
+ aria-describedby={error ? "group-name-error" : undefined}
100
+ />
101
+ {error && <p id="group-name-error" style={{ display: "none" }}>{error}</p>}
102
+ </DialogContent>
103
+ <DialogActions>
104
+ <Button onClick={onClose} variant="text">
105
+ Cancel
106
+ </Button>
107
+ <Button onClick={handleSave} disabled={!!error || !name.trim()}>
108
+ Save
109
+ </Button>
110
+ </DialogActions>
111
+ </Dialog>
112
+ );
113
+ }
@@ -1,6 +1,6 @@
1
- import { ArrowForwardIcon, cardClickableMixin, cardMixin, cn, focusedMixin, Typography, } from "@firecms/ui";
1
+ import { ArrowForwardIcon, cardClickableMixin, cardMixin, cls, Typography, } from "@firecms/ui";
2
2
 
3
- import { Link as ReactLink } from "react-router-dom";
3
+ import { Link } from "react-router-dom";
4
4
 
5
5
  export type SmallNavigationCardProps = {
6
6
  name: string,
@@ -17,11 +17,10 @@ export function SmallNavigationCard({
17
17
  return (
18
18
  <>
19
19
 
20
- <ReactLink
20
+ <Link
21
21
  tabIndex={0}
22
- className={cn(cardMixin,
22
+ className={cls(cardMixin,
23
23
  cardClickableMixin,
24
- focusedMixin,
25
24
  "cursor-pointer flex flex-row items-center px-4 py-2 text-inherit dark:text-inherit visited:text-inherit visited:dark:text-inherit hover:text-inherit hover:dark:text-inherit ")}
26
25
  to={url}
27
26
  >
@@ -39,7 +38,7 @@ export function SmallNavigationCard({
39
38
  <div className={"p-4"}>
40
39
  <ArrowForwardIcon color="primary"/>
41
40
  </div>
42
- </ReactLink>
41
+ </Link>
43
42
 
44
43
  </>);
45
44
  }
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import { Link as ReactLink } from "react-router-dom";
2
+ import { Link } from "react-router-dom";
3
3
  import { Button, Typography } from "@firecms/ui";
4
4
 
5
5
  export function NotFoundPage() {
@@ -17,7 +17,7 @@ export function NotFoundPage() {
17
17
  </Typography>
18
18
  <Button
19
19
  variant={"text"}
20
- component={ReactLink}
20
+ component={Link}
21
21
  to={"/"}>Back to home</Button>
22
22
  </div>
23
23
  </div>
@@ -2,15 +2,21 @@ import { getIconForWidget } from "../util";
2
2
  import { PropertyConfig } from "../types";
3
3
  import { getDefaultFieldConfig } from "../core";
4
4
 
5
- export function PropertyConfigBadge({ propertyConfig }: { propertyConfig: PropertyConfig | undefined }): React.ReactNode {
6
- const classes = "h-8 w-8 p-1 rounded-full shadow text-white";
5
+ export function PropertyConfigBadge({
6
+ propertyConfig,
7
+ disabled
8
+ }: {
9
+ propertyConfig: PropertyConfig | undefined,
10
+ disabled?: boolean
11
+ }): React.ReactNode {
12
+ const classes = "h-8 w-8 p-1 rounded-full shadow text-white " + (disabled ? "bg-surface-400 dark:bg-surface-600" : "");
7
13
 
8
14
  const defaultPropertyConfig = typeof propertyConfig?.property === "object" ? getDefaultFieldConfig(propertyConfig.property) : undefined;
9
15
 
10
16
  return <div
11
17
  className={classes}
12
18
  style={{
13
- background: propertyConfig?.color ?? defaultPropertyConfig?.color ?? "#888"
19
+ background: !disabled ? (propertyConfig?.color ?? defaultPropertyConfig?.color ?? "#888") : undefined
14
20
  }}>
15
21
  {propertyConfig?.Icon ? getIconForWidget(propertyConfig, "medium") : getIconForWidget(defaultPropertyConfig, "medium")}
16
22
  </div>
@@ -0,0 +1,47 @@
1
+ import { ContentCopyIcon, IconButton, Tooltip, Typography } from "@firecms/ui";
2
+ import { useCallback, useState } from "react";
3
+
4
+ export function PropertyIdCopyTooltip({
5
+ propertyKey,
6
+ className,
7
+ children,
8
+ }: {
9
+ propertyKey: string,
10
+ className?: string,
11
+ children: React.ReactNode
12
+ }) {
13
+ return <Tooltip title={<PropertyIdCopyTooltipContent propertyKey={propertyKey}/>}
14
+ delayDuration={800}
15
+ side={"top"}
16
+ align={"start"}
17
+ sideOffset={8}
18
+ className={className}>
19
+ {children}
20
+ </Tooltip>
21
+
22
+ }
23
+
24
+ export function PropertyIdCopyTooltipContent({ propertyKey }: { propertyKey: string }) {
25
+
26
+ const [copied, setCopied] = useState(false);
27
+
28
+ return (
29
+ <div className={"flex flex-row gap-2 items-center justify-center text-white"}>
30
+ <div>
31
+ <Typography variant={"caption"} className={"min-w-20 text-surface-accent-400"}
32
+ color={"disabled"}>{copied ? "Copied" : "Property ID"}</Typography>
33
+ <Typography variant={"caption"} className={"text-white"}><code>{propertyKey}</code></Typography>
34
+ </div>
35
+ <IconButton size={"small"}>
36
+ <ContentCopyIcon size={"smallest"}
37
+ className={"text-white"}
38
+ onClick={useCallback(() => {
39
+ navigator.clipboard.writeText(propertyKey);
40
+ setCopied(true);
41
+ setTimeout(() => setCopied(false), 2000);
42
+ }, [propertyKey])}
43
+ />
44
+ </IconButton>
45
+ </div>
46
+ );
47
+ }
@@ -4,7 +4,7 @@ import { CollectionSize, Entity, EntityCollection, FilterValues } from "../../ty
4
4
  import {
5
5
  EntityCollectionRowActions,
6
6
  EntityCollectionTable,
7
- useDataSourceEntityCollectionTableController
7
+ useDataSourceTableController
8
8
  } from "../EntityCollectionTable";
9
9
  import {
10
10
  useAuthController,
@@ -16,7 +16,7 @@ import {
16
16
  } from "../../hooks";
17
17
  import { ErrorView } from "../ErrorView";
18
18
  import { AddIcon, Button, DialogActions, Typography } from "@firecms/ui";
19
- import { canCreateEntity, fullPathToCollectionSegments, resolveCollection } from "../../util";
19
+ import { canCreateEntity, IconForView, resolveCollection } from "../../util";
20
20
  import { useSelectionController } from "../EntityCollectionView/useSelectionController";
21
21
  import { useColumnIds, useTableSearchHelper } from "../common";
22
22
  import { useSideDialogContext } from "../../core";
@@ -101,13 +101,14 @@ export function ReferenceSelectionTable<M extends Record<string, any>>(
101
101
  maxSelection,
102
102
  }: ReferenceSelectionInnerProps<M>) {
103
103
 
104
+ const authController = useAuthController();
104
105
  const sideDialogContext = useSideDialogContext();
105
106
  const sideEntityController = useSideEntityController();
106
107
  const navigation = useNavigationController();
107
108
  const analyticsController = useAnalyticsController();
108
109
  const customizationController = useCustomizationController();
109
110
 
110
- const fullPath = navigation.resolveAliasesFrom(pathInput);
111
+ const fullPath = navigation.resolveIdsFrom(pathInput);
111
112
 
112
113
  const dataSource = useDataSource(collection);
113
114
 
@@ -233,7 +234,9 @@ export function ReferenceSelectionTable<M extends Record<string, any>>(
233
234
  selectionEnabled={multiselect}
234
235
  hideId={collection?.hideIdFromCollection}
235
236
  fullPath={fullPath}
236
- selectionController={selectionController}/>;
237
+ selectionController={selectionController}
238
+ openEntityMode={"side_panel"}
239
+ />;
237
240
 
238
241
  };
239
242
 
@@ -247,23 +250,22 @@ export function ReferenceSelectionTable<M extends Record<string, any>>(
247
250
  error={"Could not find collection with id " + collection}/>
248
251
  }
249
252
 
250
- // eslint-disable-next-line react-hooks/rules-of-hooks
251
253
  const resolvedCollection = useMemo(() => resolveCollection({
252
254
  collection: collection,
253
255
  path: fullPath,
254
256
  values: {},
255
- fields: customizationController.propertyConfigs
257
+ propertyConfigs: customizationController.propertyConfigs,
258
+ authController
256
259
  }), [collection, customizationController.propertyConfigs, fullPath]);
257
260
 
258
- // eslint-disable-next-line react-hooks/rules-of-hooks
259
261
  const displayedColumnIds = useColumnIds(resolvedCollection, false);
260
262
 
261
- // eslint-disable-next-line react-hooks/rules-of-hooks
262
- const tableController = useDataSourceEntityCollectionTableController<M>({
263
+ const tableController = useDataSourceTableController<M>({
263
264
  fullPath,
264
265
  collection,
265
266
  entitiesDisplayedFirst,
266
- forceFilter
267
+ forceFilter,
268
+ updateUrl: false,
267
269
  });
268
270
 
269
271
  const {
@@ -272,7 +274,6 @@ export function ReferenceSelectionTable<M extends Record<string, any>>(
272
274
  onTextSearchClick,
273
275
  textSearchEnabled
274
276
  } =
275
- // eslint-disable-next-line react-hooks/rules-of-hooks
276
277
  useTableSearchHelper({
277
278
  collection,
278
279
  fullPath,
@@ -291,9 +292,16 @@ export function ReferenceSelectionTable<M extends Record<string, any>>(
291
292
  displayedColumnIds={displayedColumnIds}
292
293
  onEntityClick={onEntityClick}
293
294
  tableController={tableController}
295
+ enablePopupIcon={false}
294
296
  tableRowActionsBuilder={tableRowActionsBuilder}
295
- title={<Typography variant={"subtitle2"}>
296
- {collection.singularName ? `Select ${collection.singularName}` : `Select from ${collection.name}`}
297
+ openEntityMode={"side_panel"}
298
+ title={<Typography variant={"subtitle2"} className={"flex flex-row gap-2"}>
299
+ <IconForView
300
+ size={"small"}
301
+ collectionOrView={collection}
302
+ className={"text-surface-300 dark:text-surface-600"}/>
303
+ {collection.singularName ? `Select ${collection.singularName}` : `Select
304
+ from ${collection.name}`}
297
305
  </Typography>}
298
306
  defaultSize={collection.defaultSize}
299
307
  properties={resolvedCollection.properties}