@firecms/core 3.0.0-canary.27 → 3.0.0-canary.271

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 (408) hide show
  1. package/README.md +3 -3
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +16 -0
  4. package/dist/app/Scaffold.d.ts +34 -0
  5. package/dist/app/index.d.ts +4 -0
  6. package/dist/app/useApp.d.ts +16 -0
  7. package/dist/components/ArrayContainer.d.ts +31 -12
  8. package/dist/components/CircularProgressCenter.d.ts +1 -1
  9. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  10. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  11. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +14 -13
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +22 -6
  14. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
  15. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  16. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
  17. package/dist/components/EntityCollectionTable/index.d.ts +1 -1
  18. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  19. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  20. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +7 -4
  21. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +20 -2
  22. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  23. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  24. package/dist/components/EntityJsonPreview.d.ts +3 -0
  25. package/dist/components/EntityPreview.d.ts +10 -7
  26. package/dist/components/ErrorView.d.ts +1 -1
  27. package/dist/components/HomePage/DefaultHomePage.d.ts +2 -15
  28. package/dist/components/HomePage/HomePageDnD.d.ts +76 -0
  29. package/dist/components/HomePage/NavigationCard.d.ts +3 -1
  30. package/dist/components/HomePage/NavigationCardBinding.d.ts +4 -3
  31. package/dist/components/HomePage/NavigationGroup.d.ts +8 -1
  32. package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
  33. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  34. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  35. package/dist/components/ReferenceWidget.d.ts +3 -1
  36. package/dist/components/SelectableTable/SelectableTable.d.ts +14 -4
  37. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  38. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  39. package/dist/components/VirtualTable/VirtualTableProps.d.ts +24 -12
  40. package/dist/components/VirtualTable/types.d.ts +3 -3
  41. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
  42. package/dist/components/common/index.d.ts +2 -1
  43. package/dist/components/common/table_height.d.ts +5 -0
  44. package/dist/components/common/types.d.ts +4 -6
  45. package/dist/components/common/useColumnsIds.d.ts +3 -1
  46. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
  47. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  48. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  49. package/dist/components/index.d.ts +5 -2
  50. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  51. package/dist/core/DefaultAppBar.d.ts +29 -0
  52. package/dist/core/DefaultDrawer.d.ts +19 -0
  53. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  54. package/dist/core/EntityEditView.d.ts +43 -11
  55. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  56. package/dist/core/FireCMS.d.ts +3 -3
  57. package/dist/core/FireCMSRouter.d.ts +4 -0
  58. package/dist/core/NavigationRoutes.d.ts +2 -3
  59. package/dist/core/SideDialogs.d.ts +4 -2
  60. package/dist/core/field_configs.d.ts +1 -1
  61. package/dist/core/index.d.ts +4 -4
  62. package/dist/form/EntityForm.d.ts +37 -64
  63. package/dist/form/EntityFormActions.d.ts +21 -0
  64. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  65. package/dist/form/components/ErrorFocus.d.ts +1 -1
  66. package/dist/form/components/FieldHelperText.d.ts +3 -3
  67. package/dist/form/components/FormEntry.d.ts +6 -0
  68. package/dist/form/components/FormLayout.d.ts +5 -0
  69. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  70. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  71. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  72. package/dist/form/components/index.d.ts +3 -1
  73. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  74. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  75. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  76. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  77. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  78. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  79. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  80. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  81. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +9 -0
  82. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  83. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  84. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  85. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +5 -13
  86. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  87. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  88. package/dist/form/index.d.ts +17 -18
  89. package/dist/form/useClearRestoreValue.d.ts +2 -2
  90. package/dist/hooks/data/delete.d.ts +4 -4
  91. package/dist/hooks/data/save.d.ts +4 -5
  92. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  93. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  94. package/dist/hooks/index.d.ts +2 -0
  95. package/dist/hooks/useAuthController.d.ts +1 -1
  96. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  97. package/dist/hooks/useBuildNavigationController.d.ts +57 -13
  98. package/dist/hooks/useCollapsedGroups.d.ts +9 -0
  99. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  100. package/dist/hooks/useModeController.d.ts +1 -2
  101. package/dist/hooks/useProjectLog.d.ts +8 -2
  102. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  103. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  104. package/dist/index.d.ts +1 -0
  105. package/dist/index.es.js +23154 -13912
  106. package/dist/index.es.js.map +1 -1
  107. package/dist/index.umd.js +25917 -588
  108. package/dist/index.umd.js.map +1 -1
  109. package/dist/internal/useBuildDataSource.d.ts +3 -17
  110. package/dist/internal/useBuildSideEntityController.d.ts +3 -3
  111. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  112. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  113. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  114. package/dist/preview/components/ReferencePreview.d.ts +4 -3
  115. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  116. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  117. package/dist/preview/util.d.ts +3 -3
  118. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  119. package/dist/routes/FireCMSRoute.d.ts +1 -0
  120. package/dist/routes/HomePageRoute.d.ts +3 -0
  121. package/dist/types/analytics.d.ts +1 -1
  122. package/dist/types/auth.d.ts +8 -10
  123. package/dist/types/collections.d.ts +112 -25
  124. package/dist/types/customization_controller.d.ts +8 -0
  125. package/dist/types/datasource.d.ts +52 -36
  126. package/dist/types/dialogs_controller.d.ts +7 -3
  127. package/dist/types/entities.d.ts +7 -2
  128. package/dist/types/entity_actions.d.ts +72 -8
  129. package/dist/types/entity_callbacks.d.ts +16 -16
  130. package/dist/types/entity_overrides.d.ts +2 -2
  131. package/dist/types/export_import.d.ts +4 -4
  132. package/dist/types/fields.d.ts +74 -42
  133. package/dist/types/firecms.d.ts +16 -3
  134. package/dist/types/firecms_context.d.ts +1 -1
  135. package/dist/types/index.d.ts +0 -1
  136. package/dist/types/navigation.d.ts +62 -19
  137. package/dist/types/permissions.d.ts +4 -4
  138. package/dist/types/plugins.d.ts +56 -13
  139. package/dist/types/properties.d.ts +81 -25
  140. package/dist/types/property_config.d.ts +1 -3
  141. package/dist/types/roles.d.ts +3 -0
  142. package/dist/types/side_dialogs_controller.d.ts +10 -0
  143. package/dist/types/side_entity_controller.d.ts +14 -1
  144. package/dist/types/storage.d.ts +75 -0
  145. package/dist/types/user.d.ts +1 -0
  146. package/dist/util/builders.d.ts +3 -3
  147. package/dist/util/callbacks.d.ts +2 -0
  148. package/dist/util/createFormexStub.d.ts +2 -0
  149. package/dist/util/entities.d.ts +3 -3
  150. package/dist/util/entity_actions.d.ts +2 -0
  151. package/dist/util/entity_cache.d.ts +23 -0
  152. package/dist/util/icon_list.d.ts +5 -1
  153. package/dist/util/icon_synonyms.d.ts +1 -98
  154. package/dist/util/icons.d.ts +7 -4
  155. package/dist/util/index.d.ts +3 -0
  156. package/dist/util/navigation_from_path.d.ts +10 -1
  157. package/dist/util/navigation_utils.d.ts +15 -3
  158. package/dist/util/objects.d.ts +2 -1
  159. package/dist/util/permissions.d.ts +4 -4
  160. package/dist/util/plurals.d.ts +0 -2
  161. package/dist/util/property_utils.d.ts +4 -4
  162. package/dist/util/references.d.ts +2 -2
  163. package/dist/util/resolutions.d.ts +42 -17
  164. package/dist/util/storage.d.ts +23 -2
  165. package/dist/util/useStorageUploadController.d.ts +3 -3
  166. package/package.json +69 -52
  167. package/src/app/AppBar.tsx +18 -0
  168. package/src/app/Drawer.tsx +24 -0
  169. package/src/app/Scaffold.tsx +253 -0
  170. package/src/app/index.ts +4 -0
  171. package/src/app/useApp.tsx +32 -0
  172. package/src/components/ArrayContainer.tsx +447 -229
  173. package/src/components/CircularProgressCenter.tsx +2 -2
  174. package/src/components/ClearFilterSortButton.tsx +41 -0
  175. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +12 -11
  176. package/src/components/DeleteEntityDialog.tsx +13 -20
  177. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +65 -40
  178. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
  179. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
  180. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +72 -42
  181. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  182. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
  183. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
  184. package/src/components/EntityCollectionTable/index.tsx +1 -1
  185. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +34 -39
  186. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +49 -36
  187. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  188. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +135 -105
  189. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
  190. package/src/components/EntityCollectionView/EntityCollectionView.tsx +235 -118
  191. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +7 -4
  192. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  193. package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
  194. package/src/components/EntityCollectionView/utils.ts +19 -0
  195. package/src/components/EntityJsonPreview.tsx +66 -0
  196. package/src/components/EntityPreview.tsx +83 -62
  197. package/src/components/EntityView.tsx +13 -10
  198. package/src/components/ErrorView.tsx +4 -4
  199. package/src/components/FireCMSLogo.tsx +7 -51
  200. package/src/components/HomePage/DefaultHomePage.tsx +512 -157
  201. package/src/components/HomePage/FavouritesView.tsx +9 -14
  202. package/src/components/HomePage/HomePageDnD.tsx +599 -0
  203. package/src/components/HomePage/NavigationCard.tsx +48 -39
  204. package/src/components/HomePage/NavigationCardBinding.tsx +17 -16
  205. package/src/components/HomePage/NavigationGroup.tsx +144 -30
  206. package/src/components/HomePage/RenameGroupDialog.tsx +117 -0
  207. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  208. package/src/components/NotFoundPage.tsx +2 -2
  209. package/src/components/PropertyConfigBadge.tsx +9 -3
  210. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  211. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +23 -13
  212. package/src/components/ReferenceWidget.tsx +21 -11
  213. package/src/components/SearchIconsView.tsx +10 -7
  214. package/src/components/SelectableTable/SelectableTable.tsx +157 -145
  215. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  216. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
  217. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
  218. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +93 -24
  219. package/src/components/UnsavedChangesDialog.tsx +46 -0
  220. package/src/components/VirtualTable/VirtualTable.tsx +105 -51
  221. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  222. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  223. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  224. package/src/components/VirtualTable/VirtualTableProps.tsx +28 -14
  225. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  226. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  227. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -2
  228. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  229. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  230. package/src/components/VirtualTable/types.tsx +2 -3
  231. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +64 -44
  232. package/src/components/common/index.ts +2 -1
  233. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  234. package/src/components/common/types.tsx +4 -6
  235. package/src/components/common/useColumnsIds.tsx +24 -3
  236. package/src/components/common/useDataSourceTableController.tsx +420 -0
  237. package/src/components/common/useDebouncedCallback.tsx +20 -0
  238. package/src/components/common/useScrollRestoration.tsx +68 -0
  239. package/src/components/common/useTableSearchHelper.ts +53 -12
  240. package/src/components/index.tsx +6 -2
  241. package/src/contexts/BreacrumbsContext.tsx +38 -0
  242. package/src/contexts/DialogsProvider.tsx +5 -4
  243. package/src/contexts/ModeController.tsx +1 -3
  244. package/src/contexts/SnackbarProvider.tsx +2 -0
  245. package/src/core/DefaultAppBar.tsx +219 -0
  246. package/src/core/DefaultDrawer.tsx +185 -0
  247. package/src/core/DrawerNavigationItem.tsx +66 -0
  248. package/src/core/EntityEditView.tsx +435 -470
  249. package/src/core/EntityEditViewFormActions.tsx +329 -0
  250. package/src/core/EntitySidePanel.tsx +88 -21
  251. package/src/core/FireCMS.tsx +74 -58
  252. package/src/core/FireCMSRouter.tsx +17 -0
  253. package/src/core/NavigationRoutes.tsx +28 -38
  254. package/src/core/SideDialogs.tsx +22 -12
  255. package/src/core/field_configs.tsx +26 -13
  256. package/src/core/index.tsx +6 -5
  257. package/src/form/EntityForm.tsx +620 -534
  258. package/src/form/EntityFormActions.tsx +211 -0
  259. package/src/form/PropertyFieldBinding.tsx +88 -45
  260. package/src/form/components/CustomIdField.tsx +9 -3
  261. package/src/form/components/FieldHelperText.tsx +4 -4
  262. package/src/form/components/FormEntry.tsx +22 -0
  263. package/src/form/components/FormLayout.tsx +16 -0
  264. package/src/form/components/LabelWithIcon.tsx +30 -19
  265. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  266. package/src/form/components/StorageItemPreview.tsx +23 -13
  267. package/src/form/components/StorageUploadProgress.tsx +5 -6
  268. package/src/form/components/index.tsx +3 -1
  269. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +34 -19
  270. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +50 -36
  271. package/src/form/field_bindings/BlockFieldBinding.tsx +56 -34
  272. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  273. package/src/form/field_bindings/KeyValueFieldBinding.tsx +61 -52
  274. package/src/form/field_bindings/MapFieldBinding.tsx +73 -55
  275. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +159 -0
  276. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
  277. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  278. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
  279. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  280. package/src/form/field_bindings/RepeatFieldBinding.tsx +62 -35
  281. package/src/form/field_bindings/SelectFieldBinding.tsx +24 -15
  282. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +257 -199
  283. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  284. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  285. package/src/form/index.tsx +17 -37
  286. package/src/form/useClearRestoreValue.tsx +2 -2
  287. package/src/form/validation.ts +13 -23
  288. package/src/hooks/data/delete.ts +6 -5
  289. package/src/hooks/data/save.ts +26 -33
  290. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  291. package/src/hooks/data/useDataSource.tsx +11 -3
  292. package/src/hooks/data/useEntityFetch.tsx +10 -6
  293. package/src/hooks/index.tsx +2 -0
  294. package/src/hooks/useAuthController.tsx +1 -1
  295. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  296. package/src/hooks/useBrowserTitleAndIcon.tsx +1 -1
  297. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  298. package/src/hooks/useBuildModeController.tsx +22 -29
  299. package/src/hooks/useBuildNavigationController.tsx +440 -119
  300. package/src/hooks/useCollapsedGroups.ts +64 -0
  301. package/src/hooks/useFireCMSContext.tsx +3 -33
  302. package/src/hooks/useLargeLayout.tsx +0 -35
  303. package/src/hooks/useModeController.tsx +1 -2
  304. package/src/hooks/useProjectLog.tsx +32 -10
  305. package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
  306. package/src/hooks/useValidateAuthenticator.tsx +17 -37
  307. package/src/index.ts +1 -0
  308. package/src/internal/useBuildDataSource.ts +79 -85
  309. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  310. package/src/internal/useBuildSideEntityController.tsx +204 -77
  311. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  312. package/src/preview/PropertyPreview.tsx +34 -25
  313. package/src/preview/PropertyPreviewProps.tsx +7 -1
  314. package/src/preview/components/BooleanPreview.tsx +2 -2
  315. package/src/preview/components/EmptyValue.tsx +1 -1
  316. package/src/preview/components/EnumValuesChip.tsx +2 -2
  317. package/src/preview/components/ImagePreview.tsx +26 -37
  318. package/src/preview/components/ReferencePreview.tsx +26 -36
  319. package/src/preview/components/StorageThumbnail.tsx +5 -1
  320. package/src/preview/components/UrlComponentPreview.tsx +60 -28
  321. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -6
  322. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +7 -5
  323. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -4
  324. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -4
  325. package/src/preview/property_previews/ArrayOneOfPreview.tsx +7 -6
  326. package/src/preview/property_previews/ArrayPropertyPreview.tsx +7 -6
  327. package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
  328. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
  329. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  330. package/src/preview/util.ts +10 -10
  331. package/src/routes/CustomCMSRoute.tsx +21 -0
  332. package/src/routes/FireCMSRoute.tsx +246 -0
  333. package/src/routes/HomePageRoute.tsx +17 -0
  334. package/src/types/analytics.ts +3 -0
  335. package/src/types/auth.tsx +9 -13
  336. package/src/types/collections.ts +134 -30
  337. package/src/types/customization_controller.tsx +9 -1
  338. package/src/types/datasource.ts +61 -43
  339. package/src/types/dialogs_controller.tsx +7 -3
  340. package/src/types/entities.ts +12 -2
  341. package/src/types/entity_actions.tsx +86 -10
  342. package/src/types/entity_callbacks.ts +18 -18
  343. package/src/types/entity_overrides.tsx +2 -2
  344. package/src/types/export_import.ts +4 -4
  345. package/src/types/fields.tsx +85 -46
  346. package/src/types/firecms.tsx +18 -4
  347. package/src/types/firecms_context.tsx +1 -1
  348. package/src/types/index.ts +0 -1
  349. package/src/types/navigation.ts +77 -24
  350. package/src/types/permissions.ts +5 -5
  351. package/src/types/plugins.tsx +66 -15
  352. package/src/types/properties.ts +96 -27
  353. package/src/types/property_config.tsx +1 -2
  354. package/src/types/roles.ts +3 -0
  355. package/src/types/side_dialogs_controller.tsx +15 -0
  356. package/src/types/side_entity_controller.tsx +16 -1
  357. package/src/types/storage.ts +83 -1
  358. package/src/types/user.ts +2 -0
  359. package/src/util/builders.ts +10 -8
  360. package/src/util/callbacks.ts +119 -0
  361. package/src/util/createFormexStub.tsx +62 -0
  362. package/src/util/entities.ts +10 -7
  363. package/src/util/entity_actions.ts +28 -0
  364. package/src/util/entity_cache.ts +204 -0
  365. package/src/util/enums.ts +1 -1
  366. package/src/util/icon_list.ts +16 -10
  367. package/src/util/icon_synonyms.ts +3 -100
  368. package/src/util/icons.tsx +36 -11
  369. package/src/util/index.ts +3 -0
  370. package/src/util/join_collections.ts +9 -2
  371. package/src/util/make_properties_editable.ts +13 -5
  372. package/src/util/navigation_from_path.ts +33 -12
  373. package/src/util/navigation_utils.ts +141 -25
  374. package/src/util/objects.ts +90 -33
  375. package/src/util/parent_references_from_path.ts +3 -3
  376. package/src/util/permissions.ts +9 -8
  377. package/src/util/plurals.ts +0 -2
  378. package/src/util/property_utils.tsx +17 -6
  379. package/src/util/references.ts +19 -8
  380. package/src/util/resolutions.ts +122 -48
  381. package/src/util/storage.ts +79 -21
  382. package/src/util/strings.ts +2 -2
  383. package/src/util/useStorageUploadController.tsx +91 -28
  384. package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
  385. package/dist/components/FireCMSAppBar.d.ts +0 -26
  386. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  387. package/dist/components/VirtualTable/common.d.ts +0 -2
  388. package/dist/core/Drawer.d.ts +0 -23
  389. package/dist/core/Scaffold.d.ts +0 -55
  390. package/dist/core/SideEntityView.d.ts +0 -7
  391. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  392. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  393. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  394. package/dist/internal/useLocaleConfig.d.ts +0 -1
  395. package/dist/types/appcheck.d.ts +0 -26
  396. package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
  397. package/src/components/FireCMSAppBar.tsx +0 -165
  398. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  399. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
  400. package/src/core/Drawer.tsx +0 -191
  401. package/src/core/Scaffold.tsx +0 -281
  402. package/src/core/SideEntityView.tsx +0 -38
  403. package/src/form/components/FormikArrayContainer.tsx +0 -44
  404. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  405. package/src/internal/useBuildCustomizationController.tsx +0 -5
  406. package/src/internal/useLocaleConfig.tsx +0 -18
  407. package/src/types/appcheck.ts +0 -29
  408. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -1,6 +1,7 @@
1
- import { EntityValues } from "./entities";
2
- import { CMSType, PropertyOrBuilder } from "./properties";
1
+ import { CMSType, Property, PropertyOrBuilder } from "./properties";
3
2
  import { ResolvedEntityCollection, ResolvedProperty } from "./resolved_entities";
3
+ import { FormexController } from "@firecms/formex";
4
+ import { Entity } from "./entities";
4
5
  /**
5
6
  * When building a custom field you need to create a React component that takes
6
7
  * this interface as props.
@@ -17,9 +18,6 @@ export interface FieldProps<T extends CMSType = any, CustomProps = any, M extend
17
18
  * Current value of this field
18
19
  */
19
20
  value: T;
20
- /**
21
- * Initial value of this field
22
- */
23
21
  /**
24
22
  * Set value of field directly
25
23
  */
@@ -34,53 +32,50 @@ export interface FieldProps<T extends CMSType = any, CustomProps = any, M extend
34
32
  /**
35
33
  * Is the form currently submitting
36
34
  */
37
- isSubmitting: boolean;
35
+ isSubmitting?: boolean;
38
36
  /**
39
37
  * Should this field show the error indicator.
40
38
  * Note that there might be an error (like an empty field that should be
41
39
  * filled) but we don't want to show the error until the user has tried
42
40
  * saving.
43
41
  */
44
- showError: boolean;
42
+ showError?: boolean;
45
43
  /**
46
44
  * Is there an error in this field. The error field has the same shape as
47
45
  * the field, replacing values with a string containing the error.
48
46
  * It takes the value `null` if there is no error
49
47
  */
50
- error: any | null;
48
+ error?: any | null;
51
49
  /**
52
50
  * Has this field been touched
53
51
  */
54
- touched: boolean;
52
+ touched?: boolean;
55
53
  /**
56
54
  * Property related to this field
57
55
  */
58
- property: ResolvedProperty<T>;
56
+ property: Property<T> | ResolvedProperty<T>;
59
57
  /**
60
58
  * Should this field include a description
61
59
  */
62
- includeDescription: boolean;
60
+ includeDescription?: boolean;
63
61
  /**
64
62
  * Flag to indicate that the underlying value has been updated in the
65
63
  * datasource
66
64
  */
67
- underlyingValueHasChanged: boolean;
65
+ underlyingValueHasChanged?: boolean;
68
66
  /**
69
67
  * Is this field part of an array
70
68
  */
71
- partOfArray: boolean;
72
- /**
73
- * Is this field part of a block (oneOf array)
74
- */
75
- partOfBlock: boolean;
69
+ partOfArray?: boolean;
76
70
  /**
77
- * Is this field being rendered in the entity table popup
71
+ * Display the child properties directly, without being wrapped in an
72
+ * extendable panel. Note that this will also hide the title of this property.
78
73
  */
79
- tableMode: boolean;
74
+ minimalistView?: boolean;
80
75
  /**
81
76
  * Should this field autofocus on mount
82
77
  */
83
- autoFocus: boolean;
78
+ autoFocus?: boolean;
84
79
  /**
85
80
  * Additional properties set by the developer
86
81
  */
@@ -92,29 +87,29 @@ export interface FieldProps<T extends CMSType = any, CustomProps = any, M extend
92
87
  /**
93
88
  * Flag to indicate if this field should be disabled
94
89
  */
95
- disabled: boolean;
90
+ disabled?: boolean;
91
+ /**
92
+ * Size of the field
93
+ */
94
+ size?: "small" | "medium" | "large";
95
+ /**
96
+ * Some properties might change internal state (like expanding a panel).
97
+ * This function should be called when the internal state changes.
98
+ * This is used to preserve state in array containers.
99
+ *
100
+ * @param property
101
+ */
102
+ onPropertyChange?: (property: Partial<Property<any>>) => void;
96
103
  }
97
104
  /**
98
105
  * Context passed to custom fields
99
106
  * @group Form custom fields
100
107
  */
101
108
  export interface FormContext<M extends Record<string, any> = any> {
102
- /**
103
- * Collection of the entity being modified
104
- */
105
- collection: ResolvedEntityCollection<M>;
106
109
  /**
107
110
  * Current values of the entity
108
111
  */
109
- values: EntityValues<M>;
110
- /**
111
- * Entity id, it can be null if it's a new entity
112
- */
113
- entityId?: string;
114
- /**
115
- * Path this entity is located at
116
- */
117
- path: string;
112
+ values: M;
118
113
  /**
119
114
  * Update the value of a field
120
115
  * @param key
@@ -123,9 +118,32 @@ export interface FormContext<M extends Record<string, any> = any> {
123
118
  */
124
119
  setFieldValue: (key: string, value: any, shouldValidate?: boolean) => void;
125
120
  /**
126
- * Save the entity
121
+ * Save the entity.
122
+ */
123
+ save: (values: M) => void;
124
+ /**
125
+ * Collection of the entity being modified
127
126
  */
128
- save: (values: EntityValues<M>) => void;
127
+ collection?: ResolvedEntityCollection<M>;
128
+ /**
129
+ * Entity id, it can be null if it's a new entity
130
+ */
131
+ entityId: string;
132
+ /**
133
+ * Path this entity is located at
134
+ */
135
+ path?: string;
136
+ status: "new" | "existing" | "copy";
137
+ entity?: Entity<M>;
138
+ savingError?: Error;
139
+ openEntityMode: "side_panel" | "full_screen";
140
+ /**
141
+ * This is the underlying formex controller that powers the form.
142
+ * If you are in a red only mode, the formex controller is there, but you can't
143
+ * operate with it
144
+ */
145
+ formex: FormexController<M>;
146
+ disabled: boolean;
129
147
  }
130
148
  /**
131
149
  * In case you need to render a field bound to a Property inside your
@@ -156,18 +174,15 @@ export interface PropertyFieldBindingProps<T extends CMSType, M extends Record<s
156
174
  * field is being edited
157
175
  */
158
176
  underlyingValueHasChanged?: boolean;
159
- /**
160
- * Is this field being rendered in a table
161
- */
162
- tableMode?: boolean;
163
177
  /**
164
178
  * Is this field part of an array
165
179
  */
166
180
  partOfArray?: boolean;
167
181
  /**
168
- * Is this field part of a block (oneOf array)
182
+ * Display the child properties directly, without being wrapped in an
183
+ * extendable panel. Note that this will also hide the title of this property.
169
184
  */
170
- partOfBlock?: boolean;
185
+ minimalistView?: boolean;
171
186
  /**
172
187
  * Should the field take focus when rendered. When opening the popup view
173
188
  * in table mode, it makes sense to put the focus on the only field rendered.
@@ -177,4 +192,21 @@ export interface PropertyFieldBindingProps<T extends CMSType, M extends Record<s
177
192
  * Should this field be disabled
178
193
  */
179
194
  disabled?: boolean;
195
+ /**
196
+ * Index of the field in the array.
197
+ * Only used when the field is part of an array.
198
+ */
199
+ index?: number;
200
+ /**
201
+ * The size of the field
202
+ */
203
+ size?: "small" | "medium" | "large";
204
+ /**
205
+ * Some properties might change internal state (like expanding a panel).
206
+ * This function should be called when the internal state changes.
207
+ * This is used to preserve state in array containers.
208
+ *
209
+ * @param property
210
+ */
211
+ onPropertyChange?: (property: Partial<Property<any>>) => void;
180
212
  }
@@ -12,6 +12,7 @@ import { EntityLinkBuilder } from "./entity_link_builder";
12
12
  import { UserConfigurationPersistence } from "./local_config_persistence";
13
13
  import { FireCMSPlugin } from "./plugins";
14
14
  import { CMSAnalyticsEvent } from "./analytics";
15
+ import { EntityAction } from "./entity_actions";
15
16
  /**
16
17
  * Use this callback to build entity collections dynamically.
17
18
  * You can use the user to decide which collections to show.
@@ -44,7 +45,7 @@ export type CMSViewsBuilder = (params: {
44
45
  /**
45
46
  * @group Models
46
47
  */
47
- export type FireCMSProps<UserType extends User, EC extends EntityCollection> = {
48
+ export type FireCMSProps<USER extends User> = {
48
49
  /**
49
50
  * Use this function to return the components you want to render under
50
51
  * FireCMS
@@ -62,6 +63,10 @@ export type FireCMSProps<UserType extends User, EC extends EntityCollection> = {
62
63
  */
63
64
  loading: boolean;
64
65
  }) => React.ReactNode;
66
+ /**
67
+ * If you have a custom API key, you can use it here.
68
+ */
69
+ apiKey?: string;
65
70
  /**
66
71
  * Record of custom form fields to be used in the CMS.
67
72
  * You can use the key to reference the custom field in
@@ -81,6 +86,13 @@ export type FireCMSProps<UserType extends User, EC extends EntityCollection> = {
81
86
  * You can also define an entity view from the UI.
82
87
  */
83
88
  entityViews?: EntityCustomView[];
89
+ /**
90
+ * List of actions that can be performed on entities.
91
+ * These actions are displayed in the entity view and in the collection view.
92
+ * You can later reuse these actions in the `entityActions` prop of a collection,
93
+ * by specifying the `key` of the action.
94
+ */
95
+ entityActions?: EntityAction[];
84
96
  /**
85
97
  * Format of the dates in the CMS.
86
98
  * Defaults to 'MMMM dd, yyyy, HH:mm:ss'
@@ -101,7 +113,7 @@ export type FireCMSProps<UserType extends User, EC extends EntityCollection> = {
101
113
  /**
102
114
  * Delegate for implementing your auth operations.
103
115
  */
104
- authController: AuthController<UserType>;
116
+ authController: AuthController<USER>;
105
117
  /**
106
118
  * Use this controller to access the configuration that is stored locally,
107
119
  * and not defined in code
@@ -109,7 +121,8 @@ export type FireCMSProps<UserType extends User, EC extends EntityCollection> = {
109
121
  userConfigPersistence?: UserConfigurationPersistence;
110
122
  /**
111
123
  * Use plugins to modify the behaviour of the CMS.
112
- * Currently, in ALPHA, and likely subject to change.
124
+ * DEPRECATED: use the `plugins` prop in the `useBuildNavigationController` instead.
125
+ * This prop will work as a fallback for the `plugins` prop in the `useBuildNavigationController`.
113
126
  */
114
127
  plugins?: FireCMSPlugin<any, any, any>[];
115
128
  /**
@@ -17,7 +17,7 @@ import { AnalyticsController } from "./analytics_controller";
17
17
  * @group Hooks and utilities
18
18
  * @see useFireCMSContext
19
19
  */
20
- export type FireCMSContext<UserType extends User = User, AuthControllerType extends AuthController<UserType> = AuthController<UserType>> = {
20
+ export type FireCMSContext<USER extends User = User, AuthControllerType extends AuthController<USER> = AuthController<USER>> = {
21
21
  /**
22
22
  * Connector to your database, e.g. your Firestore database
23
23
  */
@@ -23,7 +23,6 @@ export * from "./plugins";
23
23
  export * from "./analytics";
24
24
  export * from "./firecms";
25
25
  export * from "./roles";
26
- export * from "./appcheck";
27
26
  export * from "./export_import";
28
27
  export * from "./modify_collections";
29
28
  export * from "./analytics_controller";
@@ -1,9 +1,11 @@
1
1
  import React from "react";
2
2
  import { EntityCollection } from "./collections";
3
3
  import { EntityReference } from "./entities";
4
+ import { FireCMSPlugin } from "./plugins";
4
5
  /**
5
6
  * Controller that includes the resolved navigation and utility methods and
6
7
  * attributes.
8
+ * This controller holds the state of the navigation including the collections.
7
9
  * @group Models
8
10
  */
9
11
  export type NavigationController<EC extends EntityCollection = EntityCollection<any>> = {
@@ -29,7 +31,7 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
29
31
  * level of the navigation (e.g. in the home page or the navigation
30
32
  * drawer)
31
33
  */
32
- topLevelNavigation?: TopNavigationResult;
34
+ topLevelNavigation?: NavigationResult;
33
35
  /**
34
36
  * Is the navigation loading (the configuration persistence has not
35
37
  * loaded yet, or a specified navigation builder has not completed)
@@ -47,9 +49,13 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
47
49
  * Get the collection configuration for a given path.
48
50
  * The collection is resolved from the given path or alias.
49
51
  */
50
- getCollection: (pathOrAlias: string, entityId?: string, includeUserOverride?: boolean) => EC | undefined;
52
+ getCollection: (pathOrId: string, includeUserOverride?: boolean) => EC | undefined;
51
53
  /**
52
- * Get the collection configuration from its parent path segments.
54
+ * Get the top level collection configuration for a given id
55
+ */
56
+ getCollectionById: (id: string) => EC | undefined;
57
+ /**
58
+ * Get the collection configuration from its parent ids.
53
59
  */
54
60
  getCollectionFromIds: (ids: string[]) => EC | undefined;
55
61
  /**
@@ -57,11 +63,13 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
57
63
  */
58
64
  getCollectionFromPaths: (pathSegments: string[]) => EC | undefined;
59
65
  /**
60
- * Default path under the navigation routes of the CMS will be created
66
+ * Default path under the navigation routes of the CMS will be created.
67
+ * Defaults to '/'. You may want to change this `basepath` to 'admin' for example.
61
68
  */
62
69
  basePath: string;
63
70
  /**
64
- * Default path under the collection routes of the CMS will be created
71
+ * Default path under the collection routes of the CMS will be created.
72
+ * It defaults to '/c'
65
73
  */
66
74
  baseCollectionPath: string;
67
75
  /**
@@ -72,14 +80,6 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
72
80
  * @param cmsPath
73
81
  */
74
82
  urlPathToDataPath: (cmsPath: string) => string;
75
- /**
76
- * Convert a collection or entity path to a URL path
77
- * @param path
78
- */
79
- buildCMSUrlPath: (path: string) => string;
80
- buildUrlEditCollectionPath: (props: {
81
- path: string;
82
- }) => string;
83
83
  /**
84
84
  * Base url path for the home screen
85
85
  */
@@ -97,10 +97,11 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
97
97
  */
98
98
  buildUrlCollectionPath: (path: string) => string;
99
99
  /**
100
- * Turn a path with aliases into a resolved path
100
+ * Turn a path with collection ids into a resolved path.
101
+ * The ids (typically used in urls) will be replaced with relative paths (typically used in database paths)
101
102
  * @param pathWithAliases
102
103
  */
103
- resolveAliasesFrom: (pathWithAliases: string) => string;
104
+ resolveIdsFrom: (pathWithAliases: string) => string;
104
105
  /**
105
106
  * Call this method to recalculate the navigation
106
107
  */
@@ -120,6 +121,31 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
120
121
  * @param ids
121
122
  */
122
123
  convertIdsToPaths: (ids: string[]) => string[];
124
+ /**
125
+ * A function to navigate to a specified route or URL.
126
+ *
127
+ * @param {string} to - The target route or URL to navigate to.
128
+ * @param {NavigateOptions} [options] - Optional configuration settings for navigation, such as replace behavior or state data.
129
+ */
130
+ navigate: (to: string, options?: NavigateOptions) => void;
131
+ /**
132
+ * Plugin system allowing to extend the CMS functionality.
133
+ */
134
+ plugins?: FireCMSPlugin<any, any, any>[];
135
+ };
136
+ export interface NavigateOptions {
137
+ replace?: boolean;
138
+ state?: any;
139
+ preventScrollReset?: boolean;
140
+ relative?: "route" | "path";
141
+ flushSync?: boolean;
142
+ viewTransition?: boolean;
143
+ }
144
+ export type NavigationBlocker = {
145
+ updateBlockListener: (path: string, block: boolean, basePath?: string) => () => void;
146
+ isBlocked: (path: string) => boolean;
147
+ proceed?: () => void;
148
+ reset?: () => void;
123
149
  };
124
150
  /**
125
151
  * Custom additional views created by the developer, added to the main
@@ -144,8 +170,9 @@ export interface CMSView {
144
170
  * You can use any of the icons in the Material specs:
145
171
  * https://fonts.google.com/icons
146
172
  * e.g. 'account_tree' or 'person'
173
+ * Find all the icons in https://firecms.co/docs/icons
147
174
  */
148
- icon?: string;
175
+ icon?: string | React.ReactNode;
149
176
  /**
150
177
  * Should this view be hidden from the main navigation panel.
151
178
  * It will still be accessible if you reach the specified path
@@ -163,7 +190,21 @@ export interface CMSView {
163
190
  */
164
191
  group?: string;
165
192
  }
166
- export interface TopNavigationEntry {
193
+ /**
194
+ * Used to group navigation entries in the main navigation.
195
+ */
196
+ export interface NavigationGroupMapping {
197
+ /**
198
+ * Name of the group, used to display the group header in the UI
199
+ */
200
+ name: string;
201
+ /**
202
+ * List of collection ids or view paths that belong to this group.
203
+ */
204
+ entries: string[];
205
+ }
206
+ export interface NavigationEntry {
207
+ id: string;
167
208
  url: string;
168
209
  name: string;
169
210
  path: string;
@@ -173,7 +214,9 @@ export interface TopNavigationEntry {
173
214
  description?: string;
174
215
  group: string;
175
216
  }
176
- export type TopNavigationResult = {
177
- navigationEntries: TopNavigationEntry[];
217
+ export type NavigationResult = {
218
+ allowDragAndDrop: boolean;
219
+ navigationEntries: NavigationEntry[];
178
220
  groups: string[];
221
+ onNavigationEntriesUpdate: (entries: NavigationGroupMapping[]) => void;
179
222
  };
@@ -30,7 +30,7 @@ export interface Permissions {
30
30
  * Props passed to a {@link PermissionsBuilder}
31
31
  * @group Models
32
32
  */
33
- export interface PermissionsBuilderProps<EC extends EntityCollection = EntityCollection, UserType extends User = User, M extends object = InferCollectionType<EC>> {
33
+ export interface PermissionsBuilderProps<EC extends EntityCollection = EntityCollection, USER extends User = User, M extends object = InferCollectionType<EC>> {
34
34
  /**
35
35
  * Entity being edited, might be null in some cases, when the operation
36
36
  * refers to the collection.
@@ -49,7 +49,7 @@ export interface PermissionsBuilderProps<EC extends EntityCollection = EntityCol
49
49
  /**
50
50
  * Logged in user
51
51
  */
52
- user: UserType | null;
52
+ user: USER | null;
53
53
  /**
54
54
  * Collection these permissions apply to
55
55
  */
@@ -57,11 +57,11 @@ export interface PermissionsBuilderProps<EC extends EntityCollection = EntityCol
57
57
  /**
58
58
  * Auth controller
59
59
  */
60
- authController: AuthController<UserType>;
60
+ authController: AuthController<USER>;
61
61
  }
62
62
  /**
63
63
  * Builder used to assign permissions to entities,
64
64
  * based on the logged user or collection.
65
65
  * @group Models
66
66
  */
67
- export type PermissionsBuilder<EC extends EntityCollection = EntityCollection, UserType extends User = User, M extends object = InferCollectionType<EC>> = (({ pathSegments, user, collection, authController }: PermissionsBuilderProps<EC, UserType, M>) => Permissions | undefined);
67
+ export type PermissionsBuilder<EC extends EntityCollection = EntityCollection, USER extends User = User, M extends object = InferCollectionType<EC>> = (({ pathSegments, user, collection, authController }: PermissionsBuilderProps<EC, USER, M>) => Permissions | undefined);
@@ -1,17 +1,18 @@
1
1
  import React, { PropsWithChildren } from "react";
2
2
  import { FireCMSContext } from "./firecms_context";
3
- import { CollectionActionsProps, EntityCollection } from "./collections";
3
+ import { CollectionActionsProps, EntityCollection, EntityTableController } from "./collections";
4
4
  import { User } from "./user";
5
5
  import { FieldProps, FormContext } from "./fields";
6
6
  import { CMSType, Property } from "./properties";
7
7
  import { EntityStatus } from "./entities";
8
8
  import { ResolvedProperty } from "./resolved_entities";
9
+ import { NavigationGroupMapping } from "./navigation";
9
10
  /**
10
11
  * Interface used to define plugins for FireCMS.
11
12
  * NOTE: This is a work in progress and the API is not stable yet.
12
13
  * @group Core
13
14
  */
14
- export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollection = EntityCollection, COL_ACTIONS_PROPS = any> = {
15
+ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollection = EntityCollection, COL_ACTIONS_PROPS = any, COL_ACTIONS_START__PROPS = any> = {
15
16
  /**
16
17
  * Key of the plugin. This is used to identify the plugin in the CMS.
17
18
  */
@@ -70,6 +71,17 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
70
71
  title: string;
71
72
  children: React.ReactNode;
72
73
  };
74
+ /**
75
+ * Allow reordering with drag and drop of the collections in the home page.
76
+ */
77
+ allowDragAndDrop?: boolean;
78
+ navigationEntries?: NavigationGroupMapping[];
79
+ /**
80
+ * This method will be called when the entries are updated in the home page.
81
+ * group => navigationEntriesOrder (path)
82
+ * @param entries
83
+ */
84
+ onNavigationEntriesUpdate?: (entries: NavigationGroupMapping[]) => void;
73
85
  };
74
86
  collectionView?: {
75
87
  /**
@@ -78,6 +90,14 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
78
90
  */
79
91
  CollectionActions?: React.ComponentType<CollectionActionsProps<any, any, EC> & COL_ACTIONS_PROPS> | React.ComponentType<CollectionActionsProps<any, any, EC> & COL_ACTIONS_PROPS>[];
80
92
  collectionActionsProps?: COL_ACTIONS_PROPS;
93
+ CollectionActionsStart?: React.ComponentType<CollectionActionsProps<any, any, EC> & COL_ACTIONS_START__PROPS> | React.ComponentType<CollectionActionsProps<any, any, EC> & COL_ACTIONS_START__PROPS>[];
94
+ collectionActionsStartProps?: COL_ACTIONS_START__PROPS;
95
+ blockSearch?: (props: {
96
+ context: FireCMSContext;
97
+ path: string;
98
+ collection: EC;
99
+ parentCollectionIds?: string[];
100
+ }) => boolean;
81
101
  showTextSearchBar?: (props: {
82
102
  context: FireCMSContext;
83
103
  path: string;
@@ -101,6 +121,7 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
101
121
  parentCollectionIds: string[];
102
122
  onHover: boolean;
103
123
  collection: EC;
124
+ tableController: EntityTableController;
104
125
  }>;
105
126
  /**
106
127
  * If you add this callback to your plugin, an add button will be added to the collection table.
@@ -110,6 +131,7 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
110
131
  fullPath: string;
111
132
  parentCollectionIds: string[];
112
133
  collection: EC;
134
+ tableController: EntityTableController;
113
135
  }>;
114
136
  };
115
137
  form?: {
@@ -117,10 +139,29 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
117
139
  Component: React.ComponentType<PropsWithChildren<FORM_PROPS & PluginFormActionProps<any, EC>>>;
118
140
  props?: FORM_PROPS;
119
141
  };
142
+ /**
143
+ * Add custom actions to the default ones ("Save", "Discard"...)
144
+ */
120
145
  Actions?: React.ComponentType<PluginFormActionProps<any, EC>>;
146
+ /**
147
+ * Add custom actions to the top of the form
148
+ */
149
+ ActionsTop?: React.ComponentType<PluginFormActionProps<any, EC>>;
121
150
  fieldBuilder?: <T extends CMSType = CMSType>(props: PluginFieldBuilderParams<T, any, EC>) => React.ComponentType<FieldProps<T>> | null;
122
151
  fieldBuilderEnabled?: <T extends CMSType = CMSType>(props: PluginFieldBuilderParams<T>) => boolean;
123
152
  };
153
+ collection?: {
154
+ /**
155
+ * Use this method to modify a single collection before it is rendered.
156
+ * @param collection
157
+ */
158
+ modifyCollection?: (collection: EntityCollection) => EntityCollection;
159
+ /**
160
+ * Use this method to modify, add or remove collections.
161
+ * @param collections
162
+ */
163
+ injectCollections?: (collections: EntityCollection[]) => EntityCollection[];
164
+ };
124
165
  };
125
166
  /**
126
167
  * Props passed to the {@link FireCMSPlugin.homePage.CollectionActions} method.
@@ -128,7 +169,7 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
128
169
  *
129
170
  * @group Models
130
171
  */
131
- export interface PluginHomePageActionsProps<EP extends object = object, M extends Record<string, any> = any, UserType extends User = User, EC extends EntityCollection<M> = EntityCollection<M>> {
172
+ export interface PluginHomePageActionsProps<EP extends object = object, M extends Record<string, any> = any, USER extends User = User, EC extends EntityCollection<M> = EntityCollection<M>> {
132
173
  /**
133
174
  * Collection path of this entity. This is the full path, like
134
175
  * `users/1234/addresses`
@@ -141,17 +182,19 @@ export interface PluginHomePageActionsProps<EP extends object = object, M extend
141
182
  /**
142
183
  * Context of the app status
143
184
  */
144
- context: FireCMSContext<UserType>;
185
+ context: FireCMSContext<USER>;
145
186
  extraProps?: EP;
146
187
  }
147
- export interface PluginFormActionProps<UserType extends User = User, EC extends EntityCollection = EntityCollection> {
188
+ export interface PluginFormActionProps<USER extends User = User, EC extends EntityCollection = EntityCollection> {
148
189
  entityId?: string;
149
190
  path: string;
191
+ parentCollectionIds: string[];
150
192
  status: EntityStatus;
151
193
  collection: EC;
194
+ disabled: boolean;
152
195
  formContext?: FormContext<any>;
153
- context: FireCMSContext<UserType>;
154
- currentEntityId?: string;
196
+ context: FireCMSContext<USER>;
197
+ openEntityMode: "side_panel" | "full_screen";
155
198
  }
156
199
  export type PluginFieldBuilderParams<T extends CMSType = CMSType, M extends Record<string, any> = any, EC extends EntityCollection<M> = EntityCollection<M>> = {
157
200
  fieldConfigId: string;
@@ -159,13 +202,13 @@ export type PluginFieldBuilderParams<T extends CMSType = CMSType, M extends Reco
159
202
  property: Property<T> | ResolvedProperty<T>;
160
203
  Field: React.ComponentType<FieldProps<T, any, M>>;
161
204
  plugin: FireCMSPlugin;
162
- path: string;
163
- collection: EC;
205
+ path?: string;
206
+ collection?: EC;
164
207
  };
165
- export interface PluginGenericProps<UserType extends User = User> {
166
- context: FireCMSContext<UserType>;
208
+ export interface PluginGenericProps<USER extends User = User> {
209
+ context: FireCMSContext<USER>;
167
210
  }
168
- export interface PluginHomePageAdditionalCardsProps<UserType extends User = User> {
211
+ export interface PluginHomePageAdditionalCardsProps<USER extends User = User> {
169
212
  group?: string;
170
- context: FireCMSContext<UserType>;
213
+ context: FireCMSContext<USER>;
171
214
  }