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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (387) hide show
  1. package/README.md +3 -3
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +16 -0
  4. package/dist/app/Scaffold.d.ts +34 -0
  5. package/dist/app/index.d.ts +4 -0
  6. package/dist/app/useApp.d.ts +16 -0
  7. package/dist/components/ArrayContainer.d.ts +30 -6
  8. package/dist/components/CircularProgressCenter.d.ts +1 -1
  9. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  10. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  11. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +13 -13
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +22 -6
  14. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
  15. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  16. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
  17. package/dist/components/EntityCollectionTable/index.d.ts +1 -1
  18. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  19. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  20. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +7 -4
  21. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +20 -2
  22. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  23. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  24. package/dist/components/EntityJsonPreview.d.ts +3 -0
  25. package/dist/components/EntityPreview.d.ts +8 -5
  26. package/dist/components/ErrorView.d.ts +1 -1
  27. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  28. package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
  29. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  30. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  31. package/dist/components/ReferenceWidget.d.ts +3 -1
  32. package/dist/components/SelectableTable/SelectableTable.d.ts +14 -4
  33. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  34. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  35. package/dist/components/VirtualTable/VirtualTableProps.d.ts +28 -12
  36. package/dist/components/VirtualTable/types.d.ts +3 -3
  37. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
  38. package/dist/components/common/index.d.ts +2 -1
  39. package/dist/components/common/table_height.d.ts +5 -0
  40. package/dist/components/common/types.d.ts +4 -6
  41. package/dist/components/common/useColumnsIds.d.ts +3 -1
  42. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
  43. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  44. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  45. package/dist/components/index.d.ts +5 -2
  46. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  47. package/dist/core/DefaultAppBar.d.ts +29 -0
  48. package/dist/core/DefaultDrawer.d.ts +19 -0
  49. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  50. package/dist/core/EntityEditView.d.ts +40 -11
  51. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  52. package/dist/core/FireCMS.d.ts +3 -3
  53. package/dist/core/FireCMSRouter.d.ts +4 -0
  54. package/dist/core/NavigationRoutes.d.ts +2 -3
  55. package/dist/core/SideDialogs.d.ts +4 -2
  56. package/dist/core/index.d.ts +4 -4
  57. package/dist/form/EntityForm.d.ts +36 -64
  58. package/dist/form/EntityFormActions.d.ts +17 -0
  59. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  60. package/dist/form/components/ErrorFocus.d.ts +1 -1
  61. package/dist/form/components/FieldHelperText.d.ts +3 -3
  62. package/dist/form/components/FormEntry.d.ts +6 -0
  63. package/dist/form/components/FormLayout.d.ts +5 -0
  64. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  65. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  66. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  67. package/dist/form/components/index.d.ts +3 -1
  68. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  69. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  70. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  71. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  72. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  73. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  74. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  75. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  76. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  77. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  78. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  79. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
  80. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  81. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  82. package/dist/form/index.d.ts +16 -18
  83. package/dist/form/useClearRestoreValue.d.ts +2 -2
  84. package/dist/hooks/data/delete.d.ts +4 -4
  85. package/dist/hooks/data/save.d.ts +4 -5
  86. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  87. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  88. package/dist/hooks/index.d.ts +1 -0
  89. package/dist/hooks/useAuthController.d.ts +1 -1
  90. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  91. package/dist/hooks/useBuildNavigationController.d.ts +7 -12
  92. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  93. package/dist/hooks/useModeController.d.ts +1 -2
  94. package/dist/hooks/useProjectLog.d.ts +8 -2
  95. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  96. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  97. package/dist/index.d.ts +1 -0
  98. package/dist/index.es.js +21578 -13895
  99. package/dist/index.es.js.map +1 -1
  100. package/dist/index.umd.js +24366 -588
  101. package/dist/index.umd.js.map +1 -1
  102. package/dist/internal/useBuildDataSource.d.ts +3 -17
  103. package/dist/internal/useBuildSideEntityController.d.ts +3 -3
  104. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  105. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  106. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  107. package/dist/preview/components/ReferencePreview.d.ts +3 -2
  108. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  109. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  110. package/dist/preview/util.d.ts +3 -3
  111. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  112. package/dist/routes/FireCMSRoute.d.ts +1 -0
  113. package/dist/routes/HomePageRoute.d.ts +3 -0
  114. package/dist/types/auth.d.ts +8 -10
  115. package/dist/types/collections.d.ts +97 -23
  116. package/dist/types/datasource.d.ts +52 -36
  117. package/dist/types/dialogs_controller.d.ts +7 -3
  118. package/dist/types/entities.d.ts +7 -2
  119. package/dist/types/entity_actions.d.ts +28 -4
  120. package/dist/types/entity_callbacks.d.ts +16 -16
  121. package/dist/types/entity_overrides.d.ts +2 -2
  122. package/dist/types/export_import.d.ts +4 -4
  123. package/dist/types/fields.d.ts +74 -42
  124. package/dist/types/firecms.d.ts +8 -3
  125. package/dist/types/firecms_context.d.ts +1 -1
  126. package/dist/types/index.d.ts +0 -1
  127. package/dist/types/navigation.d.ts +41 -14
  128. package/dist/types/permissions.d.ts +4 -4
  129. package/dist/types/plugins.d.ts +36 -12
  130. package/dist/types/properties.d.ts +73 -24
  131. package/dist/types/property_config.d.ts +0 -2
  132. package/dist/types/side_dialogs_controller.d.ts +10 -0
  133. package/dist/types/side_entity_controller.d.ts +10 -1
  134. package/dist/types/storage.d.ts +86 -3
  135. package/dist/types/user.d.ts +1 -0
  136. package/dist/util/builders.d.ts +3 -3
  137. package/dist/util/callbacks.d.ts +2 -0
  138. package/dist/util/createFormexStub.d.ts +2 -0
  139. package/dist/util/entities.d.ts +3 -3
  140. package/dist/util/entity_actions.d.ts +2 -0
  141. package/dist/util/entity_cache.d.ts +23 -0
  142. package/dist/util/icon_list.d.ts +5 -1
  143. package/dist/util/icon_synonyms.d.ts +1 -98
  144. package/dist/util/icons.d.ts +6 -3
  145. package/dist/util/index.d.ts +3 -0
  146. package/dist/util/navigation_from_path.d.ts +6 -1
  147. package/dist/util/navigation_utils.d.ts +15 -3
  148. package/dist/util/objects.d.ts +2 -1
  149. package/dist/util/permissions.d.ts +4 -4
  150. package/dist/util/plurals.d.ts +0 -2
  151. package/dist/util/property_utils.d.ts +4 -4
  152. package/dist/util/references.d.ts +2 -2
  153. package/dist/util/resolutions.d.ts +41 -17
  154. package/dist/util/storage.d.ts +23 -2
  155. package/dist/util/useStorageUploadController.d.ts +3 -3
  156. package/package.json +62 -48
  157. package/src/app/AppBar.tsx +18 -0
  158. package/src/app/Drawer.tsx +24 -0
  159. package/src/app/Scaffold.tsx +253 -0
  160. package/src/app/index.ts +4 -0
  161. package/src/app/useApp.tsx +32 -0
  162. package/src/components/ArrayContainer.tsx +149 -46
  163. package/src/components/CircularProgressCenter.tsx +2 -2
  164. package/src/components/ClearFilterSortButton.tsx +41 -0
  165. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +11 -11
  166. package/src/components/DeleteEntityDialog.tsx +13 -20
  167. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +59 -40
  168. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
  169. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
  170. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +48 -40
  171. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  172. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
  173. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
  174. package/src/components/EntityCollectionTable/index.tsx +1 -1
  175. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +32 -37
  176. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
  177. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  178. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +84 -80
  179. package/src/components/EntityCollectionView/EntityCollectionView.tsx +229 -117
  180. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +4 -2
  181. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  182. package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
  183. package/src/components/EntityCollectionView/utils.ts +19 -0
  184. package/src/components/EntityJsonPreview.tsx +66 -0
  185. package/src/components/EntityPreview.tsx +80 -59
  186. package/src/components/EntityView.tsx +13 -10
  187. package/src/components/ErrorView.tsx +4 -4
  188. package/src/components/HomePage/DefaultHomePage.tsx +27 -20
  189. package/src/components/HomePage/FavouritesView.tsx +6 -11
  190. package/src/components/HomePage/NavigationCard.tsx +3 -3
  191. package/src/components/HomePage/NavigationCardBinding.tsx +5 -10
  192. package/src/components/HomePage/NavigationGroup.tsx +2 -2
  193. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  194. package/src/components/NotFoundPage.tsx +2 -2
  195. package/src/components/PropertyConfigBadge.tsx +9 -3
  196. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  197. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +21 -13
  198. package/src/components/ReferenceWidget.tsx +21 -11
  199. package/src/components/SearchIconsView.tsx +10 -7
  200. package/src/components/SelectableTable/SelectableTable.tsx +157 -145
  201. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  202. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
  203. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
  204. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -23
  205. package/src/components/UnsavedChangesDialog.tsx +42 -0
  206. package/src/components/VirtualTable/VirtualTable.tsx +130 -51
  207. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  208. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  209. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  210. package/src/components/VirtualTable/VirtualTableProps.tsx +33 -14
  211. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  212. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  213. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +3 -2
  214. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  215. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  216. package/src/components/VirtualTable/types.tsx +2 -3
  217. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +44 -40
  218. package/src/components/common/index.ts +2 -1
  219. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  220. package/src/components/common/types.tsx +4 -6
  221. package/src/components/common/useColumnsIds.tsx +24 -3
  222. package/src/components/common/useDataSourceTableController.tsx +420 -0
  223. package/src/components/common/useDebouncedCallback.tsx +20 -0
  224. package/src/components/common/useScrollRestoration.tsx +68 -0
  225. package/src/components/common/useTableSearchHelper.ts +53 -12
  226. package/src/components/index.tsx +6 -2
  227. package/src/contexts/BreacrumbsContext.tsx +38 -0
  228. package/src/contexts/DialogsProvider.tsx +5 -4
  229. package/src/contexts/ModeController.tsx +1 -3
  230. package/src/contexts/SnackbarProvider.tsx +2 -0
  231. package/src/core/DefaultAppBar.tsx +219 -0
  232. package/src/core/DefaultDrawer.tsx +185 -0
  233. package/src/core/DrawerNavigationItem.tsx +66 -0
  234. package/src/core/EntityEditView.tsx +406 -478
  235. package/src/core/EntityEditViewFormActions.tsx +199 -0
  236. package/src/core/EntitySidePanel.tsx +95 -19
  237. package/src/core/FireCMS.tsx +72 -58
  238. package/src/core/FireCMSRouter.tsx +17 -0
  239. package/src/core/NavigationRoutes.tsx +28 -38
  240. package/src/core/SideDialogs.tsx +22 -12
  241. package/src/core/field_configs.tsx +11 -12
  242. package/src/core/index.tsx +6 -5
  243. package/src/form/EntityForm.tsx +589 -535
  244. package/src/form/EntityFormActions.tsx +169 -0
  245. package/src/form/PropertyFieldBinding.tsx +89 -45
  246. package/src/form/components/CustomIdField.tsx +6 -2
  247. package/src/form/components/FieldHelperText.tsx +4 -4
  248. package/src/form/components/FormEntry.tsx +22 -0
  249. package/src/form/components/FormLayout.tsx +16 -0
  250. package/src/form/components/LabelWithIcon.tsx +30 -19
  251. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  252. package/src/form/components/StorageItemPreview.tsx +22 -12
  253. package/src/form/components/StorageUploadProgress.tsx +4 -5
  254. package/src/form/components/index.tsx +3 -1
  255. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +34 -19
  256. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +48 -35
  257. package/src/form/field_bindings/BlockFieldBinding.tsx +56 -34
  258. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  259. package/src/form/field_bindings/KeyValueFieldBinding.tsx +61 -52
  260. package/src/form/field_bindings/MapFieldBinding.tsx +71 -54
  261. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +157 -0
  262. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
  263. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  264. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  265. package/src/form/field_bindings/RepeatFieldBinding.tsx +62 -35
  266. package/src/form/field_bindings/SelectFieldBinding.tsx +23 -15
  267. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +47 -52
  268. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  269. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  270. package/src/form/index.tsx +16 -37
  271. package/src/form/useClearRestoreValue.tsx +2 -2
  272. package/src/form/validation.ts +13 -23
  273. package/src/hooks/data/delete.ts +6 -5
  274. package/src/hooks/data/save.ts +32 -33
  275. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  276. package/src/hooks/data/useDataSource.tsx +11 -3
  277. package/src/hooks/data/useEntityFetch.tsx +10 -6
  278. package/src/hooks/index.tsx +1 -0
  279. package/src/hooks/useAuthController.tsx +1 -1
  280. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  281. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  282. package/src/hooks/useBuildModeController.tsx +22 -29
  283. package/src/hooks/useBuildNavigationController.tsx +194 -68
  284. package/src/hooks/useFireCMSContext.tsx +3 -33
  285. package/src/hooks/useLargeLayout.tsx +0 -35
  286. package/src/hooks/useModeController.tsx +1 -2
  287. package/src/hooks/useProjectLog.tsx +32 -10
  288. package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
  289. package/src/hooks/useValidateAuthenticator.tsx +17 -37
  290. package/src/index.ts +1 -0
  291. package/src/internal/useBuildDataSource.ts +79 -85
  292. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  293. package/src/internal/useBuildSideEntityController.tsx +201 -75
  294. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  295. package/src/preview/PropertyPreview.tsx +20 -25
  296. package/src/preview/PropertyPreviewProps.tsx +7 -1
  297. package/src/preview/components/BooleanPreview.tsx +2 -2
  298. package/src/preview/components/EmptyValue.tsx +1 -1
  299. package/src/preview/components/EnumValuesChip.tsx +2 -2
  300. package/src/preview/components/ImagePreview.tsx +26 -37
  301. package/src/preview/components/ReferencePreview.tsx +23 -34
  302. package/src/preview/components/StorageThumbnail.tsx +5 -1
  303. package/src/preview/components/UrlComponentPreview.tsx +60 -28
  304. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -6
  305. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +7 -5
  306. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -4
  307. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -4
  308. package/src/preview/property_previews/ArrayOneOfPreview.tsx +7 -6
  309. package/src/preview/property_previews/ArrayPropertyPreview.tsx +7 -6
  310. package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
  311. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
  312. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  313. package/src/preview/util.ts +10 -10
  314. package/src/routes/CustomCMSRoute.tsx +21 -0
  315. package/src/routes/FireCMSRoute.tsx +246 -0
  316. package/src/routes/HomePageRoute.tsx +17 -0
  317. package/src/types/auth.tsx +9 -13
  318. package/src/types/collections.ts +118 -28
  319. package/src/types/customization_controller.tsx +0 -1
  320. package/src/types/datasource.ts +61 -43
  321. package/src/types/dialogs_controller.tsx +7 -3
  322. package/src/types/entities.ts +12 -2
  323. package/src/types/entity_actions.tsx +32 -7
  324. package/src/types/entity_callbacks.ts +18 -18
  325. package/src/types/entity_overrides.tsx +2 -2
  326. package/src/types/export_import.ts +4 -4
  327. package/src/types/fields.tsx +85 -46
  328. package/src/types/firecms.tsx +9 -4
  329. package/src/types/firecms_context.tsx +1 -1
  330. package/src/types/index.ts +0 -1
  331. package/src/types/navigation.ts +49 -18
  332. package/src/types/permissions.ts +5 -5
  333. package/src/types/plugins.tsx +42 -14
  334. package/src/types/properties.ts +87 -26
  335. package/src/types/property_config.tsx +0 -2
  336. package/src/types/side_dialogs_controller.tsx +15 -0
  337. package/src/types/side_entity_controller.tsx +11 -1
  338. package/src/types/storage.ts +94 -3
  339. package/src/types/user.ts +2 -0
  340. package/src/util/builders.ts +10 -8
  341. package/src/util/callbacks.ts +119 -0
  342. package/src/util/createFormexStub.tsx +62 -0
  343. package/src/util/entities.ts +9 -6
  344. package/src/util/entity_actions.ts +28 -0
  345. package/src/util/entity_cache.ts +204 -0
  346. package/src/util/enums.ts +1 -1
  347. package/src/util/icon_list.ts +16 -10
  348. package/src/util/icon_synonyms.ts +3 -100
  349. package/src/util/icons.tsx +17 -7
  350. package/src/util/index.ts +3 -0
  351. package/src/util/join_collections.ts +6 -1
  352. package/src/util/make_properties_editable.ts +13 -5
  353. package/src/util/navigation_from_path.ts +18 -7
  354. package/src/util/navigation_utils.ts +141 -25
  355. package/src/util/objects.ts +52 -28
  356. package/src/util/parent_references_from_path.ts +3 -3
  357. package/src/util/permissions.ts +9 -8
  358. package/src/util/plurals.ts +0 -2
  359. package/src/util/property_utils.tsx +17 -6
  360. package/src/util/references.ts +19 -8
  361. package/src/util/resolutions.ts +110 -48
  362. package/src/util/storage.ts +79 -21
  363. package/src/util/strings.ts +2 -2
  364. package/src/util/useStorageUploadController.tsx +91 -28
  365. package/dist/components/FireCMSAppBar.d.ts +0 -26
  366. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  367. package/dist/components/VirtualTable/common.d.ts +0 -2
  368. package/dist/core/Drawer.d.ts +0 -23
  369. package/dist/core/Scaffold.d.ts +0 -55
  370. package/dist/core/SideEntityView.d.ts +0 -7
  371. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  372. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  373. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  374. package/dist/internal/useLocaleConfig.d.ts +0 -1
  375. package/dist/types/appcheck.d.ts +0 -26
  376. package/src/components/FireCMSAppBar.tsx +0 -165
  377. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  378. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
  379. package/src/core/Drawer.tsx +0 -191
  380. package/src/core/Scaffold.tsx +0 -281
  381. package/src/core/SideEntityView.tsx +0 -38
  382. package/src/form/components/FormikArrayContainer.tsx +0 -44
  383. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  384. package/src/internal/useBuildCustomizationController.tsx +0 -5
  385. package/src/internal/useLocaleConfig.tsx +0 -18
  386. package/src/types/appcheck.ts +0 -29
  387. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -44,7 +44,7 @@ export type CMSViewsBuilder = (params: {
44
44
  /**
45
45
  * @group Models
46
46
  */
47
- export type FireCMSProps<UserType extends User, EC extends EntityCollection> = {
47
+ export type FireCMSProps<USER extends User> = {
48
48
  /**
49
49
  * Use this function to return the components you want to render under
50
50
  * FireCMS
@@ -62,6 +62,10 @@ export type FireCMSProps<UserType extends User, EC extends EntityCollection> = {
62
62
  */
63
63
  loading: boolean;
64
64
  }) => React.ReactNode;
65
+ /**
66
+ * If you have a custom API key, you can use it here.
67
+ */
68
+ apiKey?: string;
65
69
  /**
66
70
  * Record of custom form fields to be used in the CMS.
67
71
  * You can use the key to reference the custom field in
@@ -101,7 +105,7 @@ export type FireCMSProps<UserType extends User, EC extends EntityCollection> = {
101
105
  /**
102
106
  * Delegate for implementing your auth operations.
103
107
  */
104
- authController: AuthController<UserType>;
108
+ authController: AuthController<USER>;
105
109
  /**
106
110
  * Use this controller to access the configuration that is stored locally,
107
111
  * and not defined in code
@@ -109,7 +113,8 @@ export type FireCMSProps<UserType extends User, EC extends EntityCollection> = {
109
113
  userConfigPersistence?: UserConfigurationPersistence;
110
114
  /**
111
115
  * Use plugins to modify the behaviour of the CMS.
112
- * Currently, in ALPHA, and likely subject to change.
116
+ * DEPRECATED: use the `plugins` prop in the `useBuildNavigationController` instead.
117
+ * This prop will work as a fallback for the `plugins` prop in the `useBuildNavigationController`.
113
118
  */
114
119
  plugins?: FireCMSPlugin<any, any, any>[];
115
120
  /**
@@ -17,7 +17,7 @@ import { AnalyticsController } from "./analytics_controller";
17
17
  * @group Hooks and utilities
18
18
  * @see useFireCMSContext
19
19
  */
20
- export type FireCMSContext<UserType extends User = User, AuthControllerType extends AuthController<UserType> = AuthController<UserType>> = {
20
+ export type FireCMSContext<USER extends User = User, AuthControllerType extends AuthController<USER> = AuthController<USER>> = {
21
21
  /**
22
22
  * Connector to your database, e.g. your Firestore database
23
23
  */
@@ -23,7 +23,6 @@ export * from "./plugins";
23
23
  export * from "./analytics";
24
24
  export * from "./firecms";
25
25
  export * from "./roles";
26
- export * from "./appcheck";
27
26
  export * from "./export_import";
28
27
  export * from "./modify_collections";
29
28
  export * from "./analytics_controller";
@@ -1,9 +1,11 @@
1
1
  import React from "react";
2
2
  import { EntityCollection } from "./collections";
3
3
  import { EntityReference } from "./entities";
4
+ import { FireCMSPlugin } from "./plugins";
4
5
  /**
5
6
  * Controller that includes the resolved navigation and utility methods and
6
7
  * attributes.
8
+ * This controller holds the state of the navigation including the collections.
7
9
  * @group Models
8
10
  */
9
11
  export type NavigationController<EC extends EntityCollection = EntityCollection<any>> = {
@@ -47,9 +49,13 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
47
49
  * Get the collection configuration for a given path.
48
50
  * The collection is resolved from the given path or alias.
49
51
  */
50
- getCollection: (pathOrAlias: string, entityId?: string, includeUserOverride?: boolean) => EC | undefined;
52
+ getCollection: (pathOrId: string, includeUserOverride?: boolean) => EC | undefined;
51
53
  /**
52
- * Get the collection configuration from its parent path segments.
54
+ * Get the top level collection configuration for a given id
55
+ */
56
+ getCollectionById: (id: string) => EC | undefined;
57
+ /**
58
+ * Get the collection configuration from its parent ids.
53
59
  */
54
60
  getCollectionFromIds: (ids: string[]) => EC | undefined;
55
61
  /**
@@ -57,11 +63,13 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
57
63
  */
58
64
  getCollectionFromPaths: (pathSegments: string[]) => EC | undefined;
59
65
  /**
60
- * Default path under the navigation routes of the CMS will be created
66
+ * Default path under the navigation routes of the CMS will be created.
67
+ * Defaults to '/'. You may want to change this `basepath` to 'admin' for example.
61
68
  */
62
69
  basePath: string;
63
70
  /**
64
- * Default path under the collection routes of the CMS will be created
71
+ * Default path under the collection routes of the CMS will be created.
72
+ * It defaults to '/c'
65
73
  */
66
74
  baseCollectionPath: string;
67
75
  /**
@@ -72,14 +80,6 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
72
80
  * @param cmsPath
73
81
  */
74
82
  urlPathToDataPath: (cmsPath: string) => string;
75
- /**
76
- * Convert a collection or entity path to a URL path
77
- * @param path
78
- */
79
- buildCMSUrlPath: (path: string) => string;
80
- buildUrlEditCollectionPath: (props: {
81
- path: string;
82
- }) => string;
83
83
  /**
84
84
  * Base url path for the home screen
85
85
  */
@@ -97,10 +97,11 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
97
97
  */
98
98
  buildUrlCollectionPath: (path: string) => string;
99
99
  /**
100
- * Turn a path with aliases into a resolved path
100
+ * Turn a path with collection ids into a resolved path.
101
+ * The ids (typically used in urls) will be replaced with relative paths (typically used in database paths)
101
102
  * @param pathWithAliases
102
103
  */
103
- resolveAliasesFrom: (pathWithAliases: string) => string;
104
+ resolveIdsFrom: (pathWithAliases: string) => string;
104
105
  /**
105
106
  * Call this method to recalculate the navigation
106
107
  */
@@ -120,6 +121,31 @@ export type NavigationController<EC extends EntityCollection = EntityCollection<
120
121
  * @param ids
121
122
  */
122
123
  convertIdsToPaths: (ids: string[]) => string[];
124
+ /**
125
+ * A function to navigate to a specified route or URL.
126
+ *
127
+ * @param {string} to - The target route or URL to navigate to.
128
+ * @param {NavigateOptions} [options] - Optional configuration settings for navigation, such as replace behavior or state data.
129
+ */
130
+ navigate: (to: string, options?: NavigateOptions) => void;
131
+ /**
132
+ * Plugin system allowing to extend the CMS functionality.
133
+ */
134
+ plugins?: FireCMSPlugin<any, any, any>[];
135
+ };
136
+ export interface NavigateOptions {
137
+ replace?: boolean;
138
+ state?: any;
139
+ preventScrollReset?: boolean;
140
+ relative?: "route" | "path";
141
+ flushSync?: boolean;
142
+ viewTransition?: boolean;
143
+ }
144
+ export type NavigationBlocker = {
145
+ updateBlockListener: (path: string, block: boolean, basePath?: string) => () => void;
146
+ isBlocked: (path: string) => boolean;
147
+ proceed?: () => void;
148
+ reset?: () => void;
123
149
  };
124
150
  /**
125
151
  * Custom additional views created by the developer, added to the main
@@ -144,6 +170,7 @@ 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
175
  icon?: string;
149
176
  /**
@@ -30,7 +30,7 @@ export interface Permissions {
30
30
  * Props passed to a {@link PermissionsBuilder}
31
31
  * @group Models
32
32
  */
33
- export interface PermissionsBuilderProps<EC extends EntityCollection = EntityCollection, UserType extends User = User, M extends object = InferCollectionType<EC>> {
33
+ export interface PermissionsBuilderProps<EC extends EntityCollection = EntityCollection, USER extends User = User, M extends object = InferCollectionType<EC>> {
34
34
  /**
35
35
  * Entity being edited, might be null in some cases, when the operation
36
36
  * refers to the collection.
@@ -49,7 +49,7 @@ export interface PermissionsBuilderProps<EC extends EntityCollection = EntityCol
49
49
  /**
50
50
  * Logged in user
51
51
  */
52
- user: UserType | null;
52
+ user: USER | null;
53
53
  /**
54
54
  * Collection these permissions apply to
55
55
  */
@@ -57,11 +57,11 @@ export interface PermissionsBuilderProps<EC extends EntityCollection = EntityCol
57
57
  /**
58
58
  * Auth controller
59
59
  */
60
- authController: AuthController<UserType>;
60
+ authController: AuthController<USER>;
61
61
  }
62
62
  /**
63
63
  * Builder used to assign permissions to entities,
64
64
  * based on the logged user or collection.
65
65
  * @group Models
66
66
  */
67
- export type PermissionsBuilder<EC extends EntityCollection = EntityCollection, UserType extends User = User, M extends object = InferCollectionType<EC>> = (({ pathSegments, user, collection, authController }: PermissionsBuilderProps<EC, UserType, M>) => Permissions | undefined);
67
+ export type PermissionsBuilder<EC extends EntityCollection = EntityCollection, USER extends User = User, M extends object = InferCollectionType<EC>> = (({ pathSegments, user, collection, authController }: PermissionsBuilderProps<EC, USER, M>) => Permissions | undefined);
@@ -1,6 +1,6 @@
1
1
  import React, { PropsWithChildren } from "react";
2
2
  import { FireCMSContext } from "./firecms_context";
3
- import { CollectionActionsProps, EntityCollection } from "./collections";
3
+ import { CollectionActionsProps, EntityCollection, EntityTableController } from "./collections";
4
4
  import { User } from "./user";
5
5
  import { FieldProps, FormContext } from "./fields";
6
6
  import { CMSType, Property } from "./properties";
@@ -11,7 +11,7 @@ import { ResolvedProperty } from "./resolved_entities";
11
11
  * NOTE: This is a work in progress and the API is not stable yet.
12
12
  * @group Core
13
13
  */
14
- export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollection = EntityCollection, COL_ACTIONS_PROPS = any> = {
14
+ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollection = EntityCollection, COL_ACTIONS_PROPS = any, COL_ACTIONS_START__PROPS = any> = {
15
15
  /**
16
16
  * Key of the plugin. This is used to identify the plugin in the CMS.
17
17
  */
@@ -78,6 +78,14 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
78
78
  */
79
79
  CollectionActions?: React.ComponentType<CollectionActionsProps<any, any, EC> & COL_ACTIONS_PROPS> | React.ComponentType<CollectionActionsProps<any, any, EC> & COL_ACTIONS_PROPS>[];
80
80
  collectionActionsProps?: COL_ACTIONS_PROPS;
81
+ CollectionActionsStart?: React.ComponentType<CollectionActionsProps<any, any, EC> & COL_ACTIONS_START__PROPS> | React.ComponentType<CollectionActionsProps<any, any, EC> & COL_ACTIONS_START__PROPS>[];
82
+ collectionActionsStartProps?: COL_ACTIONS_START__PROPS;
83
+ blockSearch?: (props: {
84
+ context: FireCMSContext;
85
+ path: string;
86
+ collection: EC;
87
+ parentCollectionIds?: string[];
88
+ }) => boolean;
81
89
  showTextSearchBar?: (props: {
82
90
  context: FireCMSContext;
83
91
  path: string;
@@ -101,6 +109,7 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
101
109
  parentCollectionIds: string[];
102
110
  onHover: boolean;
103
111
  collection: EC;
112
+ tableController: EntityTableController;
104
113
  }>;
105
114
  /**
106
115
  * If you add this callback to your plugin, an add button will be added to the collection table.
@@ -110,6 +119,7 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
110
119
  fullPath: string;
111
120
  parentCollectionIds: string[];
112
121
  collection: EC;
122
+ tableController: EntityTableController;
113
123
  }>;
114
124
  };
115
125
  form?: {
@@ -121,6 +131,18 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
121
131
  fieldBuilder?: <T extends CMSType = CMSType>(props: PluginFieldBuilderParams<T, any, EC>) => React.ComponentType<FieldProps<T>> | null;
122
132
  fieldBuilderEnabled?: <T extends CMSType = CMSType>(props: PluginFieldBuilderParams<T>) => boolean;
123
133
  };
134
+ collection?: {
135
+ /**
136
+ * Use this method to modify a single collection before it is rendered.
137
+ * @param collection
138
+ */
139
+ modifyCollection?: (collection: EntityCollection) => EntityCollection;
140
+ /**
141
+ * Use this method to modify, add or remove collections.
142
+ * @param collections
143
+ */
144
+ injectCollections?: (collections: EntityCollection[]) => EntityCollection[];
145
+ };
124
146
  };
125
147
  /**
126
148
  * Props passed to the {@link FireCMSPlugin.homePage.CollectionActions} method.
@@ -128,7 +150,7 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
128
150
  *
129
151
  * @group Models
130
152
  */
131
- export interface PluginHomePageActionsProps<EP extends object = object, M extends Record<string, any> = any, UserType extends User = User, EC extends EntityCollection<M> = EntityCollection<M>> {
153
+ export interface PluginHomePageActionsProps<EP extends object = object, M extends Record<string, any> = any, USER extends User = User, EC extends EntityCollection<M> = EntityCollection<M>> {
132
154
  /**
133
155
  * Collection path of this entity. This is the full path, like
134
156
  * `users/1234/addresses`
@@ -141,17 +163,19 @@ export interface PluginHomePageActionsProps<EP extends object = object, M extend
141
163
  /**
142
164
  * Context of the app status
143
165
  */
144
- context: FireCMSContext<UserType>;
166
+ context: FireCMSContext<USER>;
145
167
  extraProps?: EP;
146
168
  }
147
- export interface PluginFormActionProps<UserType extends User = User, EC extends EntityCollection = EntityCollection> {
169
+ export interface PluginFormActionProps<USER extends User = User, EC extends EntityCollection = EntityCollection> {
148
170
  entityId?: string;
149
171
  path: string;
150
172
  status: EntityStatus;
151
173
  collection: EC;
174
+ disabled: boolean;
152
175
  formContext?: FormContext<any>;
153
- context: FireCMSContext<UserType>;
176
+ context: FireCMSContext<USER>;
154
177
  currentEntityId?: string;
178
+ openEntityMode: "side_panel" | "full_screen";
155
179
  }
156
180
  export type PluginFieldBuilderParams<T extends CMSType = CMSType, M extends Record<string, any> = any, EC extends EntityCollection<M> = EntityCollection<M>> = {
157
181
  fieldConfigId: string;
@@ -159,13 +183,13 @@ export type PluginFieldBuilderParams<T extends CMSType = CMSType, M extends Reco
159
183
  property: Property<T> | ResolvedProperty<T>;
160
184
  Field: React.ComponentType<FieldProps<T, any, M>>;
161
185
  plugin: FireCMSPlugin;
162
- path: string;
163
- collection: EC;
186
+ path?: string;
187
+ collection?: EC;
164
188
  };
165
- export interface PluginGenericProps<UserType extends User = User> {
166
- context: FireCMSContext<UserType>;
189
+ export interface PluginGenericProps<USER extends User = User> {
190
+ context: FireCMSContext<USER>;
167
191
  }
168
- export interface PluginHomePageAdditionalCardsProps<UserType extends User = User> {
192
+ export interface PluginHomePageAdditionalCardsProps<USER extends User = User> {
169
193
  group?: string;
170
- context: FireCMSContext<UserType>;
194
+ context: FireCMSContext<USER>;
171
195
  }
@@ -1,14 +1,15 @@
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
  * @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 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
@@ -97,12 +98,17 @@ export interface BaseProperty<T extends CMSType, CustomProps = any> {
97
98
  /**
98
99
  * This value will be set by default for new entities.
99
100
  */
100
- defaultValue?: T;
101
+ defaultValue?: T | null;
101
102
  /**
102
103
  * Should this property be editable. If set to true, the user will be able to modify the property and
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, 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,7 +288,7 @@ 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;
284
294
  /**
@@ -306,7 +316,7 @@ export interface StringProperty extends BaseProperty<string> {
306
316
  /**
307
317
  * @group Entity properties
308
318
  */
309
- export interface ArrayProperty<T extends ArrayT[] = any[], ArrayT extends CMSType = CMSType> extends BaseProperty<T> {
319
+ export interface ArrayProperty<T extends ArrayT[] = any[], ArrayT extends CMSType = any> extends BaseProperty<T> {
310
320
  dataType: "array";
311
321
  /**
312
322
  * The property of this array.
@@ -361,6 +371,21 @@ export interface ArrayProperty<T extends ArrayT[] = any[], ArrayT extends CMSTyp
361
371
  * Should the field be initially expanded. Defaults to `true`
362
372
  */
363
373
  expanded?: boolean;
374
+ /**
375
+ * Display the child properties directly, without being wrapped in an
376
+ * extendable panel.
377
+ */
378
+ minimalistView?: boolean;
379
+ /**
380
+ * Can the elements in this array be reordered. Defaults to `true`.
381
+ * This prop has no effect if `disabled` is set to true.
382
+ */
383
+ sortable?: boolean;
384
+ /**
385
+ * Can the elements in this array be added. Defaults to `true`
386
+ * This prop has no effect if `disabled` is set to true.
387
+ */
388
+ canAddElements?: boolean;
364
389
  }
365
390
  /**
366
391
  * @group Entity properties
@@ -400,6 +425,11 @@ export interface MapProperty<T extends Record<string, CMSType> = Record<string,
400
425
  * view
401
426
  */
402
427
  spreadChildren?: boolean;
428
+ /**
429
+ * Display the child properties directly, without being wrapped in an
430
+ * extendable panel. Note that this will also hide the title of this property.
431
+ */
432
+ minimalistView?: boolean;
403
433
  /**
404
434
  * Should the field be initially expanded. Defaults to `true`
405
435
  */
@@ -474,6 +504,14 @@ export interface ReferenceProperty extends BaseProperty<EntityReference> {
474
504
  * specified values are considered.
475
505
  */
476
506
  previewProperties?: string[];
507
+ /**
508
+ * Should the reference include the ID of the entity. Defaults to `true`
509
+ */
510
+ includeId?: boolean;
511
+ /**
512
+ * Should the reference include a link to the entity (open the entity details). Defaults to `true`
513
+ */
514
+ includeEntityLink?: boolean;
477
515
  }
478
516
  /**
479
517
  * Rules to validate any property. Some properties have specific rules
@@ -575,13 +613,13 @@ export type StorageConfig = {
575
613
  * You can use this prop to customize the uploaded filename.
576
614
  * You can use a function as a callback or a string where you
577
615
  * specify some placeholders that get replaced with the corresponding values.
578
- * - {file} - Full file name
579
- * - {file.name} - Name of the file without extension
580
- * - {file.ext} - Extension of the file
581
- * - {rand} - Random value used to avoid name collisions
582
- * - {entityId} - ID of the entity
583
- * - {propertyKey} - ID of this property
584
- * - {path} - Path of this entity
616
+ * - `{file}` - Full file name
617
+ * - `{file.name}` - Name of the file without extension
618
+ * - `{file.ext}` - Extension of the file
619
+ * - `{rand}` - Random value used to avoid name collisions
620
+ * - `{entityId}` - ID of the entity
621
+ * - `{propertyKey}` - ID of this property
622
+ * - `{path}` - Path of this entity
585
623
  *
586
624
  * @param context
587
625
  */
@@ -591,13 +629,13 @@ export type StorageConfig = {
591
629
  *
592
630
  * You can use a function as a callback or a string where you
593
631
  * specify some placeholders that get replaced with the corresponding values.
594
- * - {file} - Full file name
595
- * - {file.name} - Name of the file without extension
596
- * - {file.ext} - Extension of the file
597
- * - {rand} - Random value used to avoid name collisions
598
- * - {entityId} - ID of the entity
599
- * - {propertyKey} - ID of this property
600
- * - {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
601
639
  */
602
640
  storagePath: string | ((context: UploadedFileContext) => string);
603
641
  /**
@@ -615,11 +653,22 @@ export type StorageConfig = {
615
653
  * Define maximal file size in bytes
616
654
  */
617
655
  maxSize?: number;
656
+ /**
657
+ * Use this callback to process the file before uploading it to the storage.
658
+ * If nothing is returned, the file is uploaded as it is.
659
+ * @param file
660
+ */
661
+ processFile?: (file: File) => Promise<File> | undefined;
618
662
  /**
619
663
  * Postprocess the saved value (storage path or URL)
620
664
  * after it has been resolved.
621
665
  */
622
666
  postProcess?: (pathOrUrl: string) => Promise<string>;
667
+ /**
668
+ * You can use this prop in order to provide a custom preview URL.
669
+ * Useful when the file's path is different from the original field value
670
+ */
671
+ previewUrl?: (fileName: string) => string;
623
672
  };
624
673
  /**
625
674
  * @group Entity properties
@@ -644,7 +693,7 @@ export interface UploadedFileContext {
644
693
  /**
645
694
  * Entity path. E.g. `products/PID/locales`
646
695
  */
647
- path: string;
696
+ path?: string;
648
697
  /**
649
698
  * Values of the current entity
650
699
  */
@@ -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
  /**
@@ -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
@@ -22,7 +23,7 @@ export interface EntitySidePanelProps<M extends Record<string, any> = any> {
22
23
  * Open the entity with a selected sub-collection view. If the panel for this
23
24
  * entity was already open, it is replaced.
24
25
  */
25
- selectedSubPath?: string;
26
+ selectedTab?: string;
26
27
  /**
27
28
  * Use this prop to override the width of the form view.
28
29
  * e.g. "600px"
@@ -55,6 +56,14 @@ export interface EntitySidePanelProps<M extends Record<string, any> = any> {
55
56
  * Should this panel close when saving
56
57
  */
57
58
  closeOnSave?: boolean;
59
+ /**
60
+ * Override some form properties
61
+ */
62
+ formProps?: Partial<EntityFormProps<M>>;
63
+ /**
64
+ * Allow the user to open the entity fullscreen
65
+ */
66
+ allowFullScreen?: boolean;
58
67
  }
59
68
  /**
60
69
  * Controller to open the side dialog displaying entity forms