@firecms/core 3.0.0-canary.25 → 3.0.0-canary.250

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 (401) hide show
  1. package/README.md +3 -3
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +16 -0
  4. package/dist/app/Scaffold.d.ts +34 -0
  5. package/dist/app/index.d.ts +4 -0
  6. package/dist/app/useApp.d.ts +16 -0
  7. package/dist/components/ArrayContainer.d.ts +31 -12
  8. package/dist/components/CircularProgressCenter.d.ts +1 -1
  9. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  10. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  11. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +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 +2 -15
  28. package/dist/components/HomePage/HomePageDnD.d.ts +76 -0
  29. package/dist/components/HomePage/NavigationCard.d.ts +3 -1
  30. package/dist/components/HomePage/NavigationCardBinding.d.ts +4 -3
  31. package/dist/components/HomePage/NavigationGroup.d.ts +7 -1
  32. package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
  33. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  34. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  35. package/dist/components/ReferenceWidget.d.ts +3 -1
  36. package/dist/components/SelectableTable/SelectableTable.d.ts +14 -4
  37. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  38. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  39. package/dist/components/VirtualTable/VirtualTableProps.d.ts +24 -12
  40. package/dist/components/VirtualTable/types.d.ts +3 -3
  41. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
  42. package/dist/components/common/index.d.ts +2 -1
  43. package/dist/components/common/table_height.d.ts +5 -0
  44. package/dist/components/common/types.d.ts +4 -6
  45. package/dist/components/common/useColumnsIds.d.ts +3 -1
  46. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
  47. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  48. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  49. package/dist/components/index.d.ts +5 -2
  50. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  51. package/dist/core/DefaultAppBar.d.ts +29 -0
  52. package/dist/core/DefaultDrawer.d.ts +19 -0
  53. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  54. package/dist/core/EntityEditView.d.ts +40 -11
  55. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  56. package/dist/core/FireCMS.d.ts +3 -3
  57. package/dist/core/FireCMSRouter.d.ts +4 -0
  58. package/dist/core/NavigationRoutes.d.ts +2 -3
  59. package/dist/core/SideDialogs.d.ts +4 -2
  60. package/dist/core/field_configs.d.ts +1 -1
  61. package/dist/core/index.d.ts +4 -4
  62. package/dist/form/EntityForm.d.ts +36 -64
  63. package/dist/form/EntityFormActions.d.ts +17 -0
  64. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  65. package/dist/form/components/ErrorFocus.d.ts +1 -1
  66. package/dist/form/components/FieldHelperText.d.ts +3 -3
  67. package/dist/form/components/FormEntry.d.ts +6 -0
  68. package/dist/form/components/FormLayout.d.ts +5 -0
  69. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  70. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  71. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  72. package/dist/form/components/index.d.ts +3 -1
  73. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  74. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  75. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  76. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  77. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  78. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  79. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  80. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  81. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +9 -0
  82. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  83. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  84. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  85. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +5 -13
  86. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  87. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  88. package/dist/form/index.d.ts +17 -18
  89. package/dist/form/useClearRestoreValue.d.ts +2 -2
  90. package/dist/hooks/data/delete.d.ts +4 -4
  91. package/dist/hooks/data/save.d.ts +4 -5
  92. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  93. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  94. package/dist/hooks/index.d.ts +1 -0
  95. package/dist/hooks/useAuthController.d.ts +1 -1
  96. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  97. package/dist/hooks/useBuildNavigationController.d.ts +57 -13
  98. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  99. package/dist/hooks/useModeController.d.ts +1 -2
  100. package/dist/hooks/useProjectLog.d.ts +8 -2
  101. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  102. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  103. package/dist/index.d.ts +1 -0
  104. package/dist/index.es.js +22839 -13875
  105. package/dist/index.es.js.map +1 -1
  106. package/dist/index.umd.js +25639 -588
  107. package/dist/index.umd.js.map +1 -1
  108. package/dist/internal/useBuildDataSource.d.ts +3 -17
  109. package/dist/internal/useBuildSideEntityController.d.ts +3 -3
  110. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  111. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  112. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  113. package/dist/preview/components/ReferencePreview.d.ts +3 -2
  114. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  115. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  116. package/dist/preview/util.d.ts +3 -3
  117. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  118. package/dist/routes/FireCMSRoute.d.ts +1 -0
  119. package/dist/routes/HomePageRoute.d.ts +3 -0
  120. package/dist/types/analytics.d.ts +1 -1
  121. package/dist/types/auth.d.ts +8 -10
  122. package/dist/types/collections.d.ts +106 -24
  123. package/dist/types/datasource.d.ts +52 -36
  124. package/dist/types/dialogs_controller.d.ts +7 -3
  125. package/dist/types/entities.d.ts +7 -2
  126. package/dist/types/entity_actions.d.ts +28 -4
  127. package/dist/types/entity_callbacks.d.ts +16 -16
  128. package/dist/types/entity_overrides.d.ts +2 -2
  129. package/dist/types/export_import.d.ts +4 -4
  130. package/dist/types/fields.d.ts +74 -42
  131. package/dist/types/firecms.d.ts +8 -3
  132. package/dist/types/firecms_context.d.ts +1 -1
  133. package/dist/types/index.d.ts +0 -1
  134. package/dist/types/navigation.d.ts +61 -18
  135. package/dist/types/permissions.d.ts +4 -4
  136. package/dist/types/plugins.d.ts +48 -12
  137. package/dist/types/properties.d.ts +80 -24
  138. package/dist/types/property_config.d.ts +1 -3
  139. package/dist/types/side_dialogs_controller.d.ts +10 -0
  140. package/dist/types/side_entity_controller.d.ts +10 -1
  141. package/dist/types/storage.d.ts +75 -0
  142. package/dist/types/user.d.ts +1 -0
  143. package/dist/util/builders.d.ts +3 -3
  144. package/dist/util/callbacks.d.ts +2 -0
  145. package/dist/util/createFormexStub.d.ts +2 -0
  146. package/dist/util/entities.d.ts +3 -3
  147. package/dist/util/entity_actions.d.ts +2 -0
  148. package/dist/util/entity_cache.d.ts +23 -0
  149. package/dist/util/icon_list.d.ts +5 -1
  150. package/dist/util/icon_synonyms.d.ts +1 -98
  151. package/dist/util/icons.d.ts +6 -3
  152. package/dist/util/index.d.ts +3 -0
  153. package/dist/util/navigation_from_path.d.ts +6 -1
  154. package/dist/util/navigation_utils.d.ts +15 -3
  155. package/dist/util/objects.d.ts +2 -1
  156. package/dist/util/permissions.d.ts +4 -4
  157. package/dist/util/plurals.d.ts +0 -2
  158. package/dist/util/property_utils.d.ts +4 -4
  159. package/dist/util/references.d.ts +2 -2
  160. package/dist/util/resolutions.d.ts +41 -17
  161. package/dist/util/storage.d.ts +23 -2
  162. package/dist/util/useStorageUploadController.d.ts +3 -3
  163. package/package.json +64 -48
  164. package/src/app/AppBar.tsx +18 -0
  165. package/src/app/Drawer.tsx +24 -0
  166. package/src/app/Scaffold.tsx +253 -0
  167. package/src/app/index.ts +4 -0
  168. package/src/app/useApp.tsx +32 -0
  169. package/src/components/ArrayContainer.tsx +447 -229
  170. package/src/components/CircularProgressCenter.tsx +2 -2
  171. package/src/components/ClearFilterSortButton.tsx +41 -0
  172. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +11 -11
  173. package/src/components/DeleteEntityDialog.tsx +13 -20
  174. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +59 -40
  175. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
  176. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
  177. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +72 -42
  178. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  179. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
  180. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
  181. package/src/components/EntityCollectionTable/index.tsx +1 -1
  182. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +32 -37
  183. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +49 -36
  184. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  185. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +135 -105
  186. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
  187. package/src/components/EntityCollectionView/EntityCollectionView.tsx +231 -117
  188. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +4 -2
  189. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  190. package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
  191. package/src/components/EntityCollectionView/utils.ts +19 -0
  192. package/src/components/EntityJsonPreview.tsx +66 -0
  193. package/src/components/EntityPreview.tsx +80 -59
  194. package/src/components/EntityView.tsx +13 -10
  195. package/src/components/ErrorView.tsx +4 -4
  196. package/src/components/HomePage/DefaultHomePage.tsx +486 -159
  197. package/src/components/HomePage/FavouritesView.tsx +9 -14
  198. package/src/components/HomePage/HomePageDnD.tsx +613 -0
  199. package/src/components/HomePage/NavigationCard.tsx +48 -39
  200. package/src/components/HomePage/NavigationCardBinding.tsx +17 -16
  201. package/src/components/HomePage/NavigationGroup.tsx +63 -29
  202. package/src/components/HomePage/RenameGroupDialog.tsx +113 -0
  203. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  204. package/src/components/NotFoundPage.tsx +2 -2
  205. package/src/components/PropertyConfigBadge.tsx +9 -3
  206. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  207. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +21 -13
  208. package/src/components/ReferenceWidget.tsx +21 -11
  209. package/src/components/SearchIconsView.tsx +10 -7
  210. package/src/components/SelectableTable/SelectableTable.tsx +157 -145
  211. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  212. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
  213. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
  214. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -23
  215. package/src/components/UnsavedChangesDialog.tsx +42 -0
  216. package/src/components/VirtualTable/VirtualTable.tsx +105 -51
  217. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  218. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  219. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  220. package/src/components/VirtualTable/VirtualTableProps.tsx +28 -14
  221. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  222. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  223. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -2
  224. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  225. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  226. package/src/components/VirtualTable/types.tsx +2 -3
  227. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +44 -40
  228. package/src/components/common/index.ts +2 -1
  229. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  230. package/src/components/common/types.tsx +4 -6
  231. package/src/components/common/useColumnsIds.tsx +24 -3
  232. package/src/components/common/useDataSourceTableController.tsx +420 -0
  233. package/src/components/common/useDebouncedCallback.tsx +20 -0
  234. package/src/components/common/useScrollRestoration.tsx +68 -0
  235. package/src/components/common/useTableSearchHelper.ts +53 -12
  236. package/src/components/index.tsx +6 -2
  237. package/src/contexts/BreacrumbsContext.tsx +38 -0
  238. package/src/contexts/DialogsProvider.tsx +5 -4
  239. package/src/contexts/ModeController.tsx +1 -3
  240. package/src/contexts/SnackbarProvider.tsx +2 -0
  241. package/src/core/DefaultAppBar.tsx +219 -0
  242. package/src/core/DefaultDrawer.tsx +185 -0
  243. package/src/core/DrawerNavigationItem.tsx +66 -0
  244. package/src/core/EntityEditView.tsx +408 -478
  245. package/src/core/EntityEditViewFormActions.tsx +199 -0
  246. package/src/core/EntitySidePanel.tsx +85 -21
  247. package/src/core/FireCMS.tsx +72 -58
  248. package/src/core/FireCMSRouter.tsx +17 -0
  249. package/src/core/NavigationRoutes.tsx +28 -38
  250. package/src/core/SideDialogs.tsx +22 -12
  251. package/src/core/field_configs.tsx +26 -13
  252. package/src/core/index.tsx +6 -5
  253. package/src/form/EntityForm.tsx +589 -535
  254. package/src/form/EntityFormActions.tsx +169 -0
  255. package/src/form/PropertyFieldBinding.tsx +88 -45
  256. package/src/form/components/CustomIdField.tsx +9 -3
  257. package/src/form/components/FieldHelperText.tsx +4 -4
  258. package/src/form/components/FormEntry.tsx +22 -0
  259. package/src/form/components/FormLayout.tsx +16 -0
  260. package/src/form/components/LabelWithIcon.tsx +30 -19
  261. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  262. package/src/form/components/StorageItemPreview.tsx +22 -12
  263. package/src/form/components/StorageUploadProgress.tsx +4 -5
  264. package/src/form/components/index.tsx +3 -1
  265. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +34 -19
  266. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +50 -36
  267. package/src/form/field_bindings/BlockFieldBinding.tsx +56 -34
  268. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  269. package/src/form/field_bindings/KeyValueFieldBinding.tsx +61 -52
  270. package/src/form/field_bindings/MapFieldBinding.tsx +73 -55
  271. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +157 -0
  272. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
  273. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  274. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
  275. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  276. package/src/form/field_bindings/RepeatFieldBinding.tsx +62 -35
  277. package/src/form/field_bindings/SelectFieldBinding.tsx +24 -15
  278. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +265 -202
  279. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  280. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  281. package/src/form/index.tsx +17 -37
  282. package/src/form/useClearRestoreValue.tsx +2 -2
  283. package/src/form/validation.ts +13 -23
  284. package/src/hooks/data/delete.ts +6 -5
  285. package/src/hooks/data/save.ts +26 -33
  286. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  287. package/src/hooks/data/useDataSource.tsx +11 -3
  288. package/src/hooks/data/useEntityFetch.tsx +10 -6
  289. package/src/hooks/index.tsx +1 -0
  290. package/src/hooks/useAuthController.tsx +1 -1
  291. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  292. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  293. package/src/hooks/useBuildModeController.tsx +22 -29
  294. package/src/hooks/useBuildNavigationController.tsx +440 -119
  295. package/src/hooks/useFireCMSContext.tsx +3 -33
  296. package/src/hooks/useLargeLayout.tsx +0 -35
  297. package/src/hooks/useModeController.tsx +1 -2
  298. package/src/hooks/useProjectLog.tsx +32 -10
  299. package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
  300. package/src/hooks/useValidateAuthenticator.tsx +17 -37
  301. package/src/index.ts +1 -0
  302. package/src/internal/useBuildDataSource.ts +79 -85
  303. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  304. package/src/internal/useBuildSideEntityController.tsx +201 -77
  305. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  306. package/src/preview/PropertyPreview.tsx +34 -25
  307. package/src/preview/PropertyPreviewProps.tsx +7 -1
  308. package/src/preview/components/BooleanPreview.tsx +2 -2
  309. package/src/preview/components/EmptyValue.tsx +1 -1
  310. package/src/preview/components/EnumValuesChip.tsx +2 -2
  311. package/src/preview/components/ImagePreview.tsx +26 -37
  312. package/src/preview/components/ReferencePreview.tsx +23 -34
  313. package/src/preview/components/StorageThumbnail.tsx +5 -1
  314. package/src/preview/components/UrlComponentPreview.tsx +60 -28
  315. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -6
  316. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +7 -5
  317. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -4
  318. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -4
  319. package/src/preview/property_previews/ArrayOneOfPreview.tsx +7 -6
  320. package/src/preview/property_previews/ArrayPropertyPreview.tsx +7 -6
  321. package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
  322. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
  323. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  324. package/src/preview/util.ts +10 -10
  325. package/src/routes/CustomCMSRoute.tsx +21 -0
  326. package/src/routes/FireCMSRoute.tsx +246 -0
  327. package/src/routes/HomePageRoute.tsx +17 -0
  328. package/src/types/analytics.ts +3 -0
  329. package/src/types/auth.tsx +9 -13
  330. package/src/types/collections.ts +128 -29
  331. package/src/types/customization_controller.tsx +0 -1
  332. package/src/types/datasource.ts +61 -43
  333. package/src/types/dialogs_controller.tsx +7 -3
  334. package/src/types/entities.ts +12 -2
  335. package/src/types/entity_actions.tsx +32 -7
  336. package/src/types/entity_callbacks.ts +18 -18
  337. package/src/types/entity_overrides.tsx +2 -2
  338. package/src/types/export_import.ts +4 -4
  339. package/src/types/fields.tsx +85 -46
  340. package/src/types/firecms.tsx +9 -4
  341. package/src/types/firecms_context.tsx +1 -1
  342. package/src/types/index.ts +0 -1
  343. package/src/types/navigation.ts +76 -23
  344. package/src/types/permissions.ts +5 -5
  345. package/src/types/plugins.tsx +57 -14
  346. package/src/types/properties.ts +95 -26
  347. package/src/types/property_config.tsx +1 -2
  348. package/src/types/side_dialogs_controller.tsx +15 -0
  349. package/src/types/side_entity_controller.tsx +11 -1
  350. package/src/types/storage.ts +83 -1
  351. package/src/types/user.ts +2 -0
  352. package/src/util/builders.ts +10 -8
  353. package/src/util/callbacks.ts +119 -0
  354. package/src/util/createFormexStub.tsx +62 -0
  355. package/src/util/entities.ts +9 -6
  356. package/src/util/entity_actions.ts +28 -0
  357. package/src/util/entity_cache.ts +204 -0
  358. package/src/util/enums.ts +1 -1
  359. package/src/util/icon_list.ts +16 -10
  360. package/src/util/icon_synonyms.ts +3 -100
  361. package/src/util/icons.tsx +21 -7
  362. package/src/util/index.ts +3 -0
  363. package/src/util/join_collections.ts +6 -1
  364. package/src/util/make_properties_editable.ts +13 -5
  365. package/src/util/navigation_from_path.ts +18 -7
  366. package/src/util/navigation_utils.ts +141 -25
  367. package/src/util/objects.ts +90 -33
  368. package/src/util/parent_references_from_path.ts +3 -3
  369. package/src/util/permissions.ts +9 -8
  370. package/src/util/plurals.ts +0 -2
  371. package/src/util/property_utils.tsx +17 -6
  372. package/src/util/references.ts +19 -8
  373. package/src/util/resolutions.ts +110 -48
  374. package/src/util/storage.ts +79 -21
  375. package/src/util/strings.ts +2 -2
  376. package/src/util/useStorageUploadController.tsx +91 -28
  377. package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
  378. package/dist/components/FireCMSAppBar.d.ts +0 -26
  379. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  380. package/dist/components/VirtualTable/common.d.ts +0 -2
  381. package/dist/core/Drawer.d.ts +0 -23
  382. package/dist/core/Scaffold.d.ts +0 -55
  383. package/dist/core/SideEntityView.d.ts +0 -7
  384. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  385. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  386. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  387. package/dist/internal/useLocaleConfig.d.ts +0 -1
  388. package/dist/types/appcheck.d.ts +0 -26
  389. package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
  390. package/src/components/FireCMSAppBar.tsx +0 -165
  391. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  392. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
  393. package/src/core/Drawer.tsx +0 -191
  394. package/src/core/Scaffold.tsx +0 -281
  395. package/src/core/SideEntityView.tsx +0 -38
  396. package/src/form/components/FormikArrayContainer.tsx +0 -44
  397. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  398. package/src/internal/useBuildCustomizationController.tsx +0 -5
  399. package/src/internal/useLocaleConfig.tsx +0 -18
  400. package/src/types/appcheck.ts +0 -29
  401. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -1,10 +1,12 @@
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
  /**
6
7
  * Controller that includes the resolved navigation and utility methods and
7
8
  * attributes.
9
+ * This controller holds the state of the navigation including the collections.
8
10
  * @group Models
9
11
  */
10
12
  export type NavigationController<EC extends EntityCollection = EntityCollection<any>> = {
@@ -34,7 +36,7 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
34
36
  * level of the navigation (e.g. in the home page or the navigation
35
37
  * drawer)
36
38
  */
37
- topLevelNavigation?: TopNavigationResult;
39
+ topLevelNavigation?: NavigationResult;
38
40
 
39
41
  /**
40
42
  * Is the navigation loading (the configuration persistence has not
@@ -56,11 +58,15 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
56
58
  * Get the collection configuration for a given path.
57
59
  * The collection is resolved from the given path or alias.
58
60
  */
59
- getCollection: (pathOrAlias: string,
60
- entityId?: string,
61
- includeUserOverride?: boolean) => EC | undefined;
61
+ getCollection: (pathOrId: string, includeUserOverride?: boolean) => EC | undefined;
62
+
62
63
  /**
63
- * Get the collection configuration from its parent path segments.
64
+ * Get the top level collection configuration for a given id
65
+ */
66
+ getCollectionById: (id: string) => EC | undefined;
67
+
68
+ /**
69
+ * Get the collection configuration from its parent ids.
64
70
  */
65
71
  getCollectionFromIds: (ids: string[]) => EC | undefined;
66
72
 
@@ -70,12 +76,14 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
70
76
  getCollectionFromPaths: (pathSegments: string[]) => EC | undefined;
71
77
 
72
78
  /**
73
- * Default path under the navigation routes of the CMS will be created
79
+ * Default path under the navigation routes of the CMS will be created.
80
+ * Defaults to '/'. You may want to change this `basepath` to 'admin' for example.
74
81
  */
75
82
  basePath: string;
76
83
 
77
84
  /**
78
- * Default path under the collection routes of the CMS will be created
85
+ * Default path under the collection routes of the CMS will be created.
86
+ * It defaults to '/c'
79
87
  */
80
88
  baseCollectionPath: string;
81
89
 
@@ -88,16 +96,6 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
88
96
  */
89
97
  urlPathToDataPath: (cmsPath: string) => string;
90
98
 
91
- /**
92
- * Convert a collection or entity path to a URL path
93
- * @param path
94
- */
95
- buildCMSUrlPath: (path: string) => string;
96
-
97
- buildUrlEditCollectionPath: (props: {
98
- path: string
99
- }) => string;
100
-
101
99
  /**
102
100
  * Base url path for the home screen
103
101
  */
@@ -118,10 +116,11 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
118
116
  buildUrlCollectionPath: (path: string) => string;
119
117
 
120
118
  /**
121
- * Turn a path with aliases into a resolved path
119
+ * Turn a path with collection ids into a resolved path.
120
+ * The ids (typically used in urls) will be replaced with relative paths (typically used in database paths)
122
121
  * @param pathWithAliases
123
122
  */
124
- resolveAliasesFrom: (pathWithAliases: string) => string;
123
+ resolveIdsFrom: (pathWithAliases: string) => string;
125
124
 
126
125
  /**
127
126
  * Call this method to recalculate the navigation
@@ -145,8 +144,39 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
145
144
  * @param ids
146
145
  */
147
146
  convertIdsToPaths: (ids: string[]) => string[];
147
+
148
+ /**
149
+ * A function to navigate to a specified route or URL.
150
+ *
151
+ * @param {string} to - The target route or URL to navigate to.
152
+ * @param {NavigateOptions} [options] - Optional configuration settings for navigation, such as replace behavior or state data.
153
+ */
154
+ navigate: (to: string, options?: NavigateOptions) => void;
155
+
156
+ /**
157
+ * Plugin system allowing to extend the CMS functionality.
158
+ */
159
+ plugins?: FireCMSPlugin<any, any, any>[];
160
+
148
161
  }
149
162
 
163
+ export interface NavigateOptions {
164
+ replace?: boolean;
165
+ state?: any;
166
+ preventScrollReset?: boolean;
167
+ relative?: "route" | "path";
168
+ flushSync?: boolean;
169
+ viewTransition?: boolean;
170
+ }
171
+
172
+ // currently not used, in favor of a single blocker in `FireCMSRoute`
173
+ export type NavigationBlocker = {
174
+ updateBlockListener: (path: string, block: boolean, basePath?: string) => () => void;
175
+ isBlocked: (path: string) => boolean;
176
+ proceed?: () => void;
177
+ reset?: () => void;
178
+ };
179
+
150
180
  /**
151
181
  * Custom additional views created by the developer, added to the main
152
182
  * navigation.
@@ -174,6 +204,7 @@ export interface CMSView {
174
204
  * You can use any of the icons in the Material specs:
175
205
  * https://fonts.google.com/icons
176
206
  * e.g. 'account_tree' or 'person'
207
+ * Find all the icons in https://firecms.co/docs/icons
177
208
  */
178
209
  icon?: string;
179
210
 
@@ -198,7 +229,22 @@ export interface CMSView {
198
229
 
199
230
  }
200
231
 
201
- export interface TopNavigationEntry {
232
+ /**
233
+ * Used to group navigation entries in the main navigation.
234
+ */
235
+ export interface NavigationGroupMapping {
236
+ /**
237
+ * Name of the group, used to display the group header in the UI
238
+ */
239
+ name: string;
240
+ /**
241
+ * List of collection ids or view paths that belong to this group.
242
+ */
243
+ entries: string[];
244
+ }
245
+
246
+ export interface NavigationEntry {
247
+ id: string;
202
248
  url: string;
203
249
  name: string;
204
250
  path: string;
@@ -209,7 +255,14 @@ export interface TopNavigationEntry {
209
255
  group: string;
210
256
  }
211
257
 
212
- export type TopNavigationResult = {
213
- navigationEntries: TopNavigationEntry[],
214
- groups: string[]
258
+ export type NavigationResult = {
259
+
260
+ allowDragAndDrop: boolean;
261
+
262
+ navigationEntries: NavigationEntry[],
263
+
264
+ groups: string[],
265
+
266
+ onNavigationEntriesUpdate: (entries: NavigationGroupMapping[]) => void;
215
267
  };
268
+
@@ -32,7 +32,7 @@ export interface Permissions {
32
32
  * Props passed to a {@link PermissionsBuilder}
33
33
  * @group Models
34
34
  */
35
- export interface PermissionsBuilderProps<EC extends EntityCollection = EntityCollection, UserType extends User = User, M extends object = InferCollectionType<EC>> {
35
+ export interface PermissionsBuilderProps<EC extends EntityCollection = EntityCollection, USER extends User = User, M extends object = InferCollectionType<EC>> {
36
36
  /**
37
37
  * Entity being edited, might be null in some cases, when the operation
38
38
  * refers to the collection.
@@ -54,7 +54,7 @@ export interface PermissionsBuilderProps<EC extends EntityCollection = EntityCol
54
54
  /**
55
55
  * Logged in user
56
56
  */
57
- user: UserType | null;
57
+ user: USER | null;
58
58
 
59
59
  /**
60
60
  * Collection these permissions apply to
@@ -64,7 +64,7 @@ export interface PermissionsBuilderProps<EC extends EntityCollection = EntityCol
64
64
  /**
65
65
  * Auth controller
66
66
  */
67
- authController: AuthController<UserType>;
67
+ authController: AuthController<USER>;
68
68
  }
69
69
 
70
70
  /**
@@ -72,10 +72,10 @@ export interface PermissionsBuilderProps<EC extends EntityCollection = EntityCol
72
72
  * based on the logged user or collection.
73
73
  * @group Models
74
74
  */
75
- export type PermissionsBuilder<EC extends EntityCollection = EntityCollection, UserType extends User = User, M extends object = InferCollectionType<EC>> =
75
+ export type PermissionsBuilder<EC extends EntityCollection = EntityCollection, USER extends User = User, M extends object = InferCollectionType<EC>> =
76
76
  (({
77
77
  pathSegments,
78
78
  user,
79
79
  collection,
80
80
  authController
81
- }: PermissionsBuilderProps<EC, UserType, M>) => Permissions | undefined);
81
+ }: PermissionsBuilderProps<EC, USER, M>) => Permissions | undefined);
@@ -1,20 +1,20 @@
1
1
  import React, { PropsWithChildren } from "react";
2
2
 
3
3
  import { FireCMSContext } from "./firecms_context";
4
- import { CollectionActionsProps, EntityCollection } from "./collections";
4
+ import { CollectionActionsProps, EntityCollection, EntityTableController } from "./collections";
5
5
  import { User } from "./user";
6
6
  import { FieldProps, FormContext } from "./fields";
7
7
  import { CMSType, Property } from "./properties";
8
8
  import { EntityStatus } from "./entities";
9
9
  import { ResolvedProperty } from "./resolved_entities";
10
- import { CMSView } from "./navigation";
10
+ import { NavigationGroupMapping } from "./navigation";
11
11
 
12
12
  /**
13
13
  * Interface used to define plugins for FireCMS.
14
14
  * NOTE: This is a work in progress and the API is not stable yet.
15
15
  * @group Core
16
16
  */
17
- export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollection = EntityCollection, COL_ACTIONS_PROPS = any> = {
17
+ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollection = EntityCollection, COL_ACTIONS_PROPS = any, COL_ACTIONS_START__PROPS = any> = {
18
18
 
19
19
  /**
20
20
  * Key of the plugin. This is used to identify the plugin in the CMS.
@@ -85,6 +85,20 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
85
85
  children: React.ReactNode;
86
86
  }
87
87
 
88
+ /**
89
+ * Allow reordering with drag and drop of the collections in the home page.
90
+ */
91
+ allowDragAndDrop?: boolean;
92
+
93
+ navigationEntries?: NavigationGroupMapping[];
94
+
95
+ /**
96
+ * This method will be called when the entries are updated in the home page.
97
+ * group => navigationEntriesOrder (path)
98
+ * @param entries
99
+ */
100
+ onNavigationEntriesUpdate?: (entries: NavigationGroupMapping[]) => void;
101
+
88
102
  }
89
103
 
90
104
  collectionView?: {
@@ -94,9 +108,18 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
94
108
  * toolbar.
95
109
  */
96
110
  CollectionActions?: React.ComponentType<CollectionActionsProps<any, any, EC> & COL_ACTIONS_PROPS> | React.ComponentType<CollectionActionsProps<any, any, EC> & COL_ACTIONS_PROPS>[];
97
-
98
111
  collectionActionsProps?: COL_ACTIONS_PROPS;
99
112
 
113
+ CollectionActionsStart?: React.ComponentType<CollectionActionsProps<any, any, EC> & COL_ACTIONS_START__PROPS> | React.ComponentType<CollectionActionsProps<any, any, EC> & COL_ACTIONS_START__PROPS>[];
114
+ collectionActionsStartProps?: COL_ACTIONS_START__PROPS;
115
+
116
+ blockSearch?: (props: {
117
+ context: FireCMSContext,
118
+ path: string,
119
+ collection: EC,
120
+ parentCollectionIds?: string[]
121
+ }) => boolean;
122
+
100
123
  showTextSearchBar?: (props: {
101
124
  context: FireCMSContext,
102
125
  path: string,
@@ -122,6 +145,7 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
122
145
  parentCollectionIds: string[],
123
146
  onHover: boolean,
124
147
  collection: EC;
148
+ tableController: EntityTableController;
125
149
  }>;
126
150
 
127
151
  /**
@@ -132,6 +156,7 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
132
156
  fullPath: string,
133
157
  parentCollectionIds: string[],
134
158
  collection: EC;
159
+ tableController: EntityTableController;
135
160
  }>;
136
161
  }
137
162
 
@@ -148,6 +173,22 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
148
173
  fieldBuilderEnabled?: <T extends CMSType = CMSType>(props: PluginFieldBuilderParams<T>) => boolean;
149
174
  }
150
175
 
176
+ collection?: {
177
+
178
+ /**
179
+ * Use this method to modify a single collection before it is rendered.
180
+ * @param collection
181
+ */
182
+ modifyCollection?: (collection: EntityCollection) => EntityCollection;
183
+
184
+ /**
185
+ * Use this method to modify, add or remove collections.
186
+ * @param collections
187
+ */
188
+ injectCollections?: (collections: EntityCollection[]) => EntityCollection[];
189
+
190
+ }
191
+
151
192
  }
152
193
 
153
194
  /**
@@ -156,7 +197,7 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
156
197
  *
157
198
  * @group Models
158
199
  */
159
- export interface PluginHomePageActionsProps<EP extends object = object, M extends Record<string, any> = any, UserType extends User = User, EC extends EntityCollection<M> = EntityCollection<M>> {
200
+ export interface PluginHomePageActionsProps<EP extends object = object, M extends Record<string, any> = any, USER extends User = User, EC extends EntityCollection<M> = EntityCollection<M>> {
160
201
  /**
161
202
  * Collection path of this entity. This is the full path, like
162
203
  * `users/1234/addresses`
@@ -171,20 +212,22 @@ export interface PluginHomePageActionsProps<EP extends object = object, M extend
171
212
  /**
172
213
  * Context of the app status
173
214
  */
174
- context: FireCMSContext<UserType>;
215
+ context: FireCMSContext<USER>;
175
216
 
176
217
  extraProps?: EP;
177
218
 
178
219
  }
179
220
 
180
- export interface PluginFormActionProps<UserType extends User = User, EC extends EntityCollection = EntityCollection> {
221
+ export interface PluginFormActionProps<USER extends User = User, EC extends EntityCollection = EntityCollection> {
181
222
  entityId?: string;
182
223
  path: string;
183
224
  status: EntityStatus;
184
225
  collection: EC;
226
+ disabled: boolean;
185
227
  formContext?: FormContext<any>;
186
- context: FireCMSContext<UserType>;
228
+ context: FireCMSContext<USER>;
187
229
  currentEntityId?: string;
230
+ openEntityMode: "side_panel" | "full_screen";
188
231
  }
189
232
 
190
233
  export type PluginFieldBuilderParams<T extends CMSType = CMSType, M extends Record<string, any> = any, EC extends EntityCollection<M> = EntityCollection<M>> = {
@@ -193,15 +236,15 @@ export type PluginFieldBuilderParams<T extends CMSType = CMSType, M extends Reco
193
236
  property: Property<T> | ResolvedProperty<T>;
194
237
  Field: React.ComponentType<FieldProps<T, any, M>>;
195
238
  plugin: FireCMSPlugin;
196
- path: string;
197
- collection: EC;
239
+ path?: string;
240
+ collection?: EC;
198
241
  };
199
242
 
200
- export interface PluginGenericProps<UserType extends User = User> {
201
- context: FireCMSContext<UserType>;
243
+ export interface PluginGenericProps<USER extends User = User> {
244
+ context: FireCMSContext<USER>;
202
245
  }
203
246
 
204
- export interface PluginHomePageAdditionalCardsProps<UserType extends User = User> {
247
+ export interface PluginHomePageAdditionalCardsProps<USER extends User = User> {
205
248
  group?: string;
206
- context: FireCMSContext<UserType>;
249
+ context: FireCMSContext<USER>;
207
250
  }
@@ -1,10 +1,11 @@
1
1
  import React from "react";
2
2
  import { FieldProps } from "./fields";
3
3
  import { PropertyPreviewProps } from "../preview";
4
- import { EntityReference, EntityValues, GeoPoint } from "./entities";
4
+ 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
  /**
10
11
  * @group Entity properties
@@ -15,9 +16,10 @@ export type DataType<T extends CMSType = CMSType> =
15
16
  T extends boolean ? "boolean" :
16
17
  T extends Date ? "date" :
17
18
  T extends GeoPoint ? "geopoint" :
18
- T extends EntityReference ? "reference" :
19
- T extends Array<CMSType> ? "array" :
20
- T extends Record<string, any> ? "map" : never;
19
+ T extends Vector ? "vector" :
20
+ T extends EntityReference ? "reference" :
21
+ T extends Array<any> ? "array" :
22
+ T extends Record<string, any> ? "map" : never;
21
23
 
22
24
  /**
23
25
  * @group Entity properties
@@ -48,7 +50,7 @@ export type AnyProperty =
48
50
  /**
49
51
  * @group Entity properties
50
52
  */
51
- export type Property<T extends CMSType = CMSType> =
53
+ export type Property<T extends CMSType = any> =
52
54
  T extends string ? StringProperty :
53
55
  T extends number ? NumberProperty :
54
56
  T extends boolean ? BooleanProperty :
@@ -148,13 +150,19 @@ export interface BaseProperty<T extends CMSType, CustomProps = any> {
148
150
  /**
149
151
  * This value will be set by default for new entities.
150
152
  */
151
- defaultValue?: T;
153
+ defaultValue?: T | null;
152
154
 
153
155
  /**
154
156
  * Should this property be editable. If set to true, the user will be able to modify the property and
155
157
  * save the new config. The saved config will then become the source of truth.
156
158
  */
157
159
  editable?: boolean;
160
+
161
+ /**
162
+ * A number between 0 and 100 that indicates the width of the field in the form view.
163
+ * It defaults to 100, but you can set it to 50 to have two fields in the same row.
164
+ */
165
+ widthPercentage?: number;
158
166
  }
159
167
 
160
168
  /**
@@ -263,6 +271,11 @@ export type PropertyBuilderProps<M extends Record<string, any> = any> =
263
271
  * Entity ID
264
272
  */
265
273
  entityId?: string;
274
+
275
+ /**
276
+ * Controller to manage authentication
277
+ */
278
+ authController: AuthController;
266
279
  };
267
280
 
268
281
  /**
@@ -276,21 +289,23 @@ export type PropertyBuilder<T extends CMSType = any, M extends Record<string, an
276
289
  values,
277
290
  previousValues,
278
291
  propertyValue,
292
+ index,
279
293
  path,
280
- entityId
294
+ entityId,
295
+ authController
281
296
  }: PropertyBuilderProps<M>) => Property<T> | null;
282
297
 
283
298
  /**
284
299
  * @group Entity properties
285
300
  */
286
- export type PropertyOrBuilder<T extends CMSType = CMSType, M extends Record<string, any> = Record<string, any>> =
301
+ export type PropertyOrBuilder<T extends CMSType = CMSType, M extends Record<string, any> = any> =
287
302
  Property<T>
288
303
  | PropertyBuilder<T, M>;
289
304
 
290
305
  /**
291
306
  * @group Entity properties
292
307
  */
293
- export type PropertiesOrBuilders<M extends Record<string, any> = Record<string, any>> =
308
+ export type PropertiesOrBuilders<M extends Record<string, any> = any> =
294
309
  {
295
310
  [k in keyof M]: PropertyOrBuilder<M[k], M>;
296
311
  };
@@ -369,7 +384,7 @@ export interface StringProperty extends BaseProperty<string> {
369
384
 
370
385
  /**
371
386
  * You can specify a `Storage` configuration. It is used to
372
- * indicate that this string refers to a path in Google Cloud Storage.
387
+ * indicate that this string refers to a path in your storage provider.
373
388
  */
374
389
  storage?: StorageConfig;
375
390
 
@@ -398,12 +413,20 @@ export interface StringProperty extends BaseProperty<string> {
398
413
  * Add an icon to clear the value and set it to `null`. Defaults to `false`
399
414
  */
400
415
  clearable?: boolean;
416
+
417
+ /**
418
+ * You can use this property (a string) to behave as a reference to another
419
+ * collection. The stored value is the ID of the entity in the
420
+ * collection, and the `path` prop is used to
421
+ * define the collection this reference points to.
422
+ */
423
+ reference?: ReferenceProperty;
401
424
  }
402
425
 
403
426
  /**
404
427
  * @group Entity properties
405
428
  */
406
- export interface ArrayProperty<T extends ArrayT[] = any[], ArrayT extends CMSType = CMSType> extends BaseProperty<T> {
429
+ export interface ArrayProperty<T extends ArrayT[] = any[], ArrayT extends CMSType = any> extends BaseProperty<T> {
407
430
 
408
431
  dataType: "array";
409
432
 
@@ -467,6 +490,24 @@ export interface ArrayProperty<T extends ArrayT[] = any[], ArrayT extends CMSTyp
467
490
  */
468
491
  expanded?: boolean;
469
492
 
493
+ /**
494
+ * Display the child properties directly, without being wrapped in an
495
+ * extendable panel.
496
+ */
497
+ minimalistView?: boolean;
498
+
499
+ /**
500
+ * Can the elements in this array be reordered. Defaults to `true`.
501
+ * This prop has no effect if `disabled` is set to true.
502
+ */
503
+ sortable?: boolean;
504
+
505
+ /**
506
+ * Can the elements in this array be added. Defaults to `true`
507
+ * This prop has no effect if `disabled` is set to true.
508
+ */
509
+ canAddElements?: boolean;
510
+
470
511
  }
471
512
 
472
513
  /**
@@ -515,6 +556,12 @@ export interface MapProperty<T extends Record<string, CMSType> = Record<string,
515
556
  */
516
557
  spreadChildren?: boolean;
517
558
 
559
+ /**
560
+ * Display the child properties directly, without being wrapped in an
561
+ * extendable panel. Note that this will also hide the title of this property.
562
+ */
563
+ minimalistView?: boolean;
564
+
518
565
  /**
519
566
  * Should the field be initially expanded. Defaults to `true`
520
567
  */
@@ -608,6 +655,16 @@ export interface ReferenceProperty extends BaseProperty<EntityReference> {
608
655
  */
609
656
  previewProperties?: string[];
610
657
 
658
+ /**
659
+ * Should the reference include the ID of the entity. Defaults to `true`
660
+ */
661
+ includeId?: boolean;
662
+
663
+ /**
664
+ * Should the reference include a link to the entity (open the entity details). Defaults to `true`
665
+ */
666
+ includeEntityLink?: boolean;
667
+
611
668
  }
612
669
 
613
670
  /**
@@ -722,13 +779,13 @@ export type StorageConfig = {
722
779
  * You can use this prop to customize the uploaded filename.
723
780
  * You can use a function as a callback or a string where you
724
781
  * specify some placeholders that get replaced with the corresponding values.
725
- * - {file} - Full file name
726
- * - {file.name} - Name of the file without extension
727
- * - {file.ext} - Extension of the file
728
- * - {rand} - Random value used to avoid name collisions
729
- * - {entityId} - ID of the entity
730
- * - {propertyKey} - ID of this property
731
- * - {path} - Path of this entity
782
+ * - `{file}` - Full file name
783
+ * - `{file.name}` - Name of the file without extension
784
+ * - `{file.ext}` - Extension of the file
785
+ * - `{rand}` - Random value used to avoid name collisions
786
+ * - `{entityId}` - ID of the entity
787
+ * - `{propertyKey}` - ID of this property
788
+ * - `{path}` - Path of this entity
732
789
  *
733
790
  * @param context
734
791
  */
@@ -739,13 +796,13 @@ export type StorageConfig = {
739
796
  *
740
797
  * You can use a function as a callback or a string where you
741
798
  * specify some placeholders that get replaced with the corresponding values.
742
- * - {file} - Full file name
743
- * - {file.name} - Name of the file without extension
744
- * - {file.ext} - Extension of the file
745
- * - {rand} - Random value used to avoid name collisions
746
- * - {entityId} - ID of the entity
747
- * - {propertyKey} - ID of this property
748
- * - {path} - Path of this entity
799
+ * - `{file}` - Full file name
800
+ * - `{file.name}` - Name of the file without extension
801
+ * - `{file.ext}` - Extension of the file
802
+ * - `{rand}` - Random value used to avoid name collisions
803
+ * - `{entityId}` - ID of the entity
804
+ * - `{propertyKey}` - ID of this property
805
+ * - `{path}` - Path of this entity
749
806
  */
750
807
  storagePath: string | ((context: UploadedFileContext) => string);
751
808
 
@@ -766,12 +823,24 @@ export type StorageConfig = {
766
823
  */
767
824
  maxSize?: number,
768
825
 
826
+ /**
827
+ * Use this callback to process the file before uploading it to the storage.
828
+ * If nothing is returned, the file is uploaded as it is.
829
+ * @param file
830
+ */
831
+ processFile?: (file: File) => Promise<File> | undefined;
832
+
769
833
  /**
770
834
  * Postprocess the saved value (storage path or URL)
771
835
  * after it has been resolved.
772
836
  */
773
837
  postProcess?: (pathOrUrl: string) => Promise<string>;
774
838
 
839
+ /**
840
+ * You can use this prop in order to provide a custom preview URL.
841
+ * Useful when the file's path is different from the original field value
842
+ */
843
+ previewUrl?: (fileName: string) => string;
775
844
  }
776
845
 
777
846
  /**
@@ -801,7 +870,7 @@ export interface UploadedFileContext {
801
870
  /**
802
871
  * Entity path. E.g. `products/PID/locales`
803
872
  */
804
- path: string;
873
+ path?: string;
805
874
 
806
875
  /**
807
876
  * Values of the current entity
@@ -23,8 +23,6 @@ export type PropertyConfig<T extends CMSType = any> = {
23
23
  * Default config for the property.
24
24
  * This property or builder will be used as the base values for the resulting property.
25
25
  * You can also use a builder function to generate the base property.
26
- * You can use a builder function to generate the property based on the values or the path.
27
- * You can also define a custom Field as a React component to be used for this property.
28
26
  */
29
27
  property: PropertyOrBuilder<T>;
30
28
 
@@ -64,6 +62,7 @@ export type PropertyConfigId =
64
62
  "group" |
65
63
  "key_value" |
66
64
  "reference" |
65
+ "reference_as_string" |
67
66
  "multi_references" |
68
67
  "switch" |
69
68
  "date_time" |
@@ -1,3 +1,6 @@
1
+ import React from "react";
2
+ import { EntityFormProps } from "../form";
3
+
1
4
  /**
2
5
  * Controller to open the side dialog
3
6
  * @group Hooks and utilities
@@ -14,6 +17,12 @@ export interface SideDialogsController {
14
17
  */
15
18
  sidePanels: SideDialogPanelProps[];
16
19
 
20
+ /**
21
+ * Override the current side panels
22
+ * @param panels
23
+ */
24
+ setSidePanels: (panels: SideDialogPanelProps[]) => void;
25
+
17
26
  /**
18
27
  * Open one or multiple side panels
19
28
  * @param props
@@ -65,4 +74,10 @@ export interface SideDialogPanelProps {
65
74
  * Callback when the panel is closed
66
75
  */
67
76
  onClose?: () => void;
77
+
78
+ /**
79
+ * Use this prop to store additional data in the panel
80
+ */
81
+ additional?: any;
82
+
68
83
  }