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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (371) hide show
  1. package/README.md +2 -2
  2. package/dist/app/Drawer.d.ts +0 -1
  3. package/dist/app/Scaffold.d.ts +4 -0
  4. package/dist/components/ArrayContainer.d.ts +31 -12
  5. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  6. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +3 -1
  7. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
  8. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +17 -3
  9. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +1 -1
  10. package/dist/components/EntityCollectionTable/index.d.ts +1 -1
  11. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +6 -3
  12. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +8 -0
  13. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  14. package/dist/components/EntityJsonPreview.d.ts +3 -0
  15. package/dist/components/EntityPreview.d.ts +8 -6
  16. package/dist/components/HomePage/DefaultHomePage.d.ts +2 -15
  17. package/dist/components/HomePage/HomePageDnD.d.ts +76 -0
  18. package/dist/components/HomePage/NavigationCard.d.ts +3 -1
  19. package/dist/components/HomePage/NavigationCardBinding.d.ts +3 -2
  20. package/dist/components/HomePage/NavigationGroup.d.ts +8 -1
  21. package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
  22. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  23. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  24. package/dist/components/SelectableTable/SelectableTable.d.ts +13 -3
  25. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +1 -1
  26. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  27. package/dist/components/UserDisplay.d.ts +7 -0
  28. package/dist/components/VirtualTable/VirtualTableProps.d.ts +11 -2
  29. package/dist/components/VirtualTable/fields/VirtualTableUserSelect.d.ts +12 -0
  30. package/dist/components/common/default_entity_actions.d.ts +0 -2
  31. package/dist/components/common/index.d.ts +1 -1
  32. package/dist/components/common/useColumnsIds.d.ts +1 -0
  33. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +10 -2
  34. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  35. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  36. package/dist/components/index.d.ts +3 -1
  37. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  38. package/dist/contexts/InternalUserManagementContext.d.ts +3 -0
  39. package/dist/core/DefaultAppBar.d.ts +8 -2
  40. package/dist/core/DrawerNavigationItem.d.ts +2 -1
  41. package/dist/core/EntityEditView.d.ts +40 -22
  42. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  43. package/dist/core/FireCMS.d.ts +2 -3
  44. package/dist/core/FireCMSRouter.d.ts +4 -0
  45. package/dist/core/NavigationRoutes.d.ts +0 -1
  46. package/dist/core/SideDialogs.d.ts +4 -2
  47. package/dist/core/field_configs.d.ts +1 -1
  48. package/dist/core/index.d.ts +2 -1
  49. package/dist/form/EntityForm.d.ts +50 -0
  50. package/dist/form/EntityFormActions.d.ts +21 -0
  51. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  52. package/dist/form/components/FormEntry.d.ts +6 -0
  53. package/dist/form/components/FormLayout.d.ts +5 -0
  54. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  55. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  56. package/dist/form/components/index.d.ts +3 -1
  57. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  58. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  59. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  60. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  61. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  62. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  63. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  64. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  65. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +9 -0
  66. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  67. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  68. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  69. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +4 -10
  70. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  71. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  72. package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +12 -0
  73. package/dist/form/index.d.ts +17 -16
  74. package/dist/form/useClearRestoreValue.d.ts +2 -2
  75. package/dist/hooks/data/delete.d.ts +4 -4
  76. package/dist/hooks/data/save.d.ts +3 -3
  77. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  78. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  79. package/dist/hooks/index.d.ts +2 -0
  80. package/dist/hooks/useAuthController.d.ts +1 -1
  81. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  82. package/dist/hooks/useBuildNavigationController.d.ts +57 -12
  83. package/dist/hooks/useCollapsedGroups.d.ts +9 -0
  84. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  85. package/dist/hooks/useInternalUserManagementController.d.ts +12 -0
  86. package/dist/hooks/useModeController.d.ts +1 -2
  87. package/dist/hooks/useProjectLog.d.ts +7 -1
  88. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  89. package/dist/hooks/useValidateAuthenticator.d.ts +3 -3
  90. package/dist/index.es.js +20480 -14434
  91. package/dist/index.es.js.map +1 -1
  92. package/dist/index.umd.js +20250 -14209
  93. package/dist/index.umd.js.map +1 -1
  94. package/dist/internal/useBuildDataSource.d.ts +3 -2
  95. package/dist/internal/useBuildSideEntityController.d.ts +3 -3
  96. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  97. package/dist/preview/PropertyPreviewProps.d.ts +1 -1
  98. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  99. package/dist/preview/components/ReferencePreview.d.ts +2 -2
  100. package/dist/preview/components/UserPreview.d.ts +8 -0
  101. package/dist/preview/index.d.ts +1 -0
  102. package/dist/preview/util.d.ts +3 -3
  103. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  104. package/dist/routes/FireCMSRoute.d.ts +1 -0
  105. package/dist/routes/HomePageRoute.d.ts +3 -0
  106. package/dist/types/analytics.d.ts +1 -1
  107. package/dist/types/auth.d.ts +7 -9
  108. package/dist/types/collections.d.ts +88 -25
  109. package/dist/types/customization_controller.d.ts +8 -0
  110. package/dist/types/datasource.d.ts +19 -17
  111. package/dist/types/dialogs_controller.d.ts +7 -3
  112. package/dist/types/entities.d.ts +7 -2
  113. package/dist/types/entity_actions.d.ts +58 -8
  114. package/dist/types/entity_callbacks.d.ts +16 -16
  115. package/dist/types/entity_overrides.d.ts +2 -2
  116. package/dist/types/export_import.d.ts +4 -4
  117. package/dist/types/fields.d.ts +43 -17
  118. package/dist/types/firecms.d.ts +31 -3
  119. package/dist/types/firecms_context.d.ts +17 -1
  120. package/dist/types/index.d.ts +1 -0
  121. package/dist/types/internal_user_management.d.ts +20 -0
  122. package/dist/types/navigation.d.ts +60 -17
  123. package/dist/types/permissions.d.ts +4 -4
  124. package/dist/types/plugins.d.ts +44 -9
  125. package/dist/types/properties.d.ts +74 -22
  126. package/dist/types/property_config.d.ts +1 -3
  127. package/dist/types/roles.d.ts +3 -0
  128. package/dist/types/side_dialogs_controller.d.ts +10 -0
  129. package/dist/types/side_entity_controller.d.ts +14 -1
  130. package/dist/types/storage.d.ts +75 -0
  131. package/dist/types/user.d.ts +2 -1
  132. package/dist/util/builders.d.ts +3 -3
  133. package/dist/util/callbacks.d.ts +2 -0
  134. package/dist/util/createFormexStub.d.ts +2 -0
  135. package/dist/util/entities.d.ts +2 -2
  136. package/dist/util/entity_actions.d.ts +2 -0
  137. package/dist/util/entity_cache.d.ts +23 -0
  138. package/dist/util/icon_synonyms.d.ts +0 -1
  139. package/dist/util/icons.d.ts +5 -2
  140. package/dist/util/index.d.ts +3 -0
  141. package/dist/util/navigation_from_path.d.ts +10 -1
  142. package/dist/util/navigation_utils.d.ts +13 -1
  143. package/dist/util/objects.d.ts +2 -1
  144. package/dist/util/permissions.d.ts +4 -4
  145. package/dist/util/property_utils.d.ts +4 -4
  146. package/dist/util/references.d.ts +2 -2
  147. package/dist/util/resolutions.d.ts +30 -6
  148. package/dist/util/storage.d.ts +1 -1
  149. package/dist/util/useStorageUploadController.d.ts +2 -2
  150. package/package.json +133 -125
  151. package/src/app/Drawer.tsx +0 -1
  152. package/src/app/Scaffold.tsx +33 -29
  153. package/src/components/ArrayContainer.tsx +447 -229
  154. package/src/components/CircularProgressCenter.tsx +1 -1
  155. package/src/components/ClearFilterSortButton.tsx +1 -1
  156. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +12 -11
  157. package/src/components/DeleteEntityDialog.tsx +13 -20
  158. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +59 -25
  159. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +23 -17
  160. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +20 -3
  161. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -9
  162. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +21 -16
  163. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +6 -12
  164. package/src/components/EntityCollectionTable/index.tsx +1 -1
  165. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +6 -6
  166. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +35 -26
  167. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  168. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +132 -101
  169. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
  170. package/src/components/EntityCollectionView/EntityCollectionView.tsx +178 -85
  171. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +7 -4
  172. package/src/components/EntityCollectionView/useSelectionController.tsx +5 -4
  173. package/src/components/EntityCollectionView/utils.ts +19 -0
  174. package/src/components/EntityJsonPreview.tsx +66 -0
  175. package/src/components/EntityPreview.tsx +75 -57
  176. package/src/components/EntityView.tsx +8 -5
  177. package/src/components/ErrorView.tsx +3 -3
  178. package/src/components/FireCMSLogo.tsx +7 -51
  179. package/src/components/HomePage/DefaultHomePage.tsx +506 -161
  180. package/src/components/HomePage/FavouritesView.tsx +9 -14
  181. package/src/components/HomePage/HomePageDnD.tsx +600 -0
  182. package/src/components/HomePage/NavigationCard.tsx +47 -38
  183. package/src/components/HomePage/NavigationCardBinding.tsx +16 -15
  184. package/src/components/HomePage/NavigationGroup.tsx +144 -30
  185. package/src/components/HomePage/RenameGroupDialog.tsx +123 -0
  186. package/src/components/HomePage/SmallNavigationCard.tsx +1 -2
  187. package/src/components/NotFoundPage.tsx +2 -2
  188. package/src/components/PropertyConfigBadge.tsx +10 -4
  189. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  190. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +22 -13
  191. package/src/components/SearchIconsView.tsx +2 -2
  192. package/src/components/SelectableTable/SelectableTable.tsx +154 -142
  193. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +4 -2
  194. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +10 -8
  195. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +60 -11
  196. package/src/components/UnsavedChangesDialog.tsx +46 -0
  197. package/src/components/UserDisplay.tsx +55 -0
  198. package/src/components/VirtualTable/VirtualTable.tsx +65 -44
  199. package/src/components/VirtualTable/VirtualTableCell.tsx +0 -8
  200. package/src/components/VirtualTable/VirtualTableHeader.tsx +8 -8
  201. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +1 -1
  202. package/src/components/VirtualTable/VirtualTableProps.tsx +12 -2
  203. package/src/components/VirtualTable/VirtualTableRow.tsx +1 -1
  204. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
  205. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -2
  206. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  207. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  208. package/src/components/VirtualTable/fields/VirtualTableUserSelect.tsx +99 -0
  209. package/src/components/common/default_entity_actions.tsx +62 -42
  210. package/src/components/common/index.ts +1 -1
  211. package/src/components/common/useColumnsIds.tsx +2 -9
  212. package/src/components/common/useDataSourceTableController.tsx +420 -0
  213. package/src/components/common/useDebouncedCallback.tsx +20 -0
  214. package/src/components/common/useScrollRestoration.tsx +68 -0
  215. package/src/components/common/useTableSearchHelper.ts +1 -0
  216. package/src/components/index.tsx +4 -1
  217. package/src/contexts/BreacrumbsContext.tsx +38 -0
  218. package/src/contexts/DialogsProvider.tsx +3 -2
  219. package/src/contexts/InternalUserManagementContext.tsx +4 -0
  220. package/src/contexts/ModeController.tsx +1 -3
  221. package/src/contexts/SnackbarProvider.tsx +2 -0
  222. package/src/core/DefaultAppBar.tsx +124 -85
  223. package/src/core/DefaultDrawer.tsx +30 -22
  224. package/src/core/DrawerNavigationItem.tsx +32 -28
  225. package/src/core/EntityEditView.tsx +388 -995
  226. package/src/core/EntityEditViewFormActions.tsx +329 -0
  227. package/src/core/EntitySidePanel.tsx +88 -20
  228. package/src/core/FireCMS.tsx +58 -28
  229. package/src/core/FireCMSRouter.tsx +17 -0
  230. package/src/core/NavigationRoutes.tsx +23 -32
  231. package/src/core/SideDialogs.tsx +22 -12
  232. package/src/core/field_configs.tsx +39 -11
  233. package/src/core/index.tsx +4 -2
  234. package/src/form/EntityForm.tsx +814 -0
  235. package/src/form/EntityFormActions.tsx +211 -0
  236. package/src/form/PropertyFieldBinding.tsx +59 -41
  237. package/src/form/components/CustomIdField.tsx +9 -3
  238. package/src/form/components/FieldHelperText.tsx +1 -1
  239. package/src/form/components/FormEntry.tsx +22 -0
  240. package/src/form/components/FormLayout.tsx +16 -0
  241. package/src/form/components/LabelWithIcon.tsx +30 -19
  242. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  243. package/src/form/components/StorageItemPreview.tsx +5 -4
  244. package/src/form/components/StorageUploadProgress.tsx +2 -3
  245. package/src/form/components/index.tsx +3 -1
  246. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +30 -18
  247. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +47 -36
  248. package/src/form/field_bindings/BlockFieldBinding.tsx +55 -33
  249. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  250. package/src/form/field_bindings/KeyValueFieldBinding.tsx +19 -15
  251. package/src/form/field_bindings/MapFieldBinding.tsx +72 -62
  252. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +159 -0
  253. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
  254. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +10 -8
  255. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
  256. package/src/form/field_bindings/ReferenceFieldBinding.tsx +28 -19
  257. package/src/form/field_bindings/RepeatFieldBinding.tsx +56 -32
  258. package/src/form/field_bindings/SelectFieldBinding.tsx +22 -13
  259. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +247 -168
  260. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  261. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  262. package/src/form/field_bindings/UserSelectFieldBinding.tsx +94 -0
  263. package/src/form/index.tsx +17 -37
  264. package/src/form/useClearRestoreValue.tsx +2 -2
  265. package/src/form/validation.ts +12 -6
  266. package/src/hooks/data/delete.ts +6 -5
  267. package/src/hooks/data/save.ts +26 -35
  268. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  269. package/src/hooks/data/useDataSource.tsx +10 -2
  270. package/src/hooks/data/useEntityFetch.tsx +10 -6
  271. package/src/hooks/index.tsx +3 -0
  272. package/src/hooks/useAuthController.tsx +1 -1
  273. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  274. package/src/hooks/useBrowserTitleAndIcon.tsx +1 -1
  275. package/src/hooks/useBuildModeController.tsx +15 -28
  276. package/src/hooks/useBuildNavigationController.tsx +386 -124
  277. package/src/hooks/useCollapsedGroups.ts +64 -0
  278. package/src/hooks/useFireCMSContext.tsx +9 -35
  279. package/src/hooks/useInternalUserManagementController.tsx +16 -0
  280. package/src/hooks/useLargeLayout.tsx +0 -35
  281. package/src/hooks/useModeController.tsx +1 -2
  282. package/src/hooks/useProjectLog.tsx +16 -5
  283. package/src/hooks/useResolvedNavigationFrom.tsx +9 -11
  284. package/src/hooks/useValidateAuthenticator.tsx +3 -3
  285. package/src/internal/useBuildDataSource.ts +67 -80
  286. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  287. package/src/internal/useBuildSideEntityController.tsx +149 -86
  288. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  289. package/src/preview/PropertyPreview.tsx +36 -12
  290. package/src/preview/PropertyPreviewProps.tsx +1 -1
  291. package/src/preview/components/BooleanPreview.tsx +1 -1
  292. package/src/preview/components/EmptyValue.tsx +1 -1
  293. package/src/preview/components/EnumValuesChip.tsx +1 -1
  294. package/src/preview/components/ImagePreview.tsx +10 -9
  295. package/src/preview/components/ReferencePreview.tsx +10 -18
  296. package/src/preview/components/UrlComponentPreview.tsx +20 -21
  297. package/src/preview/components/UserPreview.tsx +27 -0
  298. package/src/preview/index.ts +1 -0
  299. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -5
  300. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +5 -4
  301. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -3
  302. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -3
  303. package/src/preview/property_previews/ArrayOneOfPreview.tsx +6 -4
  304. package/src/preview/property_previews/ArrayPropertyPreview.tsx +6 -4
  305. package/src/preview/property_previews/MapPropertyPreview.tsx +7 -6
  306. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
  307. package/src/preview/property_previews/StringPropertyPreview.tsx +2 -2
  308. package/src/preview/util.ts +10 -10
  309. package/src/routes/CustomCMSRoute.tsx +21 -0
  310. package/src/routes/FireCMSRoute.tsx +246 -0
  311. package/src/routes/HomePageRoute.tsx +17 -0
  312. package/src/types/analytics.ts +3 -0
  313. package/src/types/auth.tsx +8 -12
  314. package/src/types/collections.ts +103 -28
  315. package/src/types/customization_controller.tsx +9 -0
  316. package/src/types/datasource.ts +21 -20
  317. package/src/types/dialogs_controller.tsx +7 -3
  318. package/src/types/entities.ts +10 -2
  319. package/src/types/entity_actions.tsx +71 -8
  320. package/src/types/entity_callbacks.ts +18 -18
  321. package/src/types/entity_overrides.tsx +2 -2
  322. package/src/types/export_import.ts +4 -4
  323. package/src/types/fields.tsx +52 -19
  324. package/src/types/firecms.tsx +34 -4
  325. package/src/types/firecms_context.tsx +18 -1
  326. package/src/types/index.ts +1 -0
  327. package/src/types/internal_user_management.ts +24 -0
  328. package/src/types/navigation.ts +76 -22
  329. package/src/types/permissions.ts +5 -5
  330. package/src/types/plugins.tsx +53 -9
  331. package/src/types/properties.ts +84 -22
  332. package/src/types/property_config.tsx +2 -2
  333. package/src/types/roles.ts +3 -0
  334. package/src/types/side_dialogs_controller.tsx +15 -0
  335. package/src/types/side_entity_controller.tsx +16 -1
  336. package/src/types/storage.ts +82 -0
  337. package/src/types/user.ts +3 -1
  338. package/src/util/builders.ts +10 -8
  339. package/src/util/callbacks.ts +119 -0
  340. package/src/util/createFormexStub.tsx +62 -0
  341. package/src/util/entities.ts +6 -4
  342. package/src/util/entity_actions.ts +28 -0
  343. package/src/util/entity_cache.ts +204 -0
  344. package/src/util/icon_list.ts +1 -1
  345. package/src/util/icon_synonyms.ts +0 -1
  346. package/src/util/icons.tsx +36 -11
  347. package/src/util/index.ts +3 -0
  348. package/src/util/join_collections.ts +9 -2
  349. package/src/util/make_properties_editable.ts +13 -5
  350. package/src/util/navigation_from_path.ts +33 -12
  351. package/src/util/navigation_utils.ts +135 -19
  352. package/src/util/objects.ts +74 -14
  353. package/src/util/parent_references_from_path.ts +3 -3
  354. package/src/util/permissions.ts +8 -8
  355. package/src/util/property_utils.tsx +17 -6
  356. package/src/util/references.ts +19 -8
  357. package/src/util/resolutions.ts +93 -24
  358. package/src/util/storage.ts +6 -2
  359. package/src/util/useStorageUploadController.tsx +74 -29
  360. package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
  361. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  362. package/dist/form/PropertiesForm.d.ts +0 -8
  363. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  364. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  365. package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
  366. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -27
  367. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -236
  368. package/src/form/PropertiesForm.tsx +0 -81
  369. package/src/form/components/FormikArrayContainer.tsx +0 -44
  370. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  371. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -1,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)
@@ -48,6 +50,10 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
48
50
  * The collection is resolved from the given path or alias.
49
51
  */
50
52
  getCollection: (pathOrId: string, includeUserOverride?: boolean) => EC | undefined;
53
+ /**
54
+ * Get the top level collection configuration for a given id
55
+ */
56
+ getCollectionById: (id: string) => EC | undefined;
51
57
  /**
52
58
  * Get the collection configuration from its parent ids.
53
59
  */
@@ -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);
@@ -6,6 +6,8 @@ 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";
10
+ import { InternalUserManagement } from "./internal_user_management";
9
11
  /**
10
12
  * Interface used to define plugins for FireCMS.
11
13
  * NOTE: This is a work in progress and the API is not stable yet.
@@ -36,6 +38,7 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
36
38
  }>>;
37
39
  props?: PROPS;
38
40
  };
41
+ userManagement?: InternalUserManagement;
39
42
  homePage?: {
40
43
  /**
41
44
  * Additional actions to be rendered in the home page, close to the search bar.
@@ -70,6 +73,17 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
70
73
  title: string;
71
74
  children: React.ReactNode;
72
75
  };
76
+ /**
77
+ * Allow reordering with drag and drop of the collections in the home page.
78
+ */
79
+ allowDragAndDrop?: boolean;
80
+ navigationEntries?: NavigationGroupMapping[];
81
+ /**
82
+ * This method will be called when the entries are updated in the home page.
83
+ * group => navigationEntriesOrder (path)
84
+ * @param entries
85
+ */
86
+ onNavigationEntriesUpdate?: (entries: NavigationGroupMapping[]) => void;
73
87
  };
74
88
  collectionView?: {
75
89
  /**
@@ -127,10 +141,29 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
127
141
  Component: React.ComponentType<PropsWithChildren<FORM_PROPS & PluginFormActionProps<any, EC>>>;
128
142
  props?: FORM_PROPS;
129
143
  };
144
+ /**
145
+ * Add custom actions to the default ones ("Save", "Discard"...)
146
+ */
130
147
  Actions?: React.ComponentType<PluginFormActionProps<any, EC>>;
148
+ /**
149
+ * Add custom actions to the top of the form
150
+ */
151
+ ActionsTop?: React.ComponentType<PluginFormActionProps<any, EC>>;
131
152
  fieldBuilder?: <T extends CMSType = CMSType>(props: PluginFieldBuilderParams<T, any, EC>) => React.ComponentType<FieldProps<T>> | null;
132
153
  fieldBuilderEnabled?: <T extends CMSType = CMSType>(props: PluginFieldBuilderParams<T>) => boolean;
133
154
  };
155
+ collection?: {
156
+ /**
157
+ * Use this method to modify a single collection before it is rendered.
158
+ * @param collection
159
+ */
160
+ modifyCollection?: (collection: EntityCollection) => EntityCollection;
161
+ /**
162
+ * Use this method to modify, add or remove collections.
163
+ * @param collections
164
+ */
165
+ injectCollections?: (collections: EntityCollection[]) => EntityCollection[];
166
+ };
134
167
  };
135
168
  /**
136
169
  * Props passed to the {@link FireCMSPlugin.homePage.CollectionActions} method.
@@ -138,7 +171,7 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
138
171
  *
139
172
  * @group Models
140
173
  */
141
- export interface PluginHomePageActionsProps<EP extends object = object, M extends Record<string, any> = any, UserType extends User = User, EC extends EntityCollection<M> = EntityCollection<M>> {
174
+ export interface PluginHomePageActionsProps<EP extends object = object, M extends Record<string, any> = any, USER extends User = User, EC extends EntityCollection<M> = EntityCollection<M>> {
142
175
  /**
143
176
  * Collection path of this entity. This is the full path, like
144
177
  * `users/1234/addresses`
@@ -151,17 +184,19 @@ export interface PluginHomePageActionsProps<EP extends object = object, M extend
151
184
  /**
152
185
  * Context of the app status
153
186
  */
154
- context: FireCMSContext<UserType>;
187
+ context: FireCMSContext<USER>;
155
188
  extraProps?: EP;
156
189
  }
157
- export interface PluginFormActionProps<UserType extends User = User, EC extends EntityCollection = EntityCollection> {
190
+ export interface PluginFormActionProps<USER extends User = User, EC extends EntityCollection = EntityCollection> {
158
191
  entityId?: string;
159
192
  path: string;
193
+ parentCollectionIds: string[];
160
194
  status: EntityStatus;
161
195
  collection: EC;
196
+ disabled: boolean;
162
197
  formContext?: FormContext<any>;
163
- context: FireCMSContext<UserType>;
164
- currentEntityId?: string;
198
+ context: FireCMSContext<USER>;
199
+ openEntityMode: "side_panel" | "full_screen";
165
200
  }
166
201
  export type PluginFieldBuilderParams<T extends CMSType = CMSType, M extends Record<string, any> = any, EC extends EntityCollection<M> = EntityCollection<M>> = {
167
202
  fieldConfigId: string;
@@ -172,10 +207,10 @@ export type PluginFieldBuilderParams<T extends CMSType = CMSType, M extends Reco
172
207
  path?: string;
173
208
  collection?: EC;
174
209
  };
175
- export interface PluginGenericProps<UserType extends User = User> {
176
- context: FireCMSContext<UserType>;
210
+ export interface PluginGenericProps<USER extends User = User> {
211
+ context: FireCMSContext<USER>;
177
212
  }
178
- export interface PluginHomePageAdditionalCardsProps<UserType extends User = User> {
213
+ export interface PluginHomePageAdditionalCardsProps<USER extends User = User> {
179
214
  group?: string;
180
- context: FireCMSContext<UserType>;
215
+ context: FireCMSContext<USER>;
181
216
  }
@@ -5,10 +5,11 @@ import { EntityReference, EntityValues, GeoPoint, Vector } from "./entities";
5
5
  import { ResolvedArrayProperty, ResolvedStringProperty } from "./resolved_entities";
6
6
  import { FilterValues } from "./collections";
7
7
  import { ChipColorKey, ChipColorScheme } from "@firecms/ui";
8
+ import { AuthController } from "./auth";
8
9
  /**
9
10
  * @group Entity properties
10
11
  */
11
- export type DataType<T extends CMSType = CMSType> = T extends string ? "string" : T extends number ? "number" : T extends boolean ? "boolean" : T extends Date ? "date" : T extends GeoPoint ? "geopoint" : T extends Vector ? "vector" : T extends EntityReference ? "reference" : T extends Array<CMSType> ? "array" : T extends Record<string, any> ? "map" : never;
12
+ export type DataType<T extends CMSType = CMSType> = T extends string ? "string" : T extends number ? "number" : T extends boolean ? "boolean" : T extends Date ? "date" : T extends GeoPoint ? "geopoint" : T extends Vector ? "vector" : T extends EntityReference ? "reference" : T extends Array<any> ? "array" : T extends Record<string, any> ? "map" : never;
12
13
  /**
13
14
  * @group Entity properties
14
15
  */
@@ -20,7 +21,7 @@ export type AnyProperty = StringProperty | NumberProperty | BooleanProperty | Da
20
21
  /**
21
22
  * @group Entity properties
22
23
  */
23
- export type Property<T extends CMSType = CMSType> = T extends string ? StringProperty : T extends number ? NumberProperty : T extends boolean ? BooleanProperty : T extends Date ? DateProperty : T extends GeoPoint ? GeopointProperty : T extends EntityReference ? ReferenceProperty : T extends Array<CMSType> ? ArrayProperty<T> : T extends Record<string, any> ? MapProperty<T> : AnyProperty;
24
+ export type Property<T extends CMSType = any> = T extends string ? StringProperty : T extends number ? NumberProperty : T extends boolean ? BooleanProperty : T extends Date ? DateProperty : T extends GeoPoint ? GeopointProperty : T extends EntityReference ? ReferenceProperty : T extends Array<CMSType> ? ArrayProperty<T> : T extends Record<string, any> ? MapProperty<T> : AnyProperty;
24
25
  /**
25
26
  * Interface including all common properties of a CMS property
26
27
  * @group Entity properties
@@ -103,6 +104,11 @@ export interface BaseProperty<T extends CMSType, CustomProps = any> {
103
104
  * save the new config. The saved config will then become the source of truth.
104
105
  */
105
106
  editable?: boolean;
107
+ /**
108
+ * A number between 0 and 100 that indicates the width of the field in the form view.
109
+ * It defaults to 100, but you can set it to 50 to have two fields in the same row.
110
+ */
111
+ widthPercentage?: number;
106
112
  }
107
113
  /**
108
114
  * @group Entity properties
@@ -200,6 +206,10 @@ export type PropertyBuilderProps<M extends Record<string, any> = any> = {
200
206
  * Entity ID
201
207
  */
202
208
  entityId?: string;
209
+ /**
210
+ * Controller to manage authentication
211
+ */
212
+ authController: AuthController;
203
213
  };
204
214
  /**
205
215
  * You can use this type to define a property dynamically, based
@@ -207,15 +217,15 @@ export type PropertyBuilderProps<M extends Record<string, any> = any> = {
207
217
  * current value of the property, as well as the path and entity ID.
208
218
  * @group Entity properties
209
219
  */
210
- export type PropertyBuilder<T extends CMSType = any, M extends Record<string, any> = any> = ({ values, previousValues, propertyValue, index, path, entityId }: PropertyBuilderProps<M>) => Property<T> | null;
220
+ export type PropertyBuilder<T extends CMSType = any, M extends Record<string, any> = any> = ({ values, previousValues, propertyValue, index, path, entityId, authController }: PropertyBuilderProps<M>) => Property<T> | null;
211
221
  /**
212
222
  * @group Entity properties
213
223
  */
214
- export type PropertyOrBuilder<T extends CMSType = CMSType, M extends Record<string, any> = Record<string, any>> = Property<T> | PropertyBuilder<T, M>;
224
+ export type PropertyOrBuilder<T extends CMSType = CMSType, M extends Record<string, any> = any> = Property<T> | PropertyBuilder<T, M>;
215
225
  /**
216
226
  * @group Entity properties
217
227
  */
218
- export type PropertiesOrBuilders<M extends Record<string, any> = Record<string, any>> = {
228
+ export type PropertiesOrBuilders<M extends Record<string, any> = any> = {
219
229
  [k in keyof M]: PropertyOrBuilder<M[k], M>;
220
230
  };
221
231
  /**
@@ -278,9 +288,18 @@ export interface StringProperty extends BaseProperty<string> {
278
288
  enumValues?: EnumValues;
279
289
  /**
280
290
  * You can specify a `Storage` configuration. It is used to
281
- * indicate that this string refers to a path in Google Cloud Storage.
291
+ * indicate that this string refers to a path in your storage provider.
282
292
  */
283
293
  storage?: StorageConfig;
294
+ /**
295
+ * This property is used to indicate that the string is a user ID, and
296
+ * it will be rendered as a user picker.
297
+ * Note that the user ID needs to be the one used in your authentication
298
+ * provider, e.g. Firebase Auth.
299
+ * You can also use a property builder to specify the user path dynamically
300
+ * based on other values of the entity.
301
+ */
302
+ userSelect?: boolean;
284
303
  /**
285
304
  * If the value of this property is a URL, you can set this flag to true
286
305
  * to add a link, or one of the supported media types to render a preview
@@ -302,11 +321,18 @@ export interface StringProperty extends BaseProperty<string> {
302
321
  * Add an icon to clear the value and set it to `null`. Defaults to `false`
303
322
  */
304
323
  clearable?: boolean;
324
+ /**
325
+ * You can use this property (a string) to behave as a reference to another
326
+ * collection. The stored value is the ID of the entity in the
327
+ * collection, and the `path` prop is used to
328
+ * define the collection this reference points to.
329
+ */
330
+ reference?: ReferenceProperty;
305
331
  }
306
332
  /**
307
333
  * @group Entity properties
308
334
  */
309
- export interface ArrayProperty<T extends ArrayT[] = any[], ArrayT extends CMSType = CMSType> extends BaseProperty<T> {
335
+ export interface ArrayProperty<T extends ArrayT[] = any[], ArrayT extends CMSType = any> extends BaseProperty<T> {
310
336
  dataType: "array";
311
337
  /**
312
338
  * The property of this array.
@@ -361,6 +387,21 @@ export interface ArrayProperty<T extends ArrayT[] = any[], ArrayT extends CMSTyp
361
387
  * Should the field be initially expanded. Defaults to `true`
362
388
  */
363
389
  expanded?: boolean;
390
+ /**
391
+ * Display the child properties directly, without being wrapped in an
392
+ * extendable panel.
393
+ */
394
+ minimalistView?: boolean;
395
+ /**
396
+ * Can the elements in this array be reordered. Defaults to `true`.
397
+ * This prop has no effect if `disabled` is set to true.
398
+ */
399
+ sortable?: boolean;
400
+ /**
401
+ * Can the elements in this array be added. Defaults to `true`
402
+ * This prop has no effect if `disabled` is set to true.
403
+ */
404
+ canAddElements?: boolean;
364
405
  }
365
406
  /**
366
407
  * @group Entity properties
@@ -400,6 +441,11 @@ export interface MapProperty<T extends Record<string, CMSType> = Record<string,
400
441
  * view
401
442
  */
402
443
  spreadChildren?: boolean;
444
+ /**
445
+ * Display the child properties directly, without being wrapped in an
446
+ * extendable panel. Note that this will also hide the title of this property.
447
+ */
448
+ minimalistView?: boolean;
403
449
  /**
404
450
  * Should the field be initially expanded. Defaults to `true`
405
451
  */
@@ -460,7 +506,7 @@ export interface ReferenceProperty extends BaseProperty<EntityReference> {
460
506
  * You can leave this prop undefined if the path is not yet know, e.g.
461
507
  * you are using a property builder and the path depends on a different
462
508
  * property.
463
- * Note that you can also use a collection alias.
509
+ * Note that you can also use a collection id.
464
510
  */
465
511
  path?: string;
466
512
  /**
@@ -583,13 +629,13 @@ export type StorageConfig = {
583
629
  * You can use this prop to customize the uploaded filename.
584
630
  * You can use a function as a callback or a string where you
585
631
  * specify some placeholders that get replaced with the corresponding values.
586
- * - {file} - Full file name
587
- * - {file.name} - Name of the file without extension
588
- * - {file.ext} - Extension of the file
589
- * - {rand} - Random value used to avoid name collisions
590
- * - {entityId} - ID of the entity
591
- * - {propertyKey} - ID of this property
592
- * - {path} - Path of this entity
632
+ * - `{file}` - Full file name
633
+ * - `{file.name}` - Name of the file without extension
634
+ * - `{file.ext}` - Extension of the file
635
+ * - `{rand}` - Random value used to avoid name collisions
636
+ * - `{entityId}` - ID of the entity
637
+ * - `{propertyKey}` - ID of this property
638
+ * - `{path}` - Path of this entity
593
639
  *
594
640
  * @param context
595
641
  */
@@ -599,13 +645,13 @@ export type StorageConfig = {
599
645
  *
600
646
  * You can use a function as a callback or a string where you
601
647
  * specify some placeholders that get replaced with the corresponding values.
602
- * - {file} - Full file name
603
- * - {file.name} - Name of the file without extension
604
- * - {file.ext} - Extension of the file
605
- * - {rand} - Random value used to avoid name collisions
606
- * - {entityId} - ID of the entity
607
- * - {propertyKey} - ID of this property
608
- * - {path} - Path of this entity
648
+ * - `{file}` - Full file name
649
+ * - `{file.name}` - Name of the file without extension
650
+ * - `{file.ext}` - Extension of the file
651
+ * - `{rand}` - Random value used to avoid name collisions
652
+ * - `{entityId}` - ID of the entity
653
+ * - `{propertyKey}` - ID of this property
654
+ * - `{path}` - Path of this entity
609
655
  */
610
656
  storagePath: string | ((context: UploadedFileContext) => string);
611
657
  /**
@@ -623,6 +669,12 @@ export type StorageConfig = {
623
669
  * Define maximal file size in bytes
624
670
  */
625
671
  maxSize?: number;
672
+ /**
673
+ * Use this callback to process the file before uploading it to the storage.
674
+ * If nothing is returned, the file is uploaded as it is.
675
+ * @param file
676
+ */
677
+ processFile?: (file: File) => Promise<File> | undefined;
626
678
  /**
627
679
  * Postprocess the saved value (storage path or URL)
628
680
  * after it has been resolved.
@@ -19,8 +19,6 @@ export type PropertyConfig<T extends CMSType = any> = {
19
19
  * Default config for the property.
20
20
  * This property or builder will be used as the base values for the resulting property.
21
21
  * You can also use a builder function to generate the base property.
22
- * You can use a builder function to generate the property based on the values or the path.
23
- * You can also define a custom Field as a React component to be used for this property.
24
22
  */
25
23
  property: PropertyOrBuilder<T>;
26
24
  /**
@@ -39,4 +37,4 @@ export type PropertyConfig<T extends CMSType = any> = {
39
37
  */
40
38
  description?: string;
41
39
  };
42
- export type PropertyConfigId = "text_field" | "multiline" | "markdown" | "url" | "email" | "select" | "multi_select" | "number_input" | "number_select" | "multi_number_select" | "file_upload" | "multi_file_upload" | "group" | "key_value" | "reference" | "multi_references" | "switch" | "date_time" | "repeat" | "custom_array" | "block";
40
+ export type PropertyConfigId = "text_field" | "multiline" | "markdown" | "url" | "email" | "user_select" | "select" | "multi_select" | "number_input" | "number_select" | "multi_number_select" | "file_upload" | "multi_file_upload" | "group" | "key_value" | "reference" | "reference_as_string" | "multi_references" | "switch" | "date_time" | "repeat" | "custom_array" | "block";
@@ -23,6 +23,9 @@ export type Role = {
23
23
  * @see stripCollectionPath
24
24
  */
25
25
  collectionPermissions?: Record<string, Permissions>;
26
+ /**
27
+ * Permissions related to editing the collections
28
+ */
26
29
  config?: {
27
30
  createCollections?: boolean;
28
31
  editCollections?: boolean | "own";
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  /**
2
3
  * Controller to open the side dialog
3
4
  * @group Hooks and utilities
@@ -11,6 +12,11 @@ export interface SideDialogsController {
11
12
  * List of side panels currently open
12
13
  */
13
14
  sidePanels: SideDialogPanelProps[];
15
+ /**
16
+ * Override the current side panels
17
+ * @param panels
18
+ */
19
+ setSidePanels: (panels: SideDialogPanelProps[]) => void;
14
20
  /**
15
21
  * Open one or multiple side panels
16
22
  * @param props
@@ -54,4 +60,8 @@ export interface SideDialogPanelProps {
54
60
  * Callback when the panel is closed
55
61
  */
56
62
  onClose?: () => void;
63
+ /**
64
+ * Use this prop to store additional data in the panel
65
+ */
66
+ additional?: any;
57
67
  }
@@ -1,6 +1,7 @@
1
1
  import { EntityCollection } from "./collections";
2
2
  import { ResolvedEntityCollection } from "./resolved_entities";
3
3
  import { Entity } from "./entities";
4
+ import { EntityFormProps } from "../form";
4
5
  /**
5
6
  * Props used to open a side dialog
6
7
  * @group Hooks and utilities
@@ -10,6 +11,10 @@ export interface EntitySidePanelProps<M extends Record<string, any> = any> {
10
11
  * Absolute path of the entity
11
12
  */
12
13
  path: string;
14
+ /**
15
+ * Full CMS path of the entity, including the collection and sub-collections.
16
+ */
17
+ fullIdPath?: string;
13
18
  /**
14
19
  * ID of the entity, if not set, it means we are creating a new entity
15
20
  */
@@ -22,7 +27,7 @@ export interface EntitySidePanelProps<M extends Record<string, any> = any> {
22
27
  * Open the entity with a selected sub-collection view. If the panel for this
23
28
  * entity was already open, it is replaced.
24
29
  */
25
- selectedSubPath?: string;
30
+ selectedTab?: string;
26
31
  /**
27
32
  * Use this prop to override the width of the form view.
28
33
  * e.g. "600px"
@@ -55,6 +60,14 @@ export interface EntitySidePanelProps<M extends Record<string, any> = any> {
55
60
  * Should this panel close when saving
56
61
  */
57
62
  closeOnSave?: boolean;
63
+ /**
64
+ * Override some form properties
65
+ */
66
+ formProps?: Partial<EntityFormProps<M>>;
67
+ /**
68
+ * Allow the user to open the entity fullscreen
69
+ */
70
+ allowFullScreen?: boolean;
58
71
  }
59
72
  /**
60
73
  * Controller to open the side dialog displaying entity forms
@@ -87,4 +87,79 @@ export interface StorageSource {
87
87
  * @param bucket
88
88
  */
89
89
  getFile: (path: string, bucket?: string) => Promise<File | null>;
90
+ /**
91
+ * Delete a file.
92
+ * @param path
93
+ * @param bucket
94
+ */
95
+ deleteFile: (path: string, bucket?: string) => Promise<void>;
96
+ /**
97
+ * List the contents of a path.
98
+ * @param path
99
+ * @param options
100
+ */
101
+ list: (path: string, options?: {
102
+ bucket?: string;
103
+ maxResults?: number;
104
+ pageToken?: string;
105
+ }) => Promise<StorageListResult>;
106
+ }
107
+ /**
108
+ * Result returned by list().
109
+ * @public
110
+ */
111
+ export declare interface StorageListResult {
112
+ /**
113
+ * References to prefixes (sub-folders). You can call list() on them to
114
+ * get its contents.
115
+ *
116
+ * Folders are implicit based on '/' in the object paths.
117
+ * For example, if a bucket has two objects '/a/b/1' and '/a/b/2', list('/a')
118
+ * will return '/a/b' as a prefix.
119
+ */
120
+ prefixes: StorageReference[];
121
+ /**
122
+ * Objects in this directory.
123
+ * You can call getMetadata() and getDownloadUrl() on them.
124
+ */
125
+ items: StorageReference[];
126
+ /**
127
+ * If set, there might be more results for this list. Use this token to resume the list.
128
+ */
129
+ nextPageToken?: string;
130
+ }
131
+ /**
132
+ * Represents a reference to a Google Cloud Storage object. Developers can
133
+ * upload, download, and delete objects, as well as get/set object metadata.
134
+ * @public
135
+ */
136
+ export declare interface StorageReference {
137
+ /**
138
+ * Returns a gs:// URL for this object in the form
139
+ * `gs://<bucket>/<path>/<to>/<object>`
140
+ * @returns The gs:// URL.
141
+ */
142
+ toString(): string;
143
+ /**
144
+ * A reference to the root of this object's bucket.
145
+ */
146
+ root: StorageReference;
147
+ /**
148
+ * The name of the bucket containing this reference's object.
149
+ */
150
+ bucket: string;
151
+ /**
152
+ * The full path of this object.
153
+ */
154
+ fullPath: string;
155
+ /**
156
+ * The short name of this object, which is the last component of the full path.
157
+ * For example, if fullPath is 'full/path/image.png', name is 'image.png'.
158
+ */
159
+ name: string;
160
+ /**
161
+ * A reference pointing to the parent location of this reference, or null if
162
+ * this reference is the root.
163
+ */
164
+ parent: StorageReference | null;
90
165
  }