@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
@@ -17,7 +17,7 @@ import { EntityOverrides } from "./entity_overrides";
17
17
  *
18
18
  * @group Models
19
19
  */
20
- export interface EntityCollection<M extends Record<string, any> = any, UserType extends User = any> {
20
+ export interface EntityCollection<M extends Record<string, any> = any, USER extends User = any> {
21
21
 
22
22
  /**
23
23
  * You can set an alias that will be used internally instead of the `path`.
@@ -51,6 +51,12 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
51
51
  */
52
52
  path: string;
53
53
 
54
+ /**
55
+ * Optional database id of this collection. If not specified, the default
56
+ * database id will be used.
57
+ */
58
+ databaseId?: string;
59
+
54
60
  /**
55
61
  * If this collection is a top level navigation entry, you can set this
56
62
  * property to `true` to indicate that this collection is a collection group.
@@ -61,14 +67,20 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
61
67
  * Icon key to use in this collection.
62
68
  * You can use any of the icons in the Material specs:
63
69
  * https://fonts.google.com/icons
64
- * e.g. 'account_tree' or 'person'
70
+ * e.g. 'account_tree' or 'person'.
71
+ * Find all the icons in https://firecms.co/docs/icons
72
+ * You can also pass a React node if you want to render a custom icon.
73
+ * If not specified, a default icon will be used.
65
74
  */
66
- icon?: string;
75
+ icon?: string | React.ReactNode;
67
76
 
68
77
  /**
69
78
  * Optional field used to group top level navigation entries under a~
70
79
  * navigation view. If you set this value in a subcollection it has no
71
80
  * effect.
81
+ * @deprecated This prop is deprecated and will be removed in the future.
82
+ * You can apply grouping by using the `navigationGroupMappings` prop in the
83
+ * {@link useBuildNavigationController} hook instead.
72
84
  */
73
85
  group?: string;
74
86
 
@@ -77,6 +89,11 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
77
89
  */
78
90
  properties: PropertiesOrBuilders<M>;
79
91
 
92
+ /**
93
+ * Default preview properties displayed when this collection is referenced to.
94
+ */
95
+ previewProperties?: string[];
96
+
80
97
  /**
81
98
  * Title property of the entity. This is the property that will be used
82
99
  * as the title in entity related views and references.
@@ -85,11 +102,10 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
85
102
  titleProperty?: keyof M;
86
103
 
87
104
  /**
88
- * Can this collection be edited by the end user.
89
- * Defaults to `true`.
90
- * Keep in mind that you can also set this prop to individual properties.
105
+ * When editing an entity, you can choose to open the entity in a side dialog
106
+ * or in a full screen dialog. Defaults to `full_screen`.
91
107
  */
92
- editable?: boolean;
108
+ openEntityMode?: "side_panel" | "full_screen";
93
109
 
94
110
  /**
95
111
  * Order in which the properties are displayed.
@@ -101,7 +117,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
101
117
  * `hidden` in the property definition, will be ignored.
102
118
  * `propertiesOrder` has precedence over `hidden`.
103
119
  * - For properties use the property key.
104
- * - For additional columns use the column id.
120
+ * - For additional fields use the field key.
105
121
  * - If you have subcollections, you get a column for each subcollection,
106
122
  * with the path (or alias) as the subcollection, prefixed with
107
123
  * `subcollection:`. e.g. `subcollection:orders`.
@@ -112,11 +128,12 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
112
128
  * `hidden` in the property definition,will be ignored.
113
129
  * `propertiesOrder` has precedence over `hidden`.
114
130
  */
115
- propertiesOrder?: (Extract<keyof M, string> | `subcollection:${string}`)[];
131
+ propertiesOrder?: (Extract<keyof M, string> | string | `subcollection:${string}` | "collectionGroupParent")[];
116
132
 
117
133
  /**
118
134
  * If enabled, content is loaded in batches. If `false` all entities in the
119
- * collection are loaded.
135
+ * collection are loaded. This means that when reaching the end of the
136
+ * collection, the CMS will load more entities.
120
137
  * You can specify a number to specify the pagination size (50 by default)
121
138
  * Defaults to `true`
122
139
  */
@@ -132,7 +149,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
132
149
  * Permissions the logged-in user can perform on this collection.
133
150
  * If not specified everything defaults to `true`.
134
151
  */
135
- permissions?: Permissions | PermissionsBuilder<EntityCollection, UserType, M>;
152
+ permissions?: Permissions | PermissionsBuilder<EntityCollection, USER, M>;
136
153
 
137
154
  /**
138
155
  * Are the entities in this collection selectable. Defaults to `true`
@@ -151,7 +168,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
151
168
  * is being created, updated or deleted.
152
169
  * Useful for adding your own logic or blocking the execution of the operation.
153
170
  */
154
- callbacks?: EntityCallbacks<M, UserType>;
171
+ callbacks?: EntityCallbacks<M, USER>;
155
172
 
156
173
  /**
157
174
  * Builder for rendering additional components such as buttons in the
@@ -181,8 +198,11 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
181
198
  * }
182
199
  * }
183
200
  * ```
201
+ *
202
+ * You can also pass the action as a string that represents the `key`, in which case it will
203
+ * use the action defined in the main configuration under `entityActions`.
184
204
  */
185
- entityActions?: EntityAction<M, UserType>[];
205
+ entityActions?: (EntityAction<M, USER> | string)[];
186
206
 
187
207
  /**
188
208
  * Pass your own selection controller if you want to control selected
@@ -204,6 +224,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
204
224
  * Force a filter in this view. If applied, the rest of the filters will
205
225
  * be disabled. Filters applied with this prop cannot be changed.
206
226
  * e.g. `forceFilter: { age: [">=", 18] }`
227
+ * e.g. `forceFilter: { related_user: ["==", new EntityReference("sdc43dsw2", "users")] }`
207
228
  */
208
229
  forceFilter?: FilterValues<Extract<keyof M, string>>;
209
230
 
@@ -211,6 +232,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
211
232
  * Initial filters applied to the collection this collection is related to.
212
233
  * Defaults to none. Filters applied with this prop can be changed.
213
234
  * e.g. `initialFilter: { age: [">=", 18] }`
235
+ * e.g. `initialFilter: { related_user: ["==", new EntityReference("sdc43dsw2", "users")] }`
214
236
  */
215
237
  initialFilter?: FilterValues<Extract<keyof M, string>>; // setting FilterValues<M> can break defining collections by code
216
238
 
@@ -234,7 +256,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
234
256
  * You can add additional fields to the collection view by implementing
235
257
  * an additional field delegate.
236
258
  */
237
- additionalFields?: AdditionalFieldDelegate<M, UserType>[];
259
+ additionalFields?: AdditionalFieldDelegate<M, USER>[];
238
260
 
239
261
  /**
240
262
  * Default size of the rendered collection
@@ -287,7 +309,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
287
309
  /**
288
310
  *
289
311
  */
290
- exportable?: boolean | ExportConfig<UserType>;
312
+ exportable?: boolean | ExportConfig<USER>;
291
313
 
292
314
  /**
293
315
  * User id of the owner of this collection. This is used only by plugins, or if you
@@ -304,6 +326,32 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
304
326
  * Width of the side dialog (in pixels) when opening an entity in this collection.
305
327
  */
306
328
  sideDialogWidth?: number | string;
329
+
330
+ /**
331
+ * Can this collection configuration be edited by the end user.
332
+ * Defaults to `true`.
333
+ * Keep in mind that you can also set this prop to individual properties.
334
+ * This prop has only effect if you are using the collection editor.
335
+ */
336
+ editable?: boolean;
337
+
338
+ /**
339
+ * If set to true, the default values of the properties will be applied
340
+ * to the entity every time the entity is updated (not only when created).
341
+ * Defaults to false.
342
+ */
343
+ alwaysApplyDefaultValues?: boolean;
344
+
345
+ /**
346
+ * If set to true, a tab including the JSON representation of the entity will be included.
347
+ */
348
+ includeJsonView?: boolean;
349
+
350
+ /**
351
+ * If set to true, changes to the entity will be saved in a subcollection.
352
+ * This prop has no effect if the history plugin is not enabled
353
+ */
354
+ history?: boolean;
307
355
  }
308
356
 
309
357
  /**
@@ -313,7 +361,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
313
361
  *
314
362
  * @group Models
315
363
  */
316
- export interface CollectionActionsProps<M extends Record<string, any> = any, UserType extends User = User, EC extends EntityCollection<M> = EntityCollection<M>> {
364
+ export interface CollectionActionsProps<M extends Record<string, any> = any, USER extends User = User, EC extends EntityCollection<M> = EntityCollection<M>> {
317
365
  /**
318
366
  * Full collection path of this entity. This is the full path, like
319
367
  * `users/1234/addresses`
@@ -350,7 +398,7 @@ export interface CollectionActionsProps<M extends Record<string, any> = any, Use
350
398
  /**
351
399
  * Context of the app status
352
400
  */
353
- context: FireCMSContext<UserType>;
401
+ context: FireCMSContext<USER>;
354
402
 
355
403
  /**
356
404
  * Count of the entities in this collection
@@ -412,9 +460,9 @@ export type FilterCombination<Key extends string> = Partial<Record<Key, "asc" |
412
460
  */
413
461
  export type CollectionSize = "xs" | "s" | "m" | "l" | "xl";
414
462
 
415
- export type AdditionalFieldDelegateProps<M extends Record<string, any> = any, UserType extends User = User> = {
463
+ export type AdditionalFieldDelegateProps<M extends Record<string, any> = any, USER extends User = User> = {
416
464
  entity: Entity<M>,
417
- context: FireCMSContext<UserType>
465
+ context: FireCMSContext<USER>
418
466
  };
419
467
 
420
468
  /**
@@ -423,7 +471,7 @@ export type AdditionalFieldDelegateProps<M extends Record<string, any> = any, Us
423
471
  * @group Models
424
472
  */
425
473
  export interface AdditionalFieldDelegate<M extends Record<string, any> = any,
426
- UserType extends User = User> {
474
+ USER extends User = User> {
427
475
 
428
476
  /**
429
477
  * ID of this column. You can use this id in the `properties` field of the
@@ -444,7 +492,7 @@ export interface AdditionalFieldDelegate<M extends Record<string, any> = any,
444
492
  /**
445
493
  * Builder for the content of the cell for this column
446
494
  */
447
- Builder?: React.ComponentType<AdditionalFieldDelegateProps<M, UserType>>;
495
+ Builder?: React.ComponentType<AdditionalFieldDelegateProps<M, USER>>;
448
496
 
449
497
  /**
450
498
  * If this column needs to update dynamically based on other properties,
@@ -479,21 +527,36 @@ export type EntityCustomView<M extends Record<string, any> = any> =
479
527
  /**
480
528
  * Key of this custom view.
481
529
  */
482
- key: string,
530
+ key: string;
531
+
483
532
  /**
484
533
  * Name of this custom view.
485
534
  */
486
- name: string,
535
+ name: string;
536
+
487
537
  /**
488
- * If set to true, the actions of the entity will be included in the
489
- * bottom of the panel (save buttons, delete buttons, etc.)
538
+ * Render this custom view in the tab of the entity view, instead of the name
490
539
  */
491
- includeActions?: boolean;
540
+ tabComponent?: React.ReactNode;
541
+
542
+ /**
543
+ * If set to true, the actions of the entity (save, discard,delete) will be
544
+ * included in the view. By default the actions are located in the right or bottom,
545
+ * based on the screen size. You can force the actions to be located at the bottom
546
+ * by setting this prop to "bottom".
547
+ */
548
+ includeActions?: boolean | "bottom";
549
+
492
550
  /**
493
551
  * Builder for rendering the custom view
494
552
  */
495
553
  Builder?: React.ComponentType<EntityCustomViewParams<M>>;
496
- }
554
+
555
+ /**
556
+ * Position of this tab in the entity view. Defaults to `end`.
557
+ */
558
+ position?: "start" | "end";
559
+ };
497
560
 
498
561
  /**
499
562
  * Parameters passed to the builder in charge of rendering a custom panel for
@@ -523,6 +586,11 @@ export interface EntityCustomViewParams<M extends Record<string, any> = any> {
523
586
  * Use the form context to access the form state and methods
524
587
  */
525
588
  formContext: FormContext;
589
+
590
+ /**
591
+ * If this is a subcollection, this is the path of the parent collections
592
+ */
593
+ parentCollectionIds?: string[];
526
594
  }
527
595
 
528
596
  export type InferCollectionType<S extends EntityCollection> = S extends EntityCollection<infer M> ? M : never;
@@ -558,6 +626,12 @@ export type EntityTableController<M extends Record<string, any> = any> = {
558
626
  clearFilter?: () => void;
559
627
  itemCount?: number;
560
628
  setItemCount?: (itemCount: number) => void;
629
+ initialScroll?: number;
630
+ onScroll?: (props: {
631
+ scrollDirection: "forward" | "backward",
632
+ scrollOffset: number,
633
+ scrollUpdateWasRequested: boolean
634
+ }) => void;
561
635
  paginationEnabled?: boolean;
562
636
  pageSize?: number;
563
637
  checkFilterCombination?: (filterValues: FilterValues<any>,
@@ -573,5 +647,6 @@ export type SelectedCellProps<M extends Record<string, any>> = {
573
647
  cellRect: DOMRect;
574
648
  width: number;
575
649
  height: number;
576
- entity: Entity<M>;
650
+ entityPath: string;
651
+ entityId: string;
577
652
  };
@@ -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
 
8
9
  export type CustomizationController = {
9
10
 
@@ -26,6 +27,14 @@ export type CustomizationController = {
26
27
  */
27
28
  entityViews?: EntityCustomView[];
28
29
 
30
+ /**
31
+ * List of actions that can be performed on entities.
32
+ * These actions are displayed in the entity view and in the collection view.
33
+ * You can later reuse these actions in the `entityActions` prop of a collection,
34
+ * by specifying the `key` of the action.
35
+ */
36
+ entityActions?: EntityAction<any, any>[];
37
+
29
38
  /**
30
39
  * Format of the dates in the CMS.
31
40
  * Defaults to 'MMMM dd, yyyy, HH:mm:ss'
@@ -9,6 +9,7 @@ import { FireCMSContext } from "./firecms_context";
9
9
  export interface FetchEntityProps<M extends Record<string, any> = any> {
10
10
  path: string;
11
11
  entityId: string;
12
+ databaseId?: string;
12
13
  collection?: EntityCollection<M, any>
13
14
  }
14
15
 
@@ -63,6 +64,7 @@ export interface SaveEntityProps<M extends Record<string, any> = any> {
63
64
  */
64
65
  export interface DeleteEntityProps<M extends Record<string, any> = any> {
65
66
  entity: Entity<M>;
67
+ collection?: EntityCollection<M> | ResolvedEntityCollection<M>;
66
68
  }
67
69
 
68
70
  /**
@@ -137,6 +139,7 @@ export interface DataSource {
137
139
  fetchEntity<M extends Record<string, any> = any>({
138
140
  path,
139
141
  entityId,
142
+ databaseId,
140
143
  collection
141
144
  }: FetchEntityProps<M>
142
145
  ): Promise<Entity<M> | undefined>;
@@ -181,7 +184,8 @@ export interface DataSource {
181
184
  */
182
185
  deleteEntity<M extends Record<string, any> = any>(
183
186
  {
184
- entity
187
+ entity,
188
+ collection
185
189
  }: DeleteEntityProps<M>
186
190
  ): Promise<void>;
187
191
 
@@ -190,7 +194,7 @@ export interface DataSource {
190
194
  * @param path Collection path
191
195
  * @param name of the property
192
196
  * @param value
193
- * @param property
197
+ * @param collection
194
198
  * @param entityId
195
199
  * @return `true` if there are no other fields besides the given entity
196
200
  */
@@ -198,13 +202,14 @@ export interface DataSource {
198
202
  path: string,
199
203
  name: string,
200
204
  value: any,
201
- entityId?: string
205
+ entityId?: string,
206
+ collection?: EntityCollection
202
207
  ): Promise<boolean>;
203
208
 
204
209
  /**
205
210
  * Generate an id for a new entity
206
211
  */
207
- generateEntityId(path: string): string;
212
+ generateEntityId(path: string, collection: EntityCollection): string;
208
213
 
209
214
  /**
210
215
  * Count the number of entities in a collection
@@ -238,19 +243,11 @@ export type FilterCombinationValidProps = {
238
243
  sortBy?: [string, "asc" | "desc"];
239
244
  };
240
245
 
241
- export type SaveEntityDelegateProps<M extends Record<string, any> = any> = Omit<SaveEntityProps<M>, "collection">;
246
+ export type SaveEntityDelegateProps<M extends Record<string, any> = any> = SaveEntityProps<M>;
242
247
 
243
- export type FetchCollectionDelegateProps<M extends Record<string, any> = any> =
244
- Omit<FetchCollectionProps<M>, "collection">
245
- & {
246
- isCollectionGroup?: boolean
247
- };
248
+ export type FetchCollectionDelegateProps<M extends Record<string, any> = any> = FetchCollectionProps<M>;
248
249
 
249
- export type ListenCollectionDelegateProps<M extends Record<string, any> = any> =
250
- ListenCollectionProps<M>
251
- & {
252
- isCollectionGroup?: boolean;
253
- };
250
+ export type ListenCollectionDelegateProps<M extends Record<string, any> = any> = ListenCollectionProps<M>;
254
251
 
255
252
  export interface DataSourceDelegate {
256
253
 
@@ -321,7 +318,7 @@ export interface DataSourceDelegate {
321
318
  fetchEntity<M extends Record<string, any> = any>({
322
319
  path,
323
320
  entityId,
324
- }: Omit<FetchEntityProps<M>, "collection">): Promise<Entity<M> | undefined>;
321
+ }: FetchEntityProps<M>): Promise<Entity<M> | undefined>;
325
322
 
326
323
  /**
327
324
  * Get realtime updates on one entity.
@@ -337,7 +334,7 @@ export interface DataSourceDelegate {
337
334
  entityId,
338
335
  onUpdate,
339
336
  onError
340
- }: Omit<ListenEntityProps<M>, "collection">): () => void;
337
+ }: ListenEntityProps<M>): () => void;
341
338
 
342
339
  /**
343
340
  * Save entity to the specified path
@@ -366,14 +363,15 @@ export interface DataSourceDelegate {
366
363
  * @param name of the property
367
364
  * @param value
368
365
  * @param entityId
366
+ * @param collection
369
367
  * @return `true` if there are no other fields besides the given entity
370
368
  */
371
- checkUniqueField(path: string, name: string, value: any, entityId?: string): Promise<boolean>;
369
+ checkUniqueField(path: string, name: string, value: any, entityId?: string, collection?: EntityCollection): Promise<boolean>;
372
370
 
373
371
  /**
374
372
  * Generate an id for a new entity
375
373
  */
376
- generateEntityId(path: string): string;
374
+ generateEntityId(path: string, collection?: EntityCollection): string;
377
375
 
378
376
  /**
379
377
  * Count the number of entities in a collection
@@ -384,7 +382,9 @@ export interface DataSourceDelegate {
384
382
  * Check if the given filter combination is valid
385
383
  * @param props
386
384
  */
387
- isFilterCombinationValid?(props: Omit<FilterCombinationValidProps, "collection">): boolean;
385
+ isFilterCombinationValid?(props: Omit<FilterCombinationValidProps, "collection"> & {
386
+ databaseId?: string
387
+ }): boolean;
388
388
 
389
389
  /**
390
390
  * Get the object to generate the current time in the datasource
@@ -400,6 +400,7 @@ export interface DataSourceDelegate {
400
400
  initTextSearch?: (props: {
401
401
  context: FireCMSContext,
402
402
  path: string,
403
+ databaseId?: string,
403
404
  collection: EntityCollection,
404
405
  parentCollectionIds?: string[]
405
406
  }) => Promise<boolean>;
@@ -15,19 +15,23 @@ export interface DialogsController {
15
15
  * Open a dialog
16
16
  * @param props
17
17
  */
18
- open: (props: DialogControllerEntryProps) => { closeDialog: () => void };
18
+ open: <T extends object = object>(props: DialogControllerEntryProps<T>) => { closeDialog: () => void };
19
19
  }
20
20
 
21
21
  /**
22
22
  * Props used to open a side dialog
23
23
  * @group Hooks and utilities
24
24
  */
25
- export interface DialogControllerEntryProps {
25
+ export interface DialogControllerEntryProps<T extends object = object> {
26
26
 
27
27
  key: string;
28
28
  /**
29
29
  * The component type that will be rendered
30
30
  */
31
- Component: React.ComponentType<{ open: boolean, closeDialog: () => void }>;
31
+ Component: React.ComponentType<{ open: boolean, closeDialog: () => void } & T>;
32
+ /**
33
+ * Props to pass to the dialog component
34
+ */
35
+ props?: T;
32
36
 
33
37
  }
@@ -8,7 +8,7 @@ export type EntityStatus = "new" | "existing" | "copy";
8
8
  * Representation of an entity fetched from the datasource
9
9
  * @group Models
10
10
  */
11
- export interface Entity<M extends object> {
11
+ export interface Entity<M extends object = any> {
12
12
 
13
13
  /**
14
14
  * ID of the entity
@@ -25,6 +25,8 @@ export interface Entity<M extends object> {
25
25
  * Current values
26
26
  */
27
27
  values: EntityValues<M>;
28
+
29
+ databaseId?: string;
28
30
  }
29
31
 
30
32
  /**
@@ -48,9 +50,15 @@ export class EntityReference {
48
50
  */
49
51
  readonly path: string;
50
52
 
51
- constructor(id: string, path: string) {
53
+ /**
54
+ * Optional database ID where the entity is stored (if multiple databases are used)
55
+ */
56
+ readonly databaseId?: string;
57
+
58
+ constructor(id: string, path: string, databaseId?: string) {
52
59
  this.id = id;
53
60
  this.path = path;
61
+ this.databaseId = databaseId;
54
62
  }
55
63
 
56
64
  get pathWithId() {
@@ -4,17 +4,31 @@ import { Entity } from "./entities";
4
4
  import { EntityCollection, SelectionController } from "./collections";
5
5
  import { User } from "./user";
6
6
  import { SideEntityController } from "./side_entity_controller";
7
+ import { FormContext } from "./fields";
7
8
 
8
9
  /**
9
10
  * An entity action is a custom action that can be performed on an entity.
10
11
  * They are displayed in the entity view and in the collection view.
11
12
  */
12
- export type EntityAction<M extends object = any, UserType extends User = User> = {
13
+ export type EntityAction<M extends object = any, USER extends User = User> = {
13
14
  /**
14
15
  * Title of the action
15
16
  */
16
17
  name: string;
17
18
 
19
+ /**
20
+ * Key of the action. You only need to provide this if you want to
21
+ * override the default actions, or if you are not passing the action
22
+ * directly to the `entityActions` prop of a collection.
23
+ * You can define your actions at the app level, in which case you
24
+ * must provide a key.
25
+ * The default actions are:
26
+ * - edit
27
+ * - delete
28
+ * - copy
29
+ */
30
+ key?: string;
31
+
18
32
  /**
19
33
  * Icon of the action
20
34
  */
@@ -24,7 +38,13 @@ export type EntityAction<M extends object = any, UserType extends User = User> =
24
38
  * Callback when the action is clicked
25
39
  * @param props
26
40
  */
27
- onClick: (props: EntityActionClickProps<M, UserType>) => Promise<void> | void;
41
+ onClick: (props: EntityActionClickProps<M, USER>) => Promise<void> | void;
42
+
43
+ /**
44
+ * Optional callback in case you want to disable the action
45
+ * @param props
46
+ */
47
+ isEnabled?: (props: EntityActionClickProps<M, USER>) => boolean;
28
48
 
29
49
  /**
30
50
  * Show this action collapsed in the menu of the collection view.
@@ -40,17 +60,60 @@ export type EntityAction<M extends object = any, UserType extends User = User> =
40
60
 
41
61
  }
42
62
 
43
- export type EntityActionClickProps<M extends object, UserType extends User = User> = {
44
- entity: Entity<M>;
45
- context: FireCMSContext<UserType>;
63
+ export type EntityActionClickProps<M extends object, USER extends User = User> = {
64
+ entity?: Entity<M>;
65
+ context: FireCMSContext<USER>;
66
+
46
67
  fullPath?: string;
68
+ fullIdPath?: string;
47
69
  collection?: EntityCollection<M>;
70
+
71
+ /**
72
+ * Optional form context, present if the action is being called from a form.
73
+ * This allows you to access the form state and methods, including modifying the form values.
74
+ */
75
+ formContext?: FormContext;
76
+
77
+ /**
78
+ * Present if this actions is being called from a side dialog only
79
+ */
80
+ sideEntityController?: SideEntityController;
81
+
82
+ /**
83
+ * Is the action being called from the collection view or from the entity form view?
84
+ */
85
+ view: "collection" | "form";
86
+
87
+ /**
88
+ * If the action is rendered in the form, is it open in a side panel or full screen?
89
+ */
90
+ openEntityMode: "side_panel" | "full_screen";
91
+
92
+ /**
93
+ * Optional selection controller, present if the action is being called from a collection view
94
+ */
48
95
  selectionController?: SelectionController;
96
+
97
+ /**
98
+ * Optional highlight function to highlight the entity in the collection view
99
+ * @param entity
100
+ */
49
101
  highlightEntity?: (entity: Entity<any>) => void;
102
+
103
+ /**
104
+ * Optional unhighlight function to remove the highlight from the entity in the collection view
105
+ * @param entity
106
+ */
50
107
  unhighlightEntity?: (entity: Entity<any>) => void;
51
- onCollectionChange?: () => void;
108
+
52
109
  /**
53
- * If this actions is being called from a side dialog
110
+ * Optional function to navigate back (e.g. when deleting an entity or navigating from a form)
54
111
  */
55
- sideEntityController?: SideEntityController;
112
+ navigateBack?: () => void;
113
+
114
+ /**
115
+ * Callback to be called when the collection changes, e.g. after an entity is deleted or created.
116
+ */
117
+ onCollectionChange?: () => void;
118
+
56
119
  };