@firecms/core 3.0.0-canary.24 → 3.0.0-canary.241

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 (387) 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 +30 -6
  8. package/dist/components/CircularProgressCenter.d.ts +1 -1
  9. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  10. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  11. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +13 -13
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +22 -6
  14. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
  15. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  16. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
  17. package/dist/components/EntityCollectionTable/index.d.ts +1 -1
  18. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  19. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  20. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +7 -4
  21. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +20 -2
  22. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  23. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  24. package/dist/components/EntityJsonPreview.d.ts +3 -0
  25. package/dist/components/EntityPreview.d.ts +8 -5
  26. package/dist/components/ErrorView.d.ts +1 -1
  27. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  28. package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
  29. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  30. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  31. package/dist/components/ReferenceWidget.d.ts +3 -1
  32. package/dist/components/SelectableTable/SelectableTable.d.ts +14 -4
  33. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  34. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  35. package/dist/components/VirtualTable/VirtualTableProps.d.ts +28 -12
  36. package/dist/components/VirtualTable/types.d.ts +3 -3
  37. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
  38. package/dist/components/common/index.d.ts +2 -1
  39. package/dist/components/common/table_height.d.ts +5 -0
  40. package/dist/components/common/types.d.ts +4 -6
  41. package/dist/components/common/useColumnsIds.d.ts +3 -1
  42. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
  43. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  44. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  45. package/dist/components/index.d.ts +5 -2
  46. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  47. package/dist/core/DefaultAppBar.d.ts +29 -0
  48. package/dist/core/DefaultDrawer.d.ts +19 -0
  49. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  50. package/dist/core/EntityEditView.d.ts +40 -11
  51. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  52. package/dist/core/FireCMS.d.ts +3 -3
  53. package/dist/core/FireCMSRouter.d.ts +4 -0
  54. package/dist/core/NavigationRoutes.d.ts +2 -3
  55. package/dist/core/SideDialogs.d.ts +4 -2
  56. package/dist/core/index.d.ts +4 -4
  57. package/dist/form/EntityForm.d.ts +36 -64
  58. package/dist/form/EntityFormActions.d.ts +17 -0
  59. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  60. package/dist/form/components/ErrorFocus.d.ts +1 -1
  61. package/dist/form/components/FieldHelperText.d.ts +3 -3
  62. package/dist/form/components/FormEntry.d.ts +6 -0
  63. package/dist/form/components/FormLayout.d.ts +5 -0
  64. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  65. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  66. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  67. package/dist/form/components/index.d.ts +3 -1
  68. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  69. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  70. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  71. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  72. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  73. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  74. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  75. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  76. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  77. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  78. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  79. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
  80. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  81. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  82. package/dist/form/index.d.ts +16 -18
  83. package/dist/form/useClearRestoreValue.d.ts +2 -2
  84. package/dist/hooks/data/delete.d.ts +4 -4
  85. package/dist/hooks/data/save.d.ts +4 -5
  86. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  87. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  88. package/dist/hooks/index.d.ts +1 -0
  89. package/dist/hooks/useAuthController.d.ts +1 -1
  90. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  91. package/dist/hooks/useBuildNavigationController.d.ts +7 -12
  92. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  93. package/dist/hooks/useModeController.d.ts +1 -2
  94. package/dist/hooks/useProjectLog.d.ts +8 -2
  95. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  96. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  97. package/dist/index.d.ts +1 -0
  98. package/dist/index.es.js +21578 -13895
  99. package/dist/index.es.js.map +1 -1
  100. package/dist/index.umd.js +24366 -588
  101. package/dist/index.umd.js.map +1 -1
  102. package/dist/internal/useBuildDataSource.d.ts +3 -17
  103. package/dist/internal/useBuildSideEntityController.d.ts +3 -3
  104. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  105. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  106. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  107. package/dist/preview/components/ReferencePreview.d.ts +3 -2
  108. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  109. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  110. package/dist/preview/util.d.ts +3 -3
  111. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  112. package/dist/routes/FireCMSRoute.d.ts +1 -0
  113. package/dist/routes/HomePageRoute.d.ts +3 -0
  114. package/dist/types/auth.d.ts +8 -10
  115. package/dist/types/collections.d.ts +97 -23
  116. package/dist/types/datasource.d.ts +52 -36
  117. package/dist/types/dialogs_controller.d.ts +7 -3
  118. package/dist/types/entities.d.ts +7 -2
  119. package/dist/types/entity_actions.d.ts +28 -4
  120. package/dist/types/entity_callbacks.d.ts +16 -16
  121. package/dist/types/entity_overrides.d.ts +2 -2
  122. package/dist/types/export_import.d.ts +4 -4
  123. package/dist/types/fields.d.ts +74 -42
  124. package/dist/types/firecms.d.ts +8 -3
  125. package/dist/types/firecms_context.d.ts +1 -1
  126. package/dist/types/index.d.ts +0 -1
  127. package/dist/types/navigation.d.ts +41 -14
  128. package/dist/types/permissions.d.ts +4 -4
  129. package/dist/types/plugins.d.ts +36 -12
  130. package/dist/types/properties.d.ts +73 -24
  131. package/dist/types/property_config.d.ts +0 -2
  132. package/dist/types/side_dialogs_controller.d.ts +10 -0
  133. package/dist/types/side_entity_controller.d.ts +10 -1
  134. package/dist/types/storage.d.ts +86 -3
  135. package/dist/types/user.d.ts +1 -0
  136. package/dist/util/builders.d.ts +3 -3
  137. package/dist/util/callbacks.d.ts +2 -0
  138. package/dist/util/createFormexStub.d.ts +2 -0
  139. package/dist/util/entities.d.ts +3 -3
  140. package/dist/util/entity_actions.d.ts +2 -0
  141. package/dist/util/entity_cache.d.ts +23 -0
  142. package/dist/util/icon_list.d.ts +5 -1
  143. package/dist/util/icon_synonyms.d.ts +1 -98
  144. package/dist/util/icons.d.ts +6 -3
  145. package/dist/util/index.d.ts +3 -0
  146. package/dist/util/navigation_from_path.d.ts +6 -1
  147. package/dist/util/navigation_utils.d.ts +15 -3
  148. package/dist/util/objects.d.ts +2 -1
  149. package/dist/util/permissions.d.ts +4 -4
  150. package/dist/util/plurals.d.ts +0 -2
  151. package/dist/util/property_utils.d.ts +4 -4
  152. package/dist/util/references.d.ts +2 -2
  153. package/dist/util/resolutions.d.ts +41 -17
  154. package/dist/util/storage.d.ts +23 -2
  155. package/dist/util/useStorageUploadController.d.ts +3 -3
  156. package/package.json +62 -48
  157. package/src/app/AppBar.tsx +18 -0
  158. package/src/app/Drawer.tsx +24 -0
  159. package/src/app/Scaffold.tsx +253 -0
  160. package/src/app/index.ts +4 -0
  161. package/src/app/useApp.tsx +32 -0
  162. package/src/components/ArrayContainer.tsx +149 -46
  163. package/src/components/CircularProgressCenter.tsx +2 -2
  164. package/src/components/ClearFilterSortButton.tsx +41 -0
  165. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +11 -11
  166. package/src/components/DeleteEntityDialog.tsx +13 -20
  167. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +59 -40
  168. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
  169. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
  170. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +48 -40
  171. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  172. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
  173. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
  174. package/src/components/EntityCollectionTable/index.tsx +1 -1
  175. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +32 -37
  176. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
  177. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  178. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +84 -80
  179. package/src/components/EntityCollectionView/EntityCollectionView.tsx +229 -117
  180. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +4 -2
  181. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  182. package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
  183. package/src/components/EntityCollectionView/utils.ts +19 -0
  184. package/src/components/EntityJsonPreview.tsx +66 -0
  185. package/src/components/EntityPreview.tsx +80 -59
  186. package/src/components/EntityView.tsx +13 -10
  187. package/src/components/ErrorView.tsx +4 -4
  188. package/src/components/HomePage/DefaultHomePage.tsx +27 -20
  189. package/src/components/HomePage/FavouritesView.tsx +6 -11
  190. package/src/components/HomePage/NavigationCard.tsx +3 -3
  191. package/src/components/HomePage/NavigationCardBinding.tsx +5 -10
  192. package/src/components/HomePage/NavigationGroup.tsx +2 -2
  193. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  194. package/src/components/NotFoundPage.tsx +2 -2
  195. package/src/components/PropertyConfigBadge.tsx +9 -3
  196. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  197. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +21 -13
  198. package/src/components/ReferenceWidget.tsx +21 -11
  199. package/src/components/SearchIconsView.tsx +10 -7
  200. package/src/components/SelectableTable/SelectableTable.tsx +157 -145
  201. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  202. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
  203. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
  204. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -23
  205. package/src/components/UnsavedChangesDialog.tsx +42 -0
  206. package/src/components/VirtualTable/VirtualTable.tsx +130 -51
  207. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  208. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  209. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  210. package/src/components/VirtualTable/VirtualTableProps.tsx +33 -14
  211. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  212. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  213. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +3 -2
  214. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  215. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  216. package/src/components/VirtualTable/types.tsx +2 -3
  217. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +44 -40
  218. package/src/components/common/index.ts +2 -1
  219. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  220. package/src/components/common/types.tsx +4 -6
  221. package/src/components/common/useColumnsIds.tsx +24 -3
  222. package/src/components/common/useDataSourceTableController.tsx +420 -0
  223. package/src/components/common/useDebouncedCallback.tsx +20 -0
  224. package/src/components/common/useScrollRestoration.tsx +68 -0
  225. package/src/components/common/useTableSearchHelper.ts +53 -12
  226. package/src/components/index.tsx +6 -2
  227. package/src/contexts/BreacrumbsContext.tsx +38 -0
  228. package/src/contexts/DialogsProvider.tsx +5 -4
  229. package/src/contexts/ModeController.tsx +1 -3
  230. package/src/contexts/SnackbarProvider.tsx +2 -0
  231. package/src/core/DefaultAppBar.tsx +219 -0
  232. package/src/core/DefaultDrawer.tsx +185 -0
  233. package/src/core/DrawerNavigationItem.tsx +66 -0
  234. package/src/core/EntityEditView.tsx +406 -478
  235. package/src/core/EntityEditViewFormActions.tsx +199 -0
  236. package/src/core/EntitySidePanel.tsx +95 -19
  237. package/src/core/FireCMS.tsx +72 -58
  238. package/src/core/FireCMSRouter.tsx +17 -0
  239. package/src/core/NavigationRoutes.tsx +28 -38
  240. package/src/core/SideDialogs.tsx +22 -12
  241. package/src/core/field_configs.tsx +11 -12
  242. package/src/core/index.tsx +6 -5
  243. package/src/form/EntityForm.tsx +589 -535
  244. package/src/form/EntityFormActions.tsx +169 -0
  245. package/src/form/PropertyFieldBinding.tsx +89 -45
  246. package/src/form/components/CustomIdField.tsx +6 -2
  247. package/src/form/components/FieldHelperText.tsx +4 -4
  248. package/src/form/components/FormEntry.tsx +22 -0
  249. package/src/form/components/FormLayout.tsx +16 -0
  250. package/src/form/components/LabelWithIcon.tsx +30 -19
  251. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  252. package/src/form/components/StorageItemPreview.tsx +22 -12
  253. package/src/form/components/StorageUploadProgress.tsx +4 -5
  254. package/src/form/components/index.tsx +3 -1
  255. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +34 -19
  256. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +48 -35
  257. package/src/form/field_bindings/BlockFieldBinding.tsx +56 -34
  258. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  259. package/src/form/field_bindings/KeyValueFieldBinding.tsx +61 -52
  260. package/src/form/field_bindings/MapFieldBinding.tsx +71 -54
  261. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +157 -0
  262. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
  263. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  264. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  265. package/src/form/field_bindings/RepeatFieldBinding.tsx +62 -35
  266. package/src/form/field_bindings/SelectFieldBinding.tsx +23 -15
  267. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +47 -52
  268. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  269. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  270. package/src/form/index.tsx +16 -37
  271. package/src/form/useClearRestoreValue.tsx +2 -2
  272. package/src/form/validation.ts +13 -23
  273. package/src/hooks/data/delete.ts +6 -5
  274. package/src/hooks/data/save.ts +32 -33
  275. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  276. package/src/hooks/data/useDataSource.tsx +11 -3
  277. package/src/hooks/data/useEntityFetch.tsx +10 -6
  278. package/src/hooks/index.tsx +1 -0
  279. package/src/hooks/useAuthController.tsx +1 -1
  280. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  281. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  282. package/src/hooks/useBuildModeController.tsx +22 -29
  283. package/src/hooks/useBuildNavigationController.tsx +194 -68
  284. package/src/hooks/useFireCMSContext.tsx +3 -33
  285. package/src/hooks/useLargeLayout.tsx +0 -35
  286. package/src/hooks/useModeController.tsx +1 -2
  287. package/src/hooks/useProjectLog.tsx +32 -10
  288. package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
  289. package/src/hooks/useValidateAuthenticator.tsx +17 -37
  290. package/src/index.ts +1 -0
  291. package/src/internal/useBuildDataSource.ts +79 -85
  292. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  293. package/src/internal/useBuildSideEntityController.tsx +201 -75
  294. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  295. package/src/preview/PropertyPreview.tsx +20 -25
  296. package/src/preview/PropertyPreviewProps.tsx +7 -1
  297. package/src/preview/components/BooleanPreview.tsx +2 -2
  298. package/src/preview/components/EmptyValue.tsx +1 -1
  299. package/src/preview/components/EnumValuesChip.tsx +2 -2
  300. package/src/preview/components/ImagePreview.tsx +26 -37
  301. package/src/preview/components/ReferencePreview.tsx +23 -34
  302. package/src/preview/components/StorageThumbnail.tsx +5 -1
  303. package/src/preview/components/UrlComponentPreview.tsx +60 -28
  304. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -6
  305. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +7 -5
  306. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -4
  307. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -4
  308. package/src/preview/property_previews/ArrayOneOfPreview.tsx +7 -6
  309. package/src/preview/property_previews/ArrayPropertyPreview.tsx +7 -6
  310. package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
  311. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
  312. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  313. package/src/preview/util.ts +10 -10
  314. package/src/routes/CustomCMSRoute.tsx +21 -0
  315. package/src/routes/FireCMSRoute.tsx +246 -0
  316. package/src/routes/HomePageRoute.tsx +17 -0
  317. package/src/types/auth.tsx +9 -13
  318. package/src/types/collections.ts +118 -28
  319. package/src/types/customization_controller.tsx +0 -1
  320. package/src/types/datasource.ts +61 -43
  321. package/src/types/dialogs_controller.tsx +7 -3
  322. package/src/types/entities.ts +12 -2
  323. package/src/types/entity_actions.tsx +32 -7
  324. package/src/types/entity_callbacks.ts +18 -18
  325. package/src/types/entity_overrides.tsx +2 -2
  326. package/src/types/export_import.ts +4 -4
  327. package/src/types/fields.tsx +85 -46
  328. package/src/types/firecms.tsx +9 -4
  329. package/src/types/firecms_context.tsx +1 -1
  330. package/src/types/index.ts +0 -1
  331. package/src/types/navigation.ts +49 -18
  332. package/src/types/permissions.ts +5 -5
  333. package/src/types/plugins.tsx +42 -14
  334. package/src/types/properties.ts +87 -26
  335. package/src/types/property_config.tsx +0 -2
  336. package/src/types/side_dialogs_controller.tsx +15 -0
  337. package/src/types/side_entity_controller.tsx +11 -1
  338. package/src/types/storage.ts +94 -3
  339. package/src/types/user.ts +2 -0
  340. package/src/util/builders.ts +10 -8
  341. package/src/util/callbacks.ts +119 -0
  342. package/src/util/createFormexStub.tsx +62 -0
  343. package/src/util/entities.ts +9 -6
  344. package/src/util/entity_actions.ts +28 -0
  345. package/src/util/entity_cache.ts +204 -0
  346. package/src/util/enums.ts +1 -1
  347. package/src/util/icon_list.ts +16 -10
  348. package/src/util/icon_synonyms.ts +3 -100
  349. package/src/util/icons.tsx +17 -7
  350. package/src/util/index.ts +3 -0
  351. package/src/util/join_collections.ts +6 -1
  352. package/src/util/make_properties_editable.ts +13 -5
  353. package/src/util/navigation_from_path.ts +18 -7
  354. package/src/util/navigation_utils.ts +141 -25
  355. package/src/util/objects.ts +52 -28
  356. package/src/util/parent_references_from_path.ts +3 -3
  357. package/src/util/permissions.ts +9 -8
  358. package/src/util/plurals.ts +0 -2
  359. package/src/util/property_utils.tsx +17 -6
  360. package/src/util/references.ts +19 -8
  361. package/src/util/resolutions.ts +110 -48
  362. package/src/util/storage.ts +79 -21
  363. package/src/util/strings.ts +2 -2
  364. package/src/util/useStorageUploadController.tsx +91 -28
  365. package/dist/components/FireCMSAppBar.d.ts +0 -26
  366. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  367. package/dist/components/VirtualTable/common.d.ts +0 -2
  368. package/dist/core/Drawer.d.ts +0 -23
  369. package/dist/core/Scaffold.d.ts +0 -55
  370. package/dist/core/SideEntityView.d.ts +0 -7
  371. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  372. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  373. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  374. package/dist/internal/useLocaleConfig.d.ts +0 -1
  375. package/dist/types/appcheck.d.ts +0 -26
  376. package/src/components/FireCMSAppBar.tsx +0 -165
  377. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  378. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
  379. package/src/core/Drawer.tsx +0 -191
  380. package/src/core/Scaffold.tsx +0 -281
  381. package/src/core/SideEntityView.tsx +0 -38
  382. package/src/form/components/FormikArrayContainer.tsx +0 -44
  383. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  384. package/src/internal/useBuildCustomizationController.tsx +0 -5
  385. package/src/internal/useLocaleConfig.tsx +0 -18
  386. package/src/types/appcheck.ts +0 -29
  387. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -0,0 +1,199 @@
1
+ import React, { useMemo } from "react";
2
+ import { Entity, EntityAction, FireCMSContext, ResolvedEntityCollection, SideEntityController } from "../types";
3
+
4
+ import { copyEntityAction, deleteEntityAction } from "../components";
5
+ import { canCreateEntity, canDeleteEntity, mergeEntityActions } from "../util";
6
+ import { Button, cls, defaultBorderMixin, DialogActions, IconButton, LoadingButton, Typography } from "@firecms/ui";
7
+ import { useAuthController, useFireCMSContext, useSideEntityController } from "../hooks";
8
+ import { EntityFormActionsProps } from "../form/EntityFormActions";
9
+ import { SideDialogController, useSideDialogContext } from "./SideDialogs";
10
+
11
+ export function EntityEditViewFormActions({
12
+ collection,
13
+ path,
14
+ entity,
15
+ layout,
16
+ savingError,
17
+ formex,
18
+ disabled,
19
+ status,
20
+ pluginActions,
21
+ openEntityMode,
22
+ showDefaultActions = true
23
+ }: EntityFormActionsProps) {
24
+
25
+ const authController = useAuthController();
26
+ const context = useFireCMSContext();
27
+ const sideEntityController = useSideEntityController();
28
+ const sideDialogContext = useSideDialogContext();
29
+
30
+ const entityActions = useMemo((): EntityAction[] => {
31
+ const customEntityActions = collection.entityActions
32
+ const createEnabled = canCreateEntity(collection, authController, path, null);
33
+ const deleteEnabled = entity ? canDeleteEntity(collection, authController, path, entity) : false;
34
+ const actions: EntityAction[] = [];
35
+ if (createEnabled)
36
+ actions.push(copyEntityAction);
37
+ if (deleteEnabled)
38
+ actions.push(deleteEntityAction);
39
+ if (customEntityActions)
40
+ return mergeEntityActions(actions, customEntityActions);
41
+ return actions;
42
+ }, [authController, collection, path]);
43
+
44
+ const formActions = showDefaultActions ? entityActions.filter(a => a.includeInForm === undefined || a.includeInForm) : [];
45
+
46
+ return layout === "bottom"
47
+ ? buildBottomActions({
48
+ savingError,
49
+ entity,
50
+ formActions,
51
+ collection,
52
+ context,
53
+ sideEntityController,
54
+ isSubmitting: formex.isSubmitting,
55
+ disabled,
56
+ status,
57
+ sideDialogContext,
58
+ pluginActions,
59
+ openEntityMode,
60
+ })
61
+ : buildSideActions({
62
+ savingError,
63
+ entity,
64
+ formActions,
65
+ collection,
66
+ context,
67
+ sideEntityController,
68
+ isSubmitting: formex.isSubmitting,
69
+ sideDialogContext,
70
+ disabled,
71
+ status,
72
+ pluginActions,
73
+ openEntityMode,
74
+ });
75
+ }
76
+
77
+ type ActionsViewProps<M extends object> = {
78
+ savingError: Error | undefined,
79
+ entity: Entity<M> | undefined,
80
+ formActions: EntityAction[],
81
+ collection: ResolvedEntityCollection,
82
+ context: FireCMSContext,
83
+ sideEntityController: SideEntityController,
84
+ isSubmitting: boolean,
85
+ disabled: boolean,
86
+ status: "new" | "existing" | "copy",
87
+ sideDialogContext: SideDialogController,
88
+ pluginActions?: React.ReactNode[],
89
+ openEntityMode: "side_panel" | "full_screen";
90
+ };
91
+
92
+ function buildBottomActions<M extends object>({
93
+ savingError,
94
+ entity,
95
+ formActions,
96
+ collection,
97
+ context,
98
+ sideEntityController,
99
+ isSubmitting,
100
+ disabled,
101
+ status,
102
+ sideDialogContext,
103
+ pluginActions,
104
+ openEntityMode,
105
+ }: ActionsViewProps<M>) {
106
+
107
+ const canClose = openEntityMode === "side_panel";
108
+ return <DialogActions position={"absolute"}>
109
+ {savingError &&
110
+ <div className="text-right">
111
+ <Typography color={"error"}>{savingError.message}</Typography>
112
+ </div>
113
+ }
114
+ {entity && formActions.length > 0 && <div className="flex-grow flex overflow-auto no-scrollbar">
115
+ {formActions.map(action => (
116
+ <IconButton
117
+ key={action.name}
118
+ color="primary"
119
+ onClick={(event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
120
+ event.stopPropagation();
121
+ if (entity)
122
+ action.onClick({
123
+ entity,
124
+ fullPath: collection.path,
125
+ collection: collection,
126
+ context,
127
+ sideEntityController,
128
+ openEntityMode: openEntityMode
129
+ });
130
+ }}>
131
+ {action.icon}
132
+ </IconButton>
133
+ ))}
134
+ </div>}
135
+ {pluginActions}
136
+ <Button variant="text" disabled={disabled || isSubmitting} type="reset">
137
+ {status === "existing" ? "Discard" : "Clear"}
138
+ </Button>
139
+ <Button variant={canClose ? "text" : "filled"} color="primary" type="submit"
140
+ disabled={disabled || isSubmitting}
141
+ onClick={() => {
142
+ sideDialogContext.setPendingClose(false);
143
+ }}>
144
+ {status === "existing" && "Save"}
145
+ {status === "copy" && "Create copy"}
146
+ {status === "new" && "Create"}
147
+ </Button>
148
+ {canClose && <LoadingButton variant="filled"
149
+ color="primary"
150
+ type="submit"
151
+ loading={isSubmitting}
152
+ disabled={disabled}
153
+ onClick={() => {
154
+ sideDialogContext.setPendingClose?.(true);
155
+ }}>
156
+ {status === "existing" && "Save and close"}
157
+ {status === "copy" && "Create copy and close"}
158
+ {status === "new" && "Create and close"}
159
+ </LoadingButton>}
160
+ </DialogActions>;
161
+ }
162
+
163
+ function buildSideActions<M extends object>({
164
+ savingError,
165
+ entity,
166
+ formActions,
167
+ collection,
168
+ context,
169
+ sideEntityController,
170
+ isSubmitting,
171
+ disabled,
172
+ status,
173
+ sideDialogContext,
174
+ pluginActions
175
+ }: ActionsViewProps<M>) {
176
+
177
+ return <div
178
+ className={cls("overflow-auto h-full flex flex-col gap-2 w-80 2xl:w-96 px-4 py-16 sticky top-0 border-l", defaultBorderMixin)}>
179
+ <LoadingButton fullWidth={true} variant="filled" color="primary" type="submit" size={"large"}
180
+ disabled={disabled || isSubmitting} onClick={() => {
181
+ sideDialogContext.setPendingClose?.(false);
182
+ }}>
183
+ {status === "existing" && "Save"}
184
+ {status === "copy" && "Create copy"}
185
+ {status === "new" && "Create"}
186
+ </LoadingButton>
187
+ <Button fullWidth={true} variant="text" disabled={disabled || isSubmitting} type="reset">
188
+ {status === "existing" ? "Discard" : "Clear"}
189
+ </Button>
190
+
191
+ {pluginActions}
192
+
193
+ {savingError &&
194
+ <div className="text-right">
195
+ <Typography color={"error"}>{savingError.message}</Typography>
196
+ </div>
197
+ }
198
+ </div>;
199
+ }
@@ -1,11 +1,13 @@
1
1
  import React, { useCallback, useEffect, useMemo } from "react";
2
2
 
3
3
  import { EntitySidePanelProps } from "../types";
4
- import { useNavigationController } from "../hooks";
4
+ import { useNavigationController, useSideEntityController } from "../hooks";
5
5
 
6
6
  import { ErrorBoundary } from "../components";
7
- import { EntityEditView } from "./EntityEditView";
7
+ import { EntityEditView, OnUpdateParams } from "./EntityEditView";
8
8
  import { useSideDialogContext } from "./SideDialogs";
9
+ import { CloseIcon, IconButton, OpenInFullIcon } from "@firecms/ui";
10
+ import { useLocation, useNavigate } from "react-router-dom";
9
11
 
10
12
  /**
11
13
  * This is the component in charge of rendering the side dialog used
@@ -17,33 +19,74 @@ import { useSideDialogContext } from "./SideDialogs";
17
19
  */
18
20
  export function EntitySidePanel(props: EntitySidePanelProps) {
19
21
 
22
+ const {
23
+ allowFullScreen = true,
24
+ path,
25
+ entityId,
26
+ formProps,
27
+ } = props;
28
+
20
29
  const {
21
30
  blocked,
22
31
  setBlocked,
23
- setBlockedNavigationMessage
32
+ setBlockedNavigationMessage,
33
+ close,
24
34
  } = useSideDialogContext();
25
35
 
36
+ const navigate = useNavigate();
37
+ const location = useLocation();
38
+
39
+ const sideEntityController = useSideEntityController();
26
40
  const navigationController = useNavigationController();
41
+ const sideDialogsController = useSideDialogContext();
42
+
43
+ const onClose = () => {
44
+ if (props.onClose) {
45
+ props.onClose();
46
+ }
47
+
48
+ setBlocked(false);
49
+ close(true);
50
+ }
51
+
52
+ const onUpdate = (params: OnUpdateParams) => {
53
+ if (props.onUpdate) {
54
+ props.onUpdate(params);
55
+ }
56
+ if (params.status !== "existing") {
57
+ sideEntityController.replace({
58
+ path: params.path,
59
+ entityId: params.entityId,
60
+ selectedTab: params.selectedTab,
61
+ updateUrl: true,
62
+ collection: params.collection,
63
+ });
64
+ }
65
+
66
+ if (sideDialogsController.pendingClose) {
67
+ sideDialogsController.setPendingClose(false);
68
+ onClose();
69
+ }
70
+
71
+ }
27
72
 
28
73
  const parentCollectionIds = useMemo(() => {
29
- return navigationController.getParentCollectionIds(props.path);
30
- }, [navigationController, props.path]);
74
+ return navigationController.getParentCollectionIds(path);
75
+ }, [navigationController, path]);
31
76
 
32
77
  const collection = useMemo(() => {
33
- if (!props) return undefined;
34
- let usedCollection = props.collection;
78
+ if (props.collection) {
79
+ return props.collection;
80
+ }
35
81
 
36
- const registryCollection = navigationController.getCollection(props.path, props.entityId);
82
+ const registryCollection = navigationController.getCollection(path);
37
83
  if (registryCollection) {
38
- usedCollection = registryCollection;
39
- }
40
- if (!usedCollection) {
41
- console.error("ERROR: No collection found in path `", props.path, "`. Entity id: ", props.entityId);
42
- throw Error("ERROR: No collection found in path `" + props.path + "`. Make sure you have defined a collection for this path in the root navigation.");
84
+ return registryCollection;
43
85
  }
44
86
 
45
- return usedCollection;
46
- }, [navigationController, props]);
87
+ console.error("ERROR: No collection found in path `", path, "`. Entity id: ", entityId);
88
+ throw Error("ERROR: No collection found in path `" + path + "`. Make sure you have defined a collection for this path in the root navigation.");
89
+ }, [navigationController, props.collection]);
47
90
 
48
91
  useEffect(() => {
49
92
  function beforeunload(e: any) {
@@ -63,11 +106,11 @@ export function EntitySidePanel(props: EntitySidePanelProps) {
63
106
 
64
107
  }, [blocked, collection]);
65
108
 
66
- const onValuesAreModified = useCallback((modified: boolean) => {
67
- setBlocked(modified);
109
+ const onValuesModified = useCallback((modified: boolean) => {
68
110
  setBlockedNavigationMessage(modified
69
111
  ? <> You have unsaved changes in this <b>{collection?.singularName ?? collection?.name}</b>.</>
70
112
  : undefined)
113
+ setBlocked(modified);
71
114
  }, [collection?.name, setBlocked, setBlockedNavigationMessage]);
72
115
 
73
116
  if (!props || !collection) {
@@ -79,10 +122,43 @@ export function EntitySidePanel(props: EntitySidePanelProps) {
79
122
  <ErrorBoundary>
80
123
  <EntityEditView
81
124
  {...props}
82
- formWidth={props.width}
125
+ layout={"side_panel"}
83
126
  collection={collection}
84
127
  parentCollectionIds={parentCollectionIds}
85
- onValuesAreModified={onValuesAreModified}
128
+ onValuesModified={onValuesModified}
129
+ onSaved={onUpdate}
130
+ barActions={<>
131
+ <IconButton
132
+ className="self-center"
133
+ onClick={onClose}>
134
+ <CloseIcon size={"small"}/>
135
+ </IconButton>
136
+ {allowFullScreen && <IconButton
137
+ className="self-center"
138
+ onClick={() => {
139
+ if (entityId)
140
+ navigate(location.pathname);
141
+ else
142
+ navigate(location.pathname + "#new");
143
+ }}>
144
+ <OpenInFullIcon size={"small"}/>
145
+ </IconButton>}
146
+ </>}
147
+ onTabChange={({
148
+ path,
149
+ entityId,
150
+ selectedTab,
151
+ collection,
152
+ }) => {
153
+ sideEntityController.replace({
154
+ path,
155
+ entityId,
156
+ selectedTab,
157
+ updateUrl: true,
158
+ collection,
159
+ });
160
+ }}
161
+ formProps={formProps}
86
162
  />
87
163
  </ErrorBoundary>
88
164
 
@@ -1,9 +1,11 @@
1
- import React, { useMemo } from "react";
1
+ "use client";
2
2
 
3
- import { EntityCollection, FireCMSContext, FireCMSPlugin, FireCMSProps, User } from "../types";
4
- import { AuthControllerContext, ModeControllerContext } from "../contexts";
3
+ import React, { useMemo } from "react";
4
+ import { CenteredView, Typography } from "@firecms/ui";
5
+ import { CustomizationController, FireCMSContext, FireCMSPlugin, FireCMSProps, User } from "../types";
6
+ import { AuthControllerContext } from "../contexts";
5
7
  import { useBuildSideEntityController } from "../internal/useBuildSideEntityController";
6
- import { useCustomizationController, useFireCMSContext, useModeController } from "../hooks";
8
+ import { useCustomizationController, useFireCMSContext } from "../hooks";
7
9
  import { useBuildSideDialogsController } from "../internal/useBuildSideDialogsController";
8
10
  import { ErrorView } from "../components";
9
11
  import { StorageSourceContext } from "../contexts/StorageSourceContext";
@@ -12,14 +14,12 @@ import { DataSourceContext } from "../contexts/DataSourceContext";
12
14
  import { SideEntityControllerContext } from "../contexts/SideEntityControllerContext";
13
15
  import { NavigationContext } from "../contexts/NavigationContext";
14
16
  import { SideDialogsControllerContext } from "../contexts/SideDialogsControllerContext";
15
- import { useLocaleConfig } from "../internal/useLocaleConfig";
16
- import { CenteredView, Typography } from "@firecms/ui";
17
17
  import { DialogsProvider } from "../contexts/DialogsProvider";
18
18
  import { useBuildDataSource } from "../internal/useBuildDataSource";
19
- import { useBuildCustomizationController } from "../internal/useBuildCustomizationController";
20
19
  import { CustomizationControllerContext } from "../contexts/CustomizationControllerContext";
21
20
  import { AnalyticsContext } from "../contexts/AnalyticsContext";
22
21
  import { useProjectLog } from "../hooks/useProjectLog";
22
+ import { BreadcrumbsProvider } from "../contexts/BreacrumbsContext";
23
23
 
24
24
  /**
25
25
  * If you are using independent components of the CMS
@@ -30,12 +30,11 @@ import { useProjectLog } from "../hooks/useProjectLog";
30
30
  *
31
31
  * You only need to use this component if you are building a custom app.
32
32
  *
33
- * @constructor
33
+
34
34
  * @group Core
35
35
  */
36
- export function FireCMS<UserType extends User, EC extends EntityCollection>(props: FireCMSProps<UserType, EC>) {
36
+ export function FireCMS<USER extends User>(props: FireCMSProps<USER>) {
37
37
 
38
- const modeController = useModeController();
39
38
  const {
40
39
  children,
41
40
  entityLinkBuilder,
@@ -45,33 +44,29 @@ export function FireCMS<UserType extends User, EC extends EntityCollection>(prop
45
44
  authController,
46
45
  storageSource,
47
46
  dataSourceDelegate,
48
- plugins,
47
+ plugins: pluginsProp,
49
48
  onAnalyticsEvent,
50
49
  propertyConfigs,
51
50
  entityViews,
52
51
  components,
53
52
  navigationController,
53
+ apiKey
54
54
  } = props;
55
55
 
56
- useLocaleConfig(locale);
56
+ if (pluginsProp) {
57
+ console.warn("The `plugins` prop is deprecated in the FireCMS component. You should pass your plugins to `useBuildNavigationController` instead.");
58
+ }
57
59
 
58
- /**
59
- * Controller in charge of fetching and persisting data
60
- */
61
- const dataSource = useBuildDataSource({
62
- delegate: dataSourceDelegate,
63
- propertyConfigs,
64
- navigationController
65
- });
60
+ const plugins = navigationController.plugins ?? pluginsProp;
66
61
 
67
62
  const sideDialogsController = useBuildSideDialogsController();
68
- const sideEntityController = useBuildSideEntityController(navigationController, sideDialogsController);
63
+ const sideEntityController = useBuildSideEntityController(navigationController, sideDialogsController, authController);
69
64
 
70
65
  const pluginsLoading = plugins?.some(p => p.loading) ?? false;
71
66
 
72
67
  const loading = authController.initialLoading || navigationController.loading || pluginsLoading;
73
68
 
74
- const customizationController = useBuildCustomizationController({
69
+ const customizationController: CustomizationController = {
75
70
  dateTimeFormat,
76
71
  locale,
77
72
  entityLinkBuilder,
@@ -79,13 +74,32 @@ export function FireCMS<UserType extends User, EC extends EntityCollection>(prop
79
74
  entityViews: entityViews ?? [],
80
75
  propertyConfigs: propertyConfigs ?? {},
81
76
  components
82
- });
77
+ };
83
78
 
84
79
  const analyticsController = useMemo(() => ({
85
80
  onAnalyticsEvent
86
81
  }), []);
87
82
 
88
- const accessResponse = useProjectLog(authController, plugins);
83
+ const accessResponse = useProjectLog({
84
+ apiKey,
85
+ authController,
86
+ dataSourceDelegate,
87
+ plugins
88
+ });
89
+
90
+ /**
91
+ * Controller in charge of fetching and persisting data
92
+ */
93
+ const dataSource = useBuildDataSource({
94
+ delegate: dataSourceDelegate,
95
+ propertyConfigs,
96
+ navigationController,
97
+ authController
98
+ });
99
+
100
+ if (accessResponse?.message) {
101
+ console.warn(accessResponse.message);
102
+ }
89
103
 
90
104
  if (navigationController.navigationLoadingError) {
91
105
  return (
@@ -109,54 +123,54 @@ export function FireCMS<UserType extends User, EC extends EntityCollection>(prop
109
123
 
110
124
  if (accessResponse?.blocked) {
111
125
  return (
112
- <CenteredView maxWidth={"md"} fullScreen={true}>
113
- <Typography variant={"h4"}>
114
- Access blocked
126
+ <CenteredView maxWidth={"md"} fullScreen={true} className={"flex flex-col gap-2"}>
127
+ <Typography variant={"h4"} gutterBottom>
128
+ License needed
115
129
  </Typography>
116
130
  <Typography>
117
- This app has been blocked. Please reach out at <a
131
+ You need a valid license to use FireCMS PRO. Please reach out at <a
118
132
  href={"mailto:hello@firecms.co"}>hello@firecms.co</a> for more information.
119
133
  </Typography>
120
134
  {accessResponse?.message &&
121
- <Typography>Response from the server: {accessResponse?.message}</Typography>}
135
+ <Typography>{accessResponse?.message}</Typography>}
122
136
  </CenteredView>
123
137
  );
124
138
  }
125
139
 
126
140
  return (
127
- <ModeControllerContext.Provider value={modeController}>
128
- <AnalyticsContext.Provider value={analyticsController}>
129
- <CustomizationControllerContext.Provider value={customizationController}>
130
- <UserConfigurationPersistenceContext.Provider
131
- value={userConfigPersistence}>
132
- <StorageSourceContext.Provider
133
- value={storageSource}>
134
- <DataSourceContext.Provider
135
- value={dataSource}>
136
- <AuthControllerContext.Provider
137
- value={authController}>
138
- <SideDialogsControllerContext.Provider
139
- value={sideDialogsController}>
140
- <SideEntityControllerContext.Provider
141
- value={sideEntityController}>
142
- <NavigationContext.Provider
143
- value={navigationController}>
144
- <DialogsProvider>
141
+ <AnalyticsContext.Provider value={analyticsController}>
142
+ <CustomizationControllerContext.Provider value={customizationController}>
143
+ <UserConfigurationPersistenceContext.Provider
144
+ value={userConfigPersistence}>
145
+ <StorageSourceContext.Provider
146
+ value={storageSource}>
147
+ <DataSourceContext.Provider
148
+ value={dataSource}>
149
+ <AuthControllerContext.Provider
150
+ value={authController}>
151
+ <SideDialogsControllerContext.Provider
152
+ value={sideDialogsController}>
153
+ <SideEntityControllerContext.Provider
154
+ value={sideEntityController}>
155
+ <NavigationContext.Provider
156
+ value={navigationController}>
157
+ <DialogsProvider>
158
+ <BreadcrumbsProvider>
145
159
  <FireCMSInternal
146
160
  loading={loading}>
147
161
  {children}
148
162
  </FireCMSInternal>
149
- </DialogsProvider>
150
- </NavigationContext.Provider>
151
- </SideEntityControllerContext.Provider>
152
- </SideDialogsControllerContext.Provider>
153
- </AuthControllerContext.Provider>
154
- </DataSourceContext.Provider>
155
- </StorageSourceContext.Provider>
156
- </UserConfigurationPersistenceContext.Provider>
157
- </CustomizationControllerContext.Provider>
158
- </AnalyticsContext.Provider>
159
- </ModeControllerContext.Provider>
163
+ </BreadcrumbsProvider>
164
+ </DialogsProvider>
165
+ </NavigationContext.Provider>
166
+ </SideEntityControllerContext.Provider>
167
+ </SideDialogsControllerContext.Provider>
168
+ </AuthControllerContext.Provider>
169
+ </DataSourceContext.Provider>
170
+ </StorageSourceContext.Provider>
171
+ </UserConfigurationPersistenceContext.Provider>
172
+ </CustomizationControllerContext.Provider>
173
+ </AnalyticsContext.Provider>
160
174
  );
161
175
 
162
176
  }
@@ -0,0 +1,17 @@
1
+ import { createBrowserRouter, RouterProvider } from "react-router-dom"
2
+ import { removeInitialAndTrailingSlashes } from "../util";
3
+
4
+ export function FireCMSRouter({
5
+ children,
6
+ basePath
7
+ }: {
8
+ children: React.ReactNode,
9
+ basePath?: string;
10
+ }) {
11
+ return <RouterProvider router={createBrowserRouter([
12
+ {
13
+ path: basePath ? `${removeInitialAndTrailingSlashes(basePath)}/*` : "/*",
14
+ element: children
15
+ }
16
+ ])}/>;
17
+ }