@firecms/core 3.0.0-canary.99 → 3.0.0-rc.2

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 (371) hide show
  1. package/README.md +2 -2
  2. package/dist/app/Drawer.d.ts +0 -1
  3. package/dist/app/Scaffold.d.ts +4 -0
  4. package/dist/components/ArrayContainer.d.ts +31 -12
  5. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  6. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +3 -1
  7. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
  8. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +17 -3
  9. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +1 -1
  10. package/dist/components/EntityCollectionTable/index.d.ts +1 -1
  11. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +6 -3
  12. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +8 -0
  13. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  14. package/dist/components/EntityJsonPreview.d.ts +3 -0
  15. package/dist/components/EntityPreview.d.ts +8 -6
  16. package/dist/components/HomePage/DefaultHomePage.d.ts +2 -15
  17. package/dist/components/HomePage/HomePageDnD.d.ts +76 -0
  18. package/dist/components/HomePage/NavigationCard.d.ts +3 -1
  19. package/dist/components/HomePage/NavigationCardBinding.d.ts +3 -2
  20. package/dist/components/HomePage/NavigationGroup.d.ts +8 -1
  21. package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
  22. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  23. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  24. package/dist/components/SelectableTable/SelectableTable.d.ts +13 -3
  25. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +1 -1
  26. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  27. package/dist/components/UserDisplay.d.ts +7 -0
  28. package/dist/components/VirtualTable/VirtualTableProps.d.ts +11 -2
  29. package/dist/components/VirtualTable/fields/VirtualTableUserSelect.d.ts +12 -0
  30. package/dist/components/common/default_entity_actions.d.ts +0 -2
  31. package/dist/components/common/index.d.ts +1 -1
  32. package/dist/components/common/useColumnsIds.d.ts +1 -0
  33. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +10 -2
  34. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  35. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  36. package/dist/components/index.d.ts +3 -1
  37. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  38. package/dist/contexts/InternalUserManagementContext.d.ts +3 -0
  39. package/dist/core/DefaultAppBar.d.ts +8 -2
  40. package/dist/core/DrawerNavigationItem.d.ts +2 -1
  41. package/dist/core/EntityEditView.d.ts +40 -22
  42. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  43. package/dist/core/FireCMS.d.ts +2 -3
  44. package/dist/core/FireCMSRouter.d.ts +4 -0
  45. package/dist/core/NavigationRoutes.d.ts +0 -1
  46. package/dist/core/SideDialogs.d.ts +4 -2
  47. package/dist/core/field_configs.d.ts +1 -1
  48. package/dist/core/index.d.ts +2 -1
  49. package/dist/form/EntityForm.d.ts +50 -0
  50. package/dist/form/EntityFormActions.d.ts +21 -0
  51. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  52. package/dist/form/components/FormEntry.d.ts +6 -0
  53. package/dist/form/components/FormLayout.d.ts +5 -0
  54. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  55. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  56. package/dist/form/components/index.d.ts +3 -1
  57. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  58. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  59. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  60. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  61. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  62. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  63. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  64. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  65. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +9 -0
  66. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  67. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  68. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  69. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +4 -10
  70. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  71. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  72. package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +12 -0
  73. package/dist/form/index.d.ts +17 -16
  74. package/dist/form/useClearRestoreValue.d.ts +2 -2
  75. package/dist/hooks/data/delete.d.ts +4 -4
  76. package/dist/hooks/data/save.d.ts +3 -3
  77. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  78. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  79. package/dist/hooks/index.d.ts +2 -0
  80. package/dist/hooks/useAuthController.d.ts +1 -1
  81. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  82. package/dist/hooks/useBuildNavigationController.d.ts +57 -12
  83. package/dist/hooks/useCollapsedGroups.d.ts +9 -0
  84. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  85. package/dist/hooks/useInternalUserManagementController.d.ts +12 -0
  86. package/dist/hooks/useModeController.d.ts +1 -2
  87. package/dist/hooks/useProjectLog.d.ts +7 -1
  88. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  89. package/dist/hooks/useValidateAuthenticator.d.ts +3 -3
  90. package/dist/index.es.js +20480 -14434
  91. package/dist/index.es.js.map +1 -1
  92. package/dist/index.umd.js +20250 -14209
  93. package/dist/index.umd.js.map +1 -1
  94. package/dist/internal/useBuildDataSource.d.ts +3 -2
  95. package/dist/internal/useBuildSideEntityController.d.ts +3 -3
  96. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  97. package/dist/preview/PropertyPreviewProps.d.ts +1 -1
  98. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  99. package/dist/preview/components/ReferencePreview.d.ts +2 -2
  100. package/dist/preview/components/UserPreview.d.ts +8 -0
  101. package/dist/preview/index.d.ts +1 -0
  102. package/dist/preview/util.d.ts +3 -3
  103. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  104. package/dist/routes/FireCMSRoute.d.ts +1 -0
  105. package/dist/routes/HomePageRoute.d.ts +3 -0
  106. package/dist/types/analytics.d.ts +1 -1
  107. package/dist/types/auth.d.ts +7 -9
  108. package/dist/types/collections.d.ts +88 -25
  109. package/dist/types/customization_controller.d.ts +8 -0
  110. package/dist/types/datasource.d.ts +19 -17
  111. package/dist/types/dialogs_controller.d.ts +7 -3
  112. package/dist/types/entities.d.ts +7 -2
  113. package/dist/types/entity_actions.d.ts +58 -8
  114. package/dist/types/entity_callbacks.d.ts +16 -16
  115. package/dist/types/entity_overrides.d.ts +2 -2
  116. package/dist/types/export_import.d.ts +4 -4
  117. package/dist/types/fields.d.ts +43 -17
  118. package/dist/types/firecms.d.ts +31 -3
  119. package/dist/types/firecms_context.d.ts +17 -1
  120. package/dist/types/index.d.ts +1 -0
  121. package/dist/types/internal_user_management.d.ts +20 -0
  122. package/dist/types/navigation.d.ts +60 -17
  123. package/dist/types/permissions.d.ts +4 -4
  124. package/dist/types/plugins.d.ts +44 -9
  125. package/dist/types/properties.d.ts +74 -22
  126. package/dist/types/property_config.d.ts +1 -3
  127. package/dist/types/roles.d.ts +3 -0
  128. package/dist/types/side_dialogs_controller.d.ts +10 -0
  129. package/dist/types/side_entity_controller.d.ts +14 -1
  130. package/dist/types/storage.d.ts +75 -0
  131. package/dist/types/user.d.ts +2 -1
  132. package/dist/util/builders.d.ts +3 -3
  133. package/dist/util/callbacks.d.ts +2 -0
  134. package/dist/util/createFormexStub.d.ts +2 -0
  135. package/dist/util/entities.d.ts +2 -2
  136. package/dist/util/entity_actions.d.ts +2 -0
  137. package/dist/util/entity_cache.d.ts +23 -0
  138. package/dist/util/icon_synonyms.d.ts +0 -1
  139. package/dist/util/icons.d.ts +5 -2
  140. package/dist/util/index.d.ts +3 -0
  141. package/dist/util/navigation_from_path.d.ts +10 -1
  142. package/dist/util/navigation_utils.d.ts +13 -1
  143. package/dist/util/objects.d.ts +2 -1
  144. package/dist/util/permissions.d.ts +4 -4
  145. package/dist/util/property_utils.d.ts +4 -4
  146. package/dist/util/references.d.ts +2 -2
  147. package/dist/util/resolutions.d.ts +30 -6
  148. package/dist/util/storage.d.ts +1 -1
  149. package/dist/util/useStorageUploadController.d.ts +2 -2
  150. package/package.json +133 -125
  151. package/src/app/Drawer.tsx +0 -1
  152. package/src/app/Scaffold.tsx +33 -29
  153. package/src/components/ArrayContainer.tsx +447 -229
  154. package/src/components/CircularProgressCenter.tsx +1 -1
  155. package/src/components/ClearFilterSortButton.tsx +1 -1
  156. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +12 -11
  157. package/src/components/DeleteEntityDialog.tsx +13 -20
  158. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +59 -25
  159. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +23 -17
  160. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +20 -3
  161. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -9
  162. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +21 -16
  163. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +6 -12
  164. package/src/components/EntityCollectionTable/index.tsx +1 -1
  165. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +6 -6
  166. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +35 -26
  167. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  168. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +132 -101
  169. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
  170. package/src/components/EntityCollectionView/EntityCollectionView.tsx +178 -85
  171. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +7 -4
  172. package/src/components/EntityCollectionView/useSelectionController.tsx +5 -4
  173. package/src/components/EntityCollectionView/utils.ts +19 -0
  174. package/src/components/EntityJsonPreview.tsx +66 -0
  175. package/src/components/EntityPreview.tsx +75 -57
  176. package/src/components/EntityView.tsx +8 -5
  177. package/src/components/ErrorView.tsx +3 -3
  178. package/src/components/FireCMSLogo.tsx +7 -51
  179. package/src/components/HomePage/DefaultHomePage.tsx +506 -161
  180. package/src/components/HomePage/FavouritesView.tsx +9 -14
  181. package/src/components/HomePage/HomePageDnD.tsx +600 -0
  182. package/src/components/HomePage/NavigationCard.tsx +47 -38
  183. package/src/components/HomePage/NavigationCardBinding.tsx +16 -15
  184. package/src/components/HomePage/NavigationGroup.tsx +144 -30
  185. package/src/components/HomePage/RenameGroupDialog.tsx +123 -0
  186. package/src/components/HomePage/SmallNavigationCard.tsx +1 -2
  187. package/src/components/NotFoundPage.tsx +2 -2
  188. package/src/components/PropertyConfigBadge.tsx +10 -4
  189. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  190. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +22 -13
  191. package/src/components/SearchIconsView.tsx +2 -2
  192. package/src/components/SelectableTable/SelectableTable.tsx +154 -142
  193. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +4 -2
  194. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +10 -8
  195. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +60 -11
  196. package/src/components/UnsavedChangesDialog.tsx +46 -0
  197. package/src/components/UserDisplay.tsx +55 -0
  198. package/src/components/VirtualTable/VirtualTable.tsx +65 -44
  199. package/src/components/VirtualTable/VirtualTableCell.tsx +0 -8
  200. package/src/components/VirtualTable/VirtualTableHeader.tsx +8 -8
  201. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +1 -1
  202. package/src/components/VirtualTable/VirtualTableProps.tsx +12 -2
  203. package/src/components/VirtualTable/VirtualTableRow.tsx +1 -1
  204. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
  205. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -2
  206. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  207. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  208. package/src/components/VirtualTable/fields/VirtualTableUserSelect.tsx +99 -0
  209. package/src/components/common/default_entity_actions.tsx +62 -42
  210. package/src/components/common/index.ts +1 -1
  211. package/src/components/common/useColumnsIds.tsx +2 -9
  212. package/src/components/common/useDataSourceTableController.tsx +420 -0
  213. package/src/components/common/useDebouncedCallback.tsx +20 -0
  214. package/src/components/common/useScrollRestoration.tsx +68 -0
  215. package/src/components/common/useTableSearchHelper.ts +1 -0
  216. package/src/components/index.tsx +4 -1
  217. package/src/contexts/BreacrumbsContext.tsx +38 -0
  218. package/src/contexts/DialogsProvider.tsx +3 -2
  219. package/src/contexts/InternalUserManagementContext.tsx +4 -0
  220. package/src/contexts/ModeController.tsx +1 -3
  221. package/src/contexts/SnackbarProvider.tsx +2 -0
  222. package/src/core/DefaultAppBar.tsx +124 -85
  223. package/src/core/DefaultDrawer.tsx +30 -22
  224. package/src/core/DrawerNavigationItem.tsx +32 -28
  225. package/src/core/EntityEditView.tsx +388 -995
  226. package/src/core/EntityEditViewFormActions.tsx +329 -0
  227. package/src/core/EntitySidePanel.tsx +88 -20
  228. package/src/core/FireCMS.tsx +58 -28
  229. package/src/core/FireCMSRouter.tsx +17 -0
  230. package/src/core/NavigationRoutes.tsx +23 -32
  231. package/src/core/SideDialogs.tsx +22 -12
  232. package/src/core/field_configs.tsx +39 -11
  233. package/src/core/index.tsx +4 -2
  234. package/src/form/EntityForm.tsx +814 -0
  235. package/src/form/EntityFormActions.tsx +211 -0
  236. package/src/form/PropertyFieldBinding.tsx +59 -41
  237. package/src/form/components/CustomIdField.tsx +9 -3
  238. package/src/form/components/FieldHelperText.tsx +1 -1
  239. package/src/form/components/FormEntry.tsx +22 -0
  240. package/src/form/components/FormLayout.tsx +16 -0
  241. package/src/form/components/LabelWithIcon.tsx +30 -19
  242. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  243. package/src/form/components/StorageItemPreview.tsx +5 -4
  244. package/src/form/components/StorageUploadProgress.tsx +2 -3
  245. package/src/form/components/index.tsx +3 -1
  246. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +30 -18
  247. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +47 -36
  248. package/src/form/field_bindings/BlockFieldBinding.tsx +55 -33
  249. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  250. package/src/form/field_bindings/KeyValueFieldBinding.tsx +19 -15
  251. package/src/form/field_bindings/MapFieldBinding.tsx +72 -62
  252. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +159 -0
  253. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
  254. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +10 -8
  255. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
  256. package/src/form/field_bindings/ReferenceFieldBinding.tsx +28 -19
  257. package/src/form/field_bindings/RepeatFieldBinding.tsx +56 -32
  258. package/src/form/field_bindings/SelectFieldBinding.tsx +22 -13
  259. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +247 -168
  260. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  261. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  262. package/src/form/field_bindings/UserSelectFieldBinding.tsx +94 -0
  263. package/src/form/index.tsx +17 -37
  264. package/src/form/useClearRestoreValue.tsx +2 -2
  265. package/src/form/validation.ts +12 -6
  266. package/src/hooks/data/delete.ts +6 -5
  267. package/src/hooks/data/save.ts +26 -35
  268. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  269. package/src/hooks/data/useDataSource.tsx +10 -2
  270. package/src/hooks/data/useEntityFetch.tsx +10 -6
  271. package/src/hooks/index.tsx +3 -0
  272. package/src/hooks/useAuthController.tsx +1 -1
  273. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  274. package/src/hooks/useBrowserTitleAndIcon.tsx +1 -1
  275. package/src/hooks/useBuildModeController.tsx +15 -28
  276. package/src/hooks/useBuildNavigationController.tsx +386 -124
  277. package/src/hooks/useCollapsedGroups.ts +64 -0
  278. package/src/hooks/useFireCMSContext.tsx +9 -35
  279. package/src/hooks/useInternalUserManagementController.tsx +16 -0
  280. package/src/hooks/useLargeLayout.tsx +0 -35
  281. package/src/hooks/useModeController.tsx +1 -2
  282. package/src/hooks/useProjectLog.tsx +16 -5
  283. package/src/hooks/useResolvedNavigationFrom.tsx +9 -11
  284. package/src/hooks/useValidateAuthenticator.tsx +3 -3
  285. package/src/internal/useBuildDataSource.ts +67 -80
  286. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  287. package/src/internal/useBuildSideEntityController.tsx +149 -86
  288. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  289. package/src/preview/PropertyPreview.tsx +36 -12
  290. package/src/preview/PropertyPreviewProps.tsx +1 -1
  291. package/src/preview/components/BooleanPreview.tsx +1 -1
  292. package/src/preview/components/EmptyValue.tsx +1 -1
  293. package/src/preview/components/EnumValuesChip.tsx +1 -1
  294. package/src/preview/components/ImagePreview.tsx +10 -9
  295. package/src/preview/components/ReferencePreview.tsx +10 -18
  296. package/src/preview/components/UrlComponentPreview.tsx +20 -21
  297. package/src/preview/components/UserPreview.tsx +27 -0
  298. package/src/preview/index.ts +1 -0
  299. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -5
  300. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +5 -4
  301. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -3
  302. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -3
  303. package/src/preview/property_previews/ArrayOneOfPreview.tsx +6 -4
  304. package/src/preview/property_previews/ArrayPropertyPreview.tsx +6 -4
  305. package/src/preview/property_previews/MapPropertyPreview.tsx +7 -6
  306. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
  307. package/src/preview/property_previews/StringPropertyPreview.tsx +2 -2
  308. package/src/preview/util.ts +10 -10
  309. package/src/routes/CustomCMSRoute.tsx +21 -0
  310. package/src/routes/FireCMSRoute.tsx +246 -0
  311. package/src/routes/HomePageRoute.tsx +17 -0
  312. package/src/types/analytics.ts +3 -0
  313. package/src/types/auth.tsx +8 -12
  314. package/src/types/collections.ts +103 -28
  315. package/src/types/customization_controller.tsx +9 -0
  316. package/src/types/datasource.ts +21 -20
  317. package/src/types/dialogs_controller.tsx +7 -3
  318. package/src/types/entities.ts +10 -2
  319. package/src/types/entity_actions.tsx +71 -8
  320. package/src/types/entity_callbacks.ts +18 -18
  321. package/src/types/entity_overrides.tsx +2 -2
  322. package/src/types/export_import.ts +4 -4
  323. package/src/types/fields.tsx +52 -19
  324. package/src/types/firecms.tsx +34 -4
  325. package/src/types/firecms_context.tsx +18 -1
  326. package/src/types/index.ts +1 -0
  327. package/src/types/internal_user_management.ts +24 -0
  328. package/src/types/navigation.ts +76 -22
  329. package/src/types/permissions.ts +5 -5
  330. package/src/types/plugins.tsx +53 -9
  331. package/src/types/properties.ts +84 -22
  332. package/src/types/property_config.tsx +2 -2
  333. package/src/types/roles.ts +3 -0
  334. package/src/types/side_dialogs_controller.tsx +15 -0
  335. package/src/types/side_entity_controller.tsx +16 -1
  336. package/src/types/storage.ts +82 -0
  337. package/src/types/user.ts +3 -1
  338. package/src/util/builders.ts +10 -8
  339. package/src/util/callbacks.ts +119 -0
  340. package/src/util/createFormexStub.tsx +62 -0
  341. package/src/util/entities.ts +6 -4
  342. package/src/util/entity_actions.ts +28 -0
  343. package/src/util/entity_cache.ts +204 -0
  344. package/src/util/icon_list.ts +1 -1
  345. package/src/util/icon_synonyms.ts +0 -1
  346. package/src/util/icons.tsx +36 -11
  347. package/src/util/index.ts +3 -0
  348. package/src/util/join_collections.ts +9 -2
  349. package/src/util/make_properties_editable.ts +13 -5
  350. package/src/util/navigation_from_path.ts +33 -12
  351. package/src/util/navigation_utils.ts +135 -19
  352. package/src/util/objects.ts +74 -14
  353. package/src/util/parent_references_from_path.ts +3 -3
  354. package/src/util/permissions.ts +8 -8
  355. package/src/util/property_utils.tsx +17 -6
  356. package/src/util/references.ts +19 -8
  357. package/src/util/resolutions.ts +93 -24
  358. package/src/util/storage.ts +6 -2
  359. package/src/util/useStorageUploadController.tsx +74 -29
  360. package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
  361. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  362. package/dist/form/PropertiesForm.d.ts +0 -8
  363. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  364. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  365. package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
  366. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -27
  367. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -236
  368. package/src/form/PropertiesForm.tsx +0 -81
  369. package/src/form/components/FormikArrayContainer.tsx +0 -44
  370. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  371. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -1,11 +1,12 @@
1
- import { DataSource, DataSourceDelegate, NavigationController, PropertyConfig } from "../types";
1
+ import { AuthController, DataSource, DataSourceDelegate, NavigationController, PropertyConfig } from "../types";
2
2
  /**
3
3
  * Use this hook to build a {@link DataSource} based on Firestore
4
4
  * @param firebaseApp
5
5
  * @group Firebase
6
6
  */
7
- export declare function useBuildDataSource({ delegate, propertyConfigs, navigationController }: {
7
+ export declare function useBuildDataSource({ delegate, propertyConfigs, navigationController, authController }: {
8
8
  delegate: DataSourceDelegate;
9
9
  propertyConfigs?: Record<string, PropertyConfig>;
10
10
  navigationController: NavigationController;
11
+ authController: AuthController;
11
12
  }): DataSource;
@@ -1,4 +1,4 @@
1
- import { EntityCollection, EntitySidePanelProps, NavigationController, SideDialogsController, SideEntityController } from "../types";
2
- export declare function getEntityViewWidth(props: EntitySidePanelProps<any>, small: boolean): string;
3
- export declare const useBuildSideEntityController: (navigation: NavigationController, sideDialogsController: SideDialogsController) => SideEntityController;
1
+ import { AuthController, CustomizationController, EntityCollection, EntitySidePanelProps, NavigationController, SideDialogsController, SideEntityController } from "../types";
2
+ export declare function getEntityViewWidth(props: EntitySidePanelProps<any>, small: boolean, customizationController: CustomizationController, authController: AuthController): string;
3
+ export declare const useBuildSideEntityController: (navigation: NavigationController, sideDialogsController: SideDialogsController, authController: AuthController) => SideEntityController;
4
4
  export declare function buildSidePanelsFromUrl(path: string, collections: EntityCollection[], newFlag: boolean): EntitySidePanelProps<any>[];
@@ -1,14 +1,12 @@
1
- import React from "react";
1
+ /**
2
+ * Custom hook to handle navigation blocking when there are unsaved changes.
3
+ *
4
+ * @param when - Indicates whether to block navigation.
5
+ * @param onSuccess - Callback invoked when navigation is confirmed.
6
+ * @returns An object containing the state of navigation blocking and handlers.
7
+ */
2
8
  export declare function useNavigationUnsavedChangesDialog(when: boolean, onSuccess: () => void): {
3
9
  navigationWasBlocked: boolean;
4
10
  handleCancel: () => void;
5
11
  handleOk: () => void;
6
12
  };
7
- export interface UnsavedChangesDialogProps {
8
- open: boolean;
9
- body?: React.ReactNode;
10
- title?: string;
11
- handleOk: () => void;
12
- handleCancel: () => void;
13
- }
14
- export declare function UnsavedChangesDialog({ open, handleOk, handleCancel, body, title }: UnsavedChangesDialogProps): import("react/jsx-runtime").JSX.Element;
@@ -2,7 +2,7 @@ import { CMSType, Property, ResolvedProperty } from "../types";
2
2
  /**
3
3
  * @group Preview components
4
4
  */
5
- export type PreviewSize = "medium" | "small" | "tiny";
5
+ export type PreviewSize = "small" | "medium" | "large";
6
6
  /**
7
7
  * @group Preview components
8
8
  */
@@ -3,7 +3,7 @@ import { EnumValues } from "../../types";
3
3
  export interface EnumValuesChipProps {
4
4
  enumValues?: EnumValues;
5
5
  enumKey: string | number;
6
- size: "tiny" | "small" | "medium";
6
+ size: "small" | "medium" | "large";
7
7
  className?: string;
8
8
  children?: React.ReactNode;
9
9
  }
@@ -4,7 +4,7 @@ import { PreviewSize } from "../PropertyPreviewProps";
4
4
  export type ReferencePreviewProps = {
5
5
  disabled?: boolean;
6
6
  reference: EntityReference;
7
- size: PreviewSize;
7
+ size?: PreviewSize;
8
8
  previewProperties?: string[];
9
9
  onClick?: (e: React.SyntheticEvent) => void;
10
10
  hover?: boolean;
@@ -14,4 +14,4 @@ export type ReferencePreviewProps = {
14
14
  /**
15
15
  * @group Preview components
16
16
  */
17
- export declare const ReferencePreview: React.FunctionComponent<ReferencePreviewProps>;
17
+ export declare const ReferencePreview: (props: ReferencePreviewProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ import { PropertyPreviewProps } from "../PropertyPreviewProps";
2
+ /**
3
+ * Preview component for displaying user information.
4
+ * This is a simple wrapper around UserDisplay.
5
+ *
6
+ * @group Preview components
7
+ */
8
+ export declare function UserPreview({ value }: PropertyPreviewProps<string>): import("react/jsx-runtime").JSX.Element;
@@ -21,3 +21,4 @@ export * from "./components/EnumValuesChip";
21
21
  export * from "./components/EmptyValue";
22
22
  export * from "./components/ImagePreview";
23
23
  export * from "./components/ReferencePreview";
24
+ export * from "./components/UserPreview";
@@ -1,7 +1,7 @@
1
1
  import { CollectionSize } from "../types";
2
2
  import { PreviewSize } from "./PropertyPreviewProps";
3
- export declare const TINY_THUMBNAIL = 40;
4
- export declare const SMALL_THUMBNAIL = 100;
5
- export declare const REGULAR_THUMBNAIL = 200;
3
+ export declare const SMALL_THUMBNAIL = 40;
4
+ export declare const MEDIUM_THUMBNAIL = 100;
5
+ export declare const LARGE_THUMBNAIL = 200;
6
6
  export declare function getThumbnailMeasure(size: PreviewSize): number;
7
7
  export declare function getPreviewSizeFrom(size: CollectionSize): PreviewSize;
@@ -0,0 +1,4 @@
1
+ import { CMSView } from "../types";
2
+ export declare function CustomCMSRoute({ cmsView }: {
3
+ cmsView: CMSView;
4
+ }): import("react").ReactNode;
@@ -0,0 +1 @@
1
+ export declare function FireCMSRoute(): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,3 @@
1
+ export declare function HomePageRoute({ children }: {
2
+ children: React.ReactNode;
3
+ }): import("react").ReactNode;
@@ -1 +1 @@
1
- export type CMSAnalyticsEvent = "entity_click" | "entity_click_from_reference" | "reference_selection_clear" | "reference_selection_toggle" | "reference_selected_single" | "reference_selection_new_entity" | "edit_entity_clicked" | "entity_edited" | "new_entity_click" | "new_entity_saved" | "copy_entity_click" | "entity_copied" | "single_delete_dialog_open" | "multiple_delete_dialog_open" | "single_entity_deleted" | "multiple_entities_deleted" | "drawer_navigate_to_home" | "drawer_navigate_to_collection" | "drawer_navigate_to_view" | "home_navigate_to_collection" | "home_favorite_navigate_to_collection" | "home_navigate_to_view" | "home_navigate_to_admin_view" | "home_favorite_navigate_to_view" | "collection_inline_editing" | "unmapped_event";
1
+ export type CMSAnalyticsEvent = "entity_click" | "entity_click_from_reference" | "reference_selection_clear" | "reference_selection_toggle" | "reference_selected_single" | "reference_selection_new_entity" | "edit_entity_clicked" | "entity_edited" | "new_entity_click" | "new_entity_saved" | "copy_entity_click" | "entity_copied" | "single_delete_dialog_open" | "multiple_delete_dialog_open" | "single_entity_deleted" | "multiple_entities_deleted" | "drawer_navigate_to_home" | "drawer_navigate_to_collection" | "drawer_navigate_to_view" | "home_navigate_to_collection" | "home_favorite_navigate_to_collection" | "home_navigate_to_view" | "home_navigate_to_admin_view" | "home_favorite_navigate_to_view" | "home_move_card" | "home_move_group" | "home_drop_new_group" | "collection_inline_editing" | "unmapped_event";
@@ -8,16 +8,12 @@ import { StorageSource } from "./storage";
8
8
  * to do it as the result of a hook.
9
9
  * @group Hooks and utilities
10
10
  */
11
- export type AuthController<UserType extends User = any, ExtraData = any> = {
11
+ export type AuthController<USER extends User = any, ExtraData = any> = {
12
12
  /**
13
13
  * The user currently logged in
14
14
  * The values can be: the user object, null if they skipped login
15
15
  */
16
- user: UserType | null;
17
- /**
18
- * Roles related to the logged user
19
- */
20
- roles?: Role[];
16
+ user: USER | null;
21
17
  /**
22
18
  * Initial loading flag. It is used not to display the login screen
23
19
  * when the app first loads, and it has not been checked whether the user
@@ -51,20 +47,22 @@ export type AuthController<UserType extends User = any, ExtraData = any> = {
51
47
  loginSkipped: boolean;
52
48
  extra: ExtraData;
53
49
  setExtra: (extra: ExtraData) => void;
50
+ setUser?: (user: USER | null) => void;
51
+ setUserRoles?: (roles: Role[]) => void;
54
52
  };
55
53
  /**
56
54
  * Implement this function to allow access to specific users.
57
55
  * @group Hooks and utilities
58
56
  */
59
- export type Authenticator<UserType extends User = User, Controller extends AuthController<UserType> = AuthController<UserType>> = (props: {
57
+ export type Authenticator<USER extends User = User> = (props: {
60
58
  /**
61
59
  * Logged-in user or null
62
60
  */
63
- user: UserType | null;
61
+ user: USER | null;
64
62
  /**
65
63
  * AuthController
66
64
  */
67
- authController: Controller;
65
+ authController: AuthController<USER>;
68
66
  /**
69
67
  * Connector to your database, e.g. your Firestore database
70
68
  */
@@ -16,7 +16,7 @@ import { EntityOverrides } from "./entity_overrides";
16
16
  *
17
17
  * @group Models
18
18
  */
19
- export interface EntityCollection<M extends Record<string, any> = any, UserType extends User = any> {
19
+ export interface EntityCollection<M extends Record<string, any> = any, USER extends User = any> {
20
20
  /**
21
21
  * You can set an alias that will be used internally instead of the `path`.
22
22
  * The `alias` value will be used to determine the URL of the collection,
@@ -44,6 +44,11 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
44
44
  * This path also determines the URL in FireCMS, unless an alias is specified
45
45
  */
46
46
  path: string;
47
+ /**
48
+ * Optional database id of this collection. If not specified, the default
49
+ * database id will be used.
50
+ */
51
+ databaseId?: string;
47
52
  /**
48
53
  * If this collection is a top level navigation entry, you can set this
49
54
  * property to `true` to indicate that this collection is a collection group.
@@ -53,19 +58,29 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
53
58
  * Icon key to use in this collection.
54
59
  * You can use any of the icons in the Material specs:
55
60
  * https://fonts.google.com/icons
56
- * e.g. 'account_tree' or 'person'
61
+ * e.g. 'account_tree' or 'person'.
62
+ * Find all the icons in https://firecms.co/docs/icons
63
+ * You can also pass a React node if you want to render a custom icon.
64
+ * If not specified, a default icon will be used.
57
65
  */
58
- icon?: string;
66
+ icon?: string | React.ReactNode;
59
67
  /**
60
68
  * Optional field used to group top level navigation entries under a~
61
69
  * navigation view. If you set this value in a subcollection it has no
62
70
  * effect.
71
+ * @deprecated This prop is deprecated and will be removed in the future.
72
+ * You can apply grouping by using the `navigationGroupMappings` prop in the
73
+ * {@link useBuildNavigationController} hook instead.
63
74
  */
64
75
  group?: string;
65
76
  /**
66
77
  * Set of properties that compose an entity
67
78
  */
68
79
  properties: PropertiesOrBuilders<M>;
80
+ /**
81
+ * Default preview properties displayed when this collection is referenced to.
82
+ */
83
+ previewProperties?: string[];
69
84
  /**
70
85
  * Title property of the entity. This is the property that will be used
71
86
  * as the title in entity related views and references.
@@ -73,11 +88,10 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
73
88
  */
74
89
  titleProperty?: keyof M;
75
90
  /**
76
- * Can this collection be edited by the end user.
77
- * Defaults to `true`.
78
- * Keep in mind that you can also set this prop to individual properties.
91
+ * When editing an entity, you can choose to open the entity in a side dialog
92
+ * or in a full screen dialog. Defaults to `full_screen`.
79
93
  */
80
- editable?: boolean;
94
+ openEntityMode?: "side_panel" | "full_screen";
81
95
  /**
82
96
  * Order in which the properties are displayed.
83
97
  * If you are specifying your collection as code, the order is the same as the
@@ -88,7 +102,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
88
102
  * `hidden` in the property definition, will be ignored.
89
103
  * `propertiesOrder` has precedence over `hidden`.
90
104
  * - For properties use the property key.
91
- * - For additional columns use the column id.
105
+ * - For additional fields use the field key.
92
106
  * - If you have subcollections, you get a column for each subcollection,
93
107
  * with the path (or alias) as the subcollection, prefixed with
94
108
  * `subcollection:`. e.g. `subcollection:orders`.
@@ -99,10 +113,11 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
99
113
  * `hidden` in the property definition,will be ignored.
100
114
  * `propertiesOrder` has precedence over `hidden`.
101
115
  */
102
- propertiesOrder?: (Extract<keyof M, string> | `subcollection:${string}`)[];
116
+ propertiesOrder?: (Extract<keyof M, string> | string | `subcollection:${string}` | "collectionGroupParent")[];
103
117
  /**
104
118
  * If enabled, content is loaded in batches. If `false` all entities in the
105
- * collection are loaded.
119
+ * collection are loaded. This means that when reaching the end of the
120
+ * collection, the CMS will load more entities.
106
121
  * You can specify a number to specify the pagination size (50 by default)
107
122
  * Defaults to `true`
108
123
  */
@@ -116,7 +131,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
116
131
  * Permissions the logged-in user can perform on this collection.
117
132
  * If not specified everything defaults to `true`.
118
133
  */
119
- permissions?: Permissions | PermissionsBuilder<EntityCollection, UserType, M>;
134
+ permissions?: Permissions | PermissionsBuilder<EntityCollection, USER, M>;
120
135
  /**
121
136
  * Are the entities in this collection selectable. Defaults to `true`
122
137
  */
@@ -132,7 +147,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
132
147
  * is being created, updated or deleted.
133
148
  * Useful for adding your own logic or blocking the execution of the operation.
134
149
  */
135
- callbacks?: EntityCallbacks<M, UserType>;
150
+ callbacks?: EntityCallbacks<M, USER>;
136
151
  /**
137
152
  * Builder for rendering additional components such as buttons in the
138
153
  * collection toolbar
@@ -160,8 +175,11 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
160
175
  * }
161
176
  * }
162
177
  * ```
178
+ *
179
+ * You can also pass the action as a string that represents the `key`, in which case it will
180
+ * use the action defined in the main configuration under `entityActions`.
163
181
  */
164
- entityActions?: EntityAction<M, UserType>[];
182
+ entityActions?: (EntityAction<M, USER> | string)[];
165
183
  /**
166
184
  * Pass your own selection controller if you want to control selected
167
185
  * entities externally.
@@ -180,12 +198,14 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
180
198
  * Force a filter in this view. If applied, the rest of the filters will
181
199
  * be disabled. Filters applied with this prop cannot be changed.
182
200
  * e.g. `forceFilter: { age: [">=", 18] }`
201
+ * e.g. `forceFilter: { related_user: ["==", new EntityReference("sdc43dsw2", "users")] }`
183
202
  */
184
203
  forceFilter?: FilterValues<Extract<keyof M, string>>;
185
204
  /**
186
205
  * Initial filters applied to the collection this collection is related to.
187
206
  * Defaults to none. Filters applied with this prop can be changed.
188
207
  * e.g. `initialFilter: { age: [">=", 18] }`
208
+ * e.g. `initialFilter: { related_user: ["==", new EntityReference("sdc43dsw2", "users")] }`
189
209
  */
190
210
  initialFilter?: FilterValues<Extract<keyof M, string>>;
191
211
  /**
@@ -206,7 +226,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
206
226
  * You can add additional fields to the collection view by implementing
207
227
  * an additional field delegate.
208
228
  */
209
- additionalFields?: AdditionalFieldDelegate<M, UserType>[];
229
+ additionalFields?: AdditionalFieldDelegate<M, USER>[];
210
230
  /**
211
231
  * Default size of the rendered collection
212
232
  */
@@ -251,7 +271,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
251
271
  /**
252
272
  *
253
273
  */
254
- exportable?: boolean | ExportConfig<UserType>;
274
+ exportable?: boolean | ExportConfig<USER>;
255
275
  /**
256
276
  * User id of the owner of this collection. This is used only by plugins, or if you
257
277
  * are writing custom code
@@ -265,6 +285,28 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
265
285
  * Width of the side dialog (in pixels) when opening an entity in this collection.
266
286
  */
267
287
  sideDialogWidth?: number | string;
288
+ /**
289
+ * Can this collection configuration be edited by the end user.
290
+ * Defaults to `true`.
291
+ * Keep in mind that you can also set this prop to individual properties.
292
+ * This prop has only effect if you are using the collection editor.
293
+ */
294
+ editable?: boolean;
295
+ /**
296
+ * If set to true, the default values of the properties will be applied
297
+ * to the entity every time the entity is updated (not only when created).
298
+ * Defaults to false.
299
+ */
300
+ alwaysApplyDefaultValues?: boolean;
301
+ /**
302
+ * If set to true, a tab including the JSON representation of the entity will be included.
303
+ */
304
+ includeJsonView?: boolean;
305
+ /**
306
+ * If set to true, changes to the entity will be saved in a subcollection.
307
+ * This prop has no effect if the history plugin is not enabled
308
+ */
309
+ history?: boolean;
268
310
  }
269
311
  /**
270
312
  * Parameter passed to the `Actions` prop in the collection configuration.
@@ -273,7 +315,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
273
315
  *
274
316
  * @group Models
275
317
  */
276
- export interface CollectionActionsProps<M extends Record<string, any> = any, UserType extends User = User, EC extends EntityCollection<M> = EntityCollection<M>> {
318
+ export interface CollectionActionsProps<M extends Record<string, any> = any, USER extends User = User, EC extends EntityCollection<M> = EntityCollection<M>> {
277
319
  /**
278
320
  * Full collection path of this entity. This is the full path, like
279
321
  * `users/1234/addresses`
@@ -304,7 +346,7 @@ export interface CollectionActionsProps<M extends Record<string, any> = any, Use
304
346
  /**
305
347
  * Context of the app status
306
348
  */
307
- context: FireCMSContext<UserType>;
349
+ context: FireCMSContext<USER>;
308
350
  /**
309
351
  * Count of the entities in this collection
310
352
  */
@@ -347,16 +389,16 @@ export type FilterCombination<Key extends string> = Partial<Record<Key, "asc" |
347
389
  * @group Models
348
390
  */
349
391
  export type CollectionSize = "xs" | "s" | "m" | "l" | "xl";
350
- export type AdditionalFieldDelegateProps<M extends Record<string, any> = any, UserType extends User = User> = {
392
+ export type AdditionalFieldDelegateProps<M extends Record<string, any> = any, USER extends User = User> = {
351
393
  entity: Entity<M>;
352
- context: FireCMSContext<UserType>;
394
+ context: FireCMSContext<USER>;
353
395
  };
354
396
  /**
355
397
  * Use this interface for adding additional fields to entity collection views.
356
398
  * If you need to do some async loading you can use {@link AsyncPreviewComponent}
357
399
  * @group Models
358
400
  */
359
- export interface AdditionalFieldDelegate<M extends Record<string, any> = any, UserType extends User = User> {
401
+ export interface AdditionalFieldDelegate<M extends Record<string, any> = any, USER extends User = User> {
360
402
  /**
361
403
  * ID of this column. You can use this id in the `properties` field of the
362
404
  * collection in any order you want
@@ -373,7 +415,7 @@ export interface AdditionalFieldDelegate<M extends Record<string, any> = any, Us
373
415
  /**
374
416
  * Builder for the content of the cell for this column
375
417
  */
376
- Builder?: React.ComponentType<AdditionalFieldDelegateProps<M, UserType>>;
418
+ Builder?: React.ComponentType<AdditionalFieldDelegateProps<M, USER>>;
377
419
  /**
378
420
  * If this column needs to update dynamically based on other properties,
379
421
  * you can define an array of keys as strings with the
@@ -410,14 +452,24 @@ export type EntityCustomView<M extends Record<string, any> = any> = {
410
452
  */
411
453
  name: string;
412
454
  /**
413
- * If set to true, the actions of the entity will be included in the
414
- * bottom of the panel (save buttons, delete buttons, etc.)
455
+ * Render this custom view in the tab of the entity view, instead of the name
415
456
  */
416
- includeActions?: boolean;
457
+ tabComponent?: React.ReactNode;
458
+ /**
459
+ * If set to true, the actions of the entity (save, discard,delete) will be
460
+ * included in the view. By default the actions are located in the right or bottom,
461
+ * based on the screen size. You can force the actions to be located at the bottom
462
+ * by setting this prop to "bottom".
463
+ */
464
+ includeActions?: boolean | "bottom";
417
465
  /**
418
466
  * Builder for rendering the custom view
419
467
  */
420
468
  Builder?: React.ComponentType<EntityCustomViewParams<M>>;
469
+ /**
470
+ * Position of this tab in the entity view. Defaults to `end`.
471
+ */
472
+ position?: "start" | "end";
421
473
  };
422
474
  /**
423
475
  * Parameters passed to the builder in charge of rendering a custom panel for
@@ -443,6 +495,10 @@ export interface EntityCustomViewParams<M extends Record<string, any> = any> {
443
495
  * Use the form context to access the form state and methods
444
496
  */
445
497
  formContext: FormContext;
498
+ /**
499
+ * If this is a subcollection, this is the path of the parent collections
500
+ */
501
+ parentCollectionIds?: string[];
446
502
  }
447
503
  export type InferCollectionType<S extends EntityCollection> = S extends EntityCollection<infer M> ? M : never;
448
504
  /**
@@ -475,6 +531,12 @@ export type EntityTableController<M extends Record<string, any> = any> = {
475
531
  clearFilter?: () => void;
476
532
  itemCount?: number;
477
533
  setItemCount?: (itemCount: number) => void;
534
+ initialScroll?: number;
535
+ onScroll?: (props: {
536
+ scrollDirection: "forward" | "backward";
537
+ scrollOffset: number;
538
+ scrollUpdateWasRequested: boolean;
539
+ }) => void;
478
540
  paginationEnabled?: boolean;
479
541
  pageSize?: number;
480
542
  checkFilterCombination?: (filterValues: FilterValues<any>, sortBy?: [string, "asc" | "desc"]) => boolean;
@@ -487,5 +549,6 @@ export type SelectedCellProps<M extends Record<string, any>> = {
487
549
  cellRect: DOMRect;
488
550
  width: number;
489
551
  height: number;
490
- entity: Entity<M>;
552
+ entityPath: string;
553
+ entityId: string;
491
554
  };
@@ -4,6 +4,7 @@ import { FireCMSPlugin } from "./plugins";
4
4
  import { EntityCustomView } from "./collections";
5
5
  import { Locale } from "./locales";
6
6
  import { PropertyConfig } from "./property_config";
7
+ import { EntityAction } from "./entity_actions";
7
8
  export type CustomizationController = {
8
9
  /**
9
10
  * Builder for generating utility links for entities
@@ -21,6 +22,13 @@ export type CustomizationController = {
21
22
  * You can also define an entity view from the UI.
22
23
  */
23
24
  entityViews?: EntityCustomView[];
25
+ /**
26
+ * List of actions that can be performed on entities.
27
+ * These actions are displayed in the entity view and in the collection view.
28
+ * You can later reuse these actions in the `entityActions` prop of a collection,
29
+ * by specifying the `key` of the action.
30
+ */
31
+ entityActions?: EntityAction<any, any>[];
24
32
  /**
25
33
  * Format of the dates in the CMS.
26
34
  * Defaults to 'MMMM dd, yyyy, HH:mm:ss'
@@ -8,6 +8,7 @@ import { FireCMSContext } from "./firecms_context";
8
8
  export interface FetchEntityProps<M extends Record<string, any> = any> {
9
9
  path: string;
10
10
  entityId: string;
11
+ databaseId?: string;
11
12
  collection?: EntityCollection<M, any>;
12
13
  }
13
14
  /**
@@ -53,6 +54,7 @@ export interface SaveEntityProps<M extends Record<string, any> = any> {
53
54
  */
54
55
  export interface DeleteEntityProps<M extends Record<string, any> = any> {
55
56
  entity: Entity<M>;
57
+ collection?: EntityCollection<M> | ResolvedEntityCollection<M>;
56
58
  }
57
59
  /**
58
60
  * Component in charge of communicating with the data source.
@@ -97,7 +99,7 @@ export interface DataSource {
97
99
  * @param entityId
98
100
  * @param collection
99
101
  */
100
- fetchEntity<M extends Record<string, any> = any>({ path, entityId, collection }: FetchEntityProps<M>): Promise<Entity<M> | undefined>;
102
+ fetchEntity<M extends Record<string, any> = any>({ path, entityId, databaseId, collection }: FetchEntityProps<M>): Promise<Entity<M> | undefined>;
101
103
  /**
102
104
  * Get realtime updates on one entity.
103
105
  * @param path
@@ -121,21 +123,21 @@ export interface DataSource {
121
123
  * @param entity
122
124
  * @return was the whole deletion flow successful
123
125
  */
124
- deleteEntity<M extends Record<string, any> = any>({ entity }: DeleteEntityProps<M>): Promise<void>;
126
+ deleteEntity<M extends Record<string, any> = any>({ entity, collection }: DeleteEntityProps<M>): Promise<void>;
125
127
  /**
126
128
  * Check if the given property is unique in the given collection
127
129
  * @param path Collection path
128
130
  * @param name of the property
129
131
  * @param value
130
- * @param property
132
+ * @param collection
131
133
  * @param entityId
132
134
  * @return `true` if there are no other fields besides the given entity
133
135
  */
134
- checkUniqueField(path: string, name: string, value: any, entityId?: string): Promise<boolean>;
136
+ checkUniqueField(path: string, name: string, value: any, entityId?: string, collection?: EntityCollection): Promise<boolean>;
135
137
  /**
136
138
  * Generate an id for a new entity
137
139
  */
138
- generateEntityId(path: string): string;
140
+ generateEntityId(path: string, collection: EntityCollection): string;
139
141
  /**
140
142
  * Count the number of entities in a collection
141
143
  */
@@ -163,13 +165,9 @@ export type FilterCombinationValidProps = {
163
165
  filterValues: FilterValues<any>;
164
166
  sortBy?: [string, "asc" | "desc"];
165
167
  };
166
- export type SaveEntityDelegateProps<M extends Record<string, any> = any> = Omit<SaveEntityProps<M>, "collection">;
167
- export type FetchCollectionDelegateProps<M extends Record<string, any> = any> = Omit<FetchCollectionProps<M>, "collection"> & {
168
- isCollectionGroup?: boolean;
169
- };
170
- export type ListenCollectionDelegateProps<M extends Record<string, any> = any> = ListenCollectionProps<M> & {
171
- isCollectionGroup?: boolean;
172
- };
168
+ export type SaveEntityDelegateProps<M extends Record<string, any> = any> = SaveEntityProps<M>;
169
+ export type FetchCollectionDelegateProps<M extends Record<string, any> = any> = FetchCollectionProps<M>;
170
+ export type ListenCollectionDelegateProps<M extends Record<string, any> = any> = ListenCollectionProps<M>;
173
171
  export interface DataSourceDelegate {
174
172
  /**
175
173
  * Key that identifies this data source delegate
@@ -213,7 +211,7 @@ export interface DataSourceDelegate {
213
211
  * @param path
214
212
  * @param entityId
215
213
  */
216
- fetchEntity<M extends Record<string, any> = any>({ path, entityId, }: Omit<FetchEntityProps<M>, "collection">): Promise<Entity<M> | undefined>;
214
+ fetchEntity<M extends Record<string, any> = any>({ path, entityId, }: FetchEntityProps<M>): Promise<Entity<M> | undefined>;
217
215
  /**
218
216
  * Get realtime updates on one entity.
219
217
  * @param path
@@ -223,7 +221,7 @@ export interface DataSourceDelegate {
223
221
  * @param onError
224
222
  * @return Function to cancel subscription
225
223
  */
226
- listenEntity?<M extends Record<string, any> = any>({ path, entityId, onUpdate, onError }: Omit<ListenEntityProps<M>, "collection">): () => void;
224
+ listenEntity?<M extends Record<string, any> = any>({ path, entityId, onUpdate, onError }: ListenEntityProps<M>): () => void;
227
225
  /**
228
226
  * Save entity to the specified path
229
227
  * @param path
@@ -244,13 +242,14 @@ export interface DataSourceDelegate {
244
242
  * @param name of the property
245
243
  * @param value
246
244
  * @param entityId
245
+ * @param collection
247
246
  * @return `true` if there are no other fields besides the given entity
248
247
  */
249
- checkUniqueField(path: string, name: string, value: any, entityId?: string): Promise<boolean>;
248
+ checkUniqueField(path: string, name: string, value: any, entityId?: string, collection?: EntityCollection): Promise<boolean>;
250
249
  /**
251
250
  * Generate an id for a new entity
252
251
  */
253
- generateEntityId(path: string): string;
252
+ generateEntityId(path: string, collection?: EntityCollection): string;
254
253
  /**
255
254
  * Count the number of entities in a collection
256
255
  */
@@ -259,7 +258,9 @@ export interface DataSourceDelegate {
259
258
  * Check if the given filter combination is valid
260
259
  * @param props
261
260
  */
262
- isFilterCombinationValid?(props: Omit<FilterCombinationValidProps, "collection">): boolean;
261
+ isFilterCombinationValid?(props: Omit<FilterCombinationValidProps, "collection"> & {
262
+ databaseId?: string;
263
+ }): boolean;
263
264
  /**
264
265
  * Get the object to generate the current time in the datasource
265
266
  */
@@ -270,6 +271,7 @@ export interface DataSourceDelegate {
270
271
  initTextSearch?: (props: {
271
272
  context: FireCMSContext;
272
273
  path: string;
274
+ databaseId?: string;
273
275
  collection: EntityCollection;
274
276
  parentCollectionIds?: string[];
275
277
  }) => Promise<boolean>;
@@ -12,7 +12,7 @@ export interface DialogsController {
12
12
  * Open a dialog
13
13
  * @param props
14
14
  */
15
- open: (props: DialogControllerEntryProps) => {
15
+ open: <T extends object = object>(props: DialogControllerEntryProps<T>) => {
16
16
  closeDialog: () => void;
17
17
  };
18
18
  }
@@ -20,7 +20,7 @@ export interface DialogsController {
20
20
  * Props used to open a side dialog
21
21
  * @group Hooks and utilities
22
22
  */
23
- export interface DialogControllerEntryProps {
23
+ export interface DialogControllerEntryProps<T extends object = object> {
24
24
  key: string;
25
25
  /**
26
26
  * The component type that will be rendered
@@ -28,5 +28,9 @@ export interface DialogControllerEntryProps {
28
28
  Component: React.ComponentType<{
29
29
  open: boolean;
30
30
  closeDialog: () => void;
31
- }>;
31
+ } & T>;
32
+ /**
33
+ * Props to pass to the dialog component
34
+ */
35
+ props?: T;
32
36
  }