@firecms/core 3.0.0-canary.29 → 3.0.0-canary.290

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 (433) hide show
  1. package/README.md +3 -3
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +16 -0
  4. package/dist/app/Scaffold.d.ts +34 -0
  5. package/dist/app/index.d.ts +4 -0
  6. package/dist/app/useApp.d.ts +16 -0
  7. package/dist/components/ArrayContainer.d.ts +31 -12
  8. package/dist/components/CircularProgressCenter.d.ts +1 -1
  9. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  10. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  11. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +14 -13
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +22 -6
  14. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
  15. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  16. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
  17. package/dist/components/EntityCollectionTable/index.d.ts +1 -1
  18. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  19. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  20. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +7 -4
  21. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +20 -2
  22. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  23. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  24. package/dist/components/EntityJsonPreview.d.ts +3 -0
  25. package/dist/components/EntityPreview.d.ts +10 -7
  26. package/dist/components/ErrorView.d.ts +1 -1
  27. package/dist/components/HomePage/DefaultHomePage.d.ts +2 -15
  28. package/dist/components/HomePage/HomePageDnD.d.ts +77 -0
  29. package/dist/components/HomePage/NavigationCard.d.ts +3 -1
  30. package/dist/components/HomePage/NavigationCardBinding.d.ts +4 -3
  31. package/dist/components/HomePage/NavigationGroup.d.ts +8 -1
  32. package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
  33. package/dist/components/PropertyCollectionView.d.ts +23 -0
  34. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  35. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  36. package/dist/components/ReferenceWidget.d.ts +3 -1
  37. package/dist/components/SelectableTable/SelectableTable.d.ts +14 -4
  38. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  39. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  40. package/dist/components/UserDisplay.d.ts +7 -0
  41. package/dist/components/VirtualTable/VirtualTableProps.d.ts +24 -12
  42. package/dist/components/VirtualTable/fields/VirtualTableUserSelect.d.ts +12 -0
  43. package/dist/components/VirtualTable/types.d.ts +3 -3
  44. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
  45. package/dist/components/common/index.d.ts +2 -1
  46. package/dist/components/common/table_height.d.ts +5 -0
  47. package/dist/components/common/types.d.ts +4 -6
  48. package/dist/components/common/useColumnsIds.d.ts +3 -1
  49. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
  50. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  51. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  52. package/dist/components/index.d.ts +5 -2
  53. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  54. package/dist/contexts/InternalUserManagementContext.d.ts +3 -0
  55. package/dist/core/DefaultAppBar.d.ts +29 -0
  56. package/dist/core/DefaultDrawer.d.ts +19 -0
  57. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  58. package/dist/core/EntityEditView.d.ts +49 -11
  59. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  60. package/dist/core/FireCMS.d.ts +2 -3
  61. package/dist/core/FireCMSRouter.d.ts +4 -0
  62. package/dist/core/NavigationRoutes.d.ts +2 -3
  63. package/dist/core/SideDialogs.d.ts +4 -2
  64. package/dist/core/field_configs.d.ts +1 -1
  65. package/dist/core/index.d.ts +4 -4
  66. package/dist/form/EntityForm.d.ts +40 -64
  67. package/dist/form/EntityFormActions.d.ts +21 -0
  68. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  69. package/dist/form/components/ErrorFocus.d.ts +1 -1
  70. package/dist/form/components/FieldHelperText.d.ts +3 -3
  71. package/dist/form/components/FormEntry.d.ts +6 -0
  72. package/dist/form/components/FormLayout.d.ts +5 -0
  73. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  74. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  75. package/dist/form/components/LocalChangesMenu.d.ts +11 -0
  76. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  77. package/dist/form/components/index.d.ts +3 -1
  78. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  79. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  80. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  81. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  82. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  83. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  84. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  85. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  86. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +9 -0
  87. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  88. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  89. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  90. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +5 -13
  91. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  92. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  93. package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +12 -0
  94. package/dist/form/index.d.ts +18 -18
  95. package/dist/form/useClearRestoreValue.d.ts +2 -2
  96. package/dist/hooks/data/delete.d.ts +4 -4
  97. package/dist/hooks/data/save.d.ts +4 -5
  98. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  99. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  100. package/dist/hooks/index.d.ts +3 -0
  101. package/dist/hooks/useAuthController.d.ts +1 -1
  102. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  103. package/dist/hooks/useBuildNavigationController.d.ts +57 -13
  104. package/dist/hooks/useCollapsedGroups.d.ts +9 -0
  105. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  106. package/dist/hooks/useInternalUserManagementController.d.ts +12 -0
  107. package/dist/hooks/useModeController.d.ts +1 -2
  108. package/dist/hooks/useProjectLog.d.ts +8 -2
  109. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  110. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  111. package/dist/index.d.ts +1 -0
  112. package/dist/index.es.js +24546 -13965
  113. package/dist/index.es.js.map +1 -1
  114. package/dist/index.umd.js +27256 -588
  115. package/dist/index.umd.js.map +1 -1
  116. package/dist/internal/useBuildDataSource.d.ts +3 -17
  117. package/dist/internal/useBuildSideEntityController.d.ts +3 -3
  118. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  119. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  120. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  121. package/dist/preview/components/ReferencePreview.d.ts +4 -3
  122. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  123. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  124. package/dist/preview/components/UserPreview.d.ts +8 -0
  125. package/dist/preview/index.d.ts +1 -0
  126. package/dist/preview/util.d.ts +3 -3
  127. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  128. package/dist/routes/FireCMSRoute.d.ts +1 -0
  129. package/dist/routes/HomePageRoute.d.ts +3 -0
  130. package/dist/types/analytics.d.ts +1 -1
  131. package/dist/types/auth.d.ts +8 -10
  132. package/dist/types/collections.d.ts +123 -25
  133. package/dist/types/customization_controller.d.ts +8 -0
  134. package/dist/types/datasource.d.ts +52 -36
  135. package/dist/types/dialogs_controller.d.ts +7 -3
  136. package/dist/types/entities.d.ts +12 -3
  137. package/dist/types/entity_actions.d.ts +72 -8
  138. package/dist/types/entity_callbacks.d.ts +16 -16
  139. package/dist/types/entity_overrides.d.ts +2 -2
  140. package/dist/types/export_import.d.ts +4 -4
  141. package/dist/types/fields.d.ts +79 -39
  142. package/dist/types/firecms.d.ts +31 -3
  143. package/dist/types/firecms_context.d.ts +17 -1
  144. package/dist/types/index.d.ts +1 -1
  145. package/dist/types/internal_user_management.d.ts +20 -0
  146. package/dist/types/navigation.d.ts +62 -19
  147. package/dist/types/permissions.d.ts +4 -4
  148. package/dist/types/plugins.d.ts +58 -13
  149. package/dist/types/properties.d.ts +122 -31
  150. package/dist/types/property_config.d.ts +1 -3
  151. package/dist/types/roles.d.ts +3 -0
  152. package/dist/types/side_dialogs_controller.d.ts +10 -0
  153. package/dist/types/side_entity_controller.d.ts +14 -1
  154. package/dist/types/storage.d.ts +75 -0
  155. package/dist/types/user.d.ts +2 -1
  156. package/dist/util/builders.d.ts +3 -3
  157. package/dist/util/callbacks.d.ts +2 -0
  158. package/dist/util/collections.d.ts +1 -0
  159. package/dist/util/createFormexStub.d.ts +2 -0
  160. package/dist/util/entities.d.ts +3 -3
  161. package/dist/util/entity_actions.d.ts +2 -0
  162. package/dist/util/entity_cache.d.ts +28 -0
  163. package/dist/util/icon_list.d.ts +5 -1
  164. package/dist/util/icon_synonyms.d.ts +1 -98
  165. package/dist/util/icons.d.ts +7 -4
  166. package/dist/util/index.d.ts +3 -0
  167. package/dist/util/make_properties_editable.d.ts +1 -2
  168. package/dist/util/navigation_from_path.d.ts +10 -1
  169. package/dist/util/navigation_utils.d.ts +15 -3
  170. package/dist/util/objects.d.ts +3 -1
  171. package/dist/util/permissions.d.ts +4 -4
  172. package/dist/util/plurals.d.ts +0 -2
  173. package/dist/util/property_utils.d.ts +4 -4
  174. package/dist/util/references.d.ts +2 -2
  175. package/dist/util/resolutions.d.ts +42 -17
  176. package/dist/util/storage.d.ts +23 -2
  177. package/dist/util/useStorageUploadController.d.ts +4 -3
  178. package/package.json +70 -53
  179. package/src/app/AppBar.tsx +18 -0
  180. package/src/app/Drawer.tsx +24 -0
  181. package/src/app/Scaffold.tsx +253 -0
  182. package/src/app/index.ts +4 -0
  183. package/src/app/useApp.tsx +32 -0
  184. package/src/components/ArrayContainer.tsx +447 -229
  185. package/src/components/CircularProgressCenter.tsx +2 -2
  186. package/src/components/ClearFilterSortButton.tsx +41 -0
  187. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +12 -11
  188. package/src/components/DeleteEntityDialog.tsx +13 -20
  189. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +87 -62
  190. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
  191. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
  192. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +84 -42
  193. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  194. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
  195. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
  196. package/src/components/EntityCollectionTable/index.tsx +1 -1
  197. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +34 -39
  198. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +49 -36
  199. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  200. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +135 -105
  201. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
  202. package/src/components/EntityCollectionView/EntityCollectionView.tsx +241 -119
  203. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +7 -4
  204. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  205. package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
  206. package/src/components/EntityCollectionView/utils.ts +19 -0
  207. package/src/components/EntityJsonPreview.tsx +66 -0
  208. package/src/components/EntityPreview.tsx +83 -62
  209. package/src/components/EntityView.tsx +34 -42
  210. package/src/components/ErrorView.tsx +4 -4
  211. package/src/components/FireCMSLogo.tsx +7 -51
  212. package/src/components/HomePage/DefaultHomePage.tsx +516 -158
  213. package/src/components/HomePage/FavouritesView.tsx +9 -14
  214. package/src/components/HomePage/HomePageDnD.tsx +702 -0
  215. package/src/components/HomePage/NavigationCard.tsx +48 -39
  216. package/src/components/HomePage/NavigationCardBinding.tsx +17 -16
  217. package/src/components/HomePage/NavigationGroup.tsx +144 -30
  218. package/src/components/HomePage/RenameGroupDialog.tsx +123 -0
  219. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  220. package/src/components/NotFoundPage.tsx +2 -2
  221. package/src/components/PropertyCollectionView.tsx +329 -0
  222. package/src/components/PropertyConfigBadge.tsx +10 -4
  223. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  224. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +23 -13
  225. package/src/components/ReferenceWidget.tsx +21 -11
  226. package/src/components/SearchIconsView.tsx +10 -7
  227. package/src/components/SelectableTable/SelectableTable.tsx +157 -157
  228. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  229. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +27 -9
  230. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
  231. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -24
  232. package/src/components/UnsavedChangesDialog.tsx +46 -0
  233. package/src/components/UserDisplay.tsx +55 -0
  234. package/src/components/VirtualTable/VirtualTable.tsx +105 -51
  235. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  236. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  237. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  238. package/src/components/VirtualTable/VirtualTableProps.tsx +28 -14
  239. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  240. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  241. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -2
  242. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  243. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  244. package/src/components/VirtualTable/fields/VirtualTableUserSelect.tsx +99 -0
  245. package/src/components/VirtualTable/types.tsx +2 -3
  246. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +64 -44
  247. package/src/components/common/index.ts +2 -1
  248. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  249. package/src/components/common/types.tsx +4 -6
  250. package/src/components/common/useColumnsIds.tsx +16 -2
  251. package/src/components/common/useDataSourceTableController.tsx +420 -0
  252. package/src/components/common/useDebouncedCallback.tsx +20 -0
  253. package/src/components/common/useScrollRestoration.tsx +68 -0
  254. package/src/components/common/useTableSearchHelper.ts +53 -12
  255. package/src/components/index.tsx +6 -2
  256. package/src/contexts/BreacrumbsContext.tsx +38 -0
  257. package/src/contexts/DialogsProvider.tsx +5 -4
  258. package/src/contexts/InternalUserManagementContext.tsx +4 -0
  259. package/src/contexts/ModeController.tsx +1 -3
  260. package/src/contexts/SnackbarProvider.tsx +2 -0
  261. package/src/core/DefaultAppBar.tsx +219 -0
  262. package/src/core/DefaultDrawer.tsx +185 -0
  263. package/src/core/DrawerNavigationItem.tsx +66 -0
  264. package/src/core/EntityEditView.tsx +447 -469
  265. package/src/core/EntityEditViewFormActions.tsx +344 -0
  266. package/src/core/EntitySidePanel.tsx +96 -23
  267. package/src/core/FireCMS.tsx +85 -60
  268. package/src/core/FireCMSRouter.tsx +17 -0
  269. package/src/core/NavigationRoutes.tsx +28 -38
  270. package/src/core/SideDialogs.tsx +22 -12
  271. package/src/core/field_configs.tsx +41 -14
  272. package/src/core/index.tsx +6 -5
  273. package/src/form/EntityForm.tsx +740 -523
  274. package/src/form/EntityFormActions.tsx +226 -0
  275. package/src/form/PropertyFieldBinding.tsx +88 -41
  276. package/src/form/components/CustomIdField.tsx +9 -3
  277. package/src/form/components/ErrorFocus.tsx +22 -29
  278. package/src/form/components/FieldHelperText.tsx +4 -4
  279. package/src/form/components/FormEntry.tsx +22 -0
  280. package/src/form/components/FormLayout.tsx +16 -0
  281. package/src/form/components/LabelWithIcon.tsx +30 -19
  282. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  283. package/src/form/components/LocalChangesMenu.tsx +144 -0
  284. package/src/form/components/StorageItemPreview.tsx +23 -13
  285. package/src/form/components/StorageUploadProgress.tsx +5 -6
  286. package/src/form/components/index.tsx +3 -1
  287. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +34 -19
  288. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +50 -36
  289. package/src/form/field_bindings/BlockFieldBinding.tsx +56 -33
  290. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  291. package/src/form/field_bindings/KeyValueFieldBinding.tsx +61 -52
  292. package/src/form/field_bindings/MapFieldBinding.tsx +73 -55
  293. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +159 -0
  294. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
  295. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  296. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
  297. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  298. package/src/form/field_bindings/RepeatFieldBinding.tsx +62 -35
  299. package/src/form/field_bindings/SelectFieldBinding.tsx +24 -15
  300. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +257 -199
  301. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  302. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  303. package/src/form/field_bindings/UserSelectFieldBinding.tsx +94 -0
  304. package/src/form/index.tsx +21 -37
  305. package/src/form/useClearRestoreValue.tsx +2 -2
  306. package/src/form/validation.ts +13 -23
  307. package/src/hooks/data/delete.ts +6 -5
  308. package/src/hooks/data/save.ts +26 -33
  309. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  310. package/src/hooks/data/useDataSource.tsx +11 -3
  311. package/src/hooks/data/useEntityFetch.tsx +10 -6
  312. package/src/hooks/index.tsx +4 -0
  313. package/src/hooks/useAuthController.tsx +1 -1
  314. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  315. package/src/hooks/useBrowserTitleAndIcon.tsx +1 -1
  316. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  317. package/src/hooks/useBuildModeController.tsx +22 -29
  318. package/src/hooks/useBuildNavigationController.tsx +515 -121
  319. package/src/hooks/useCollapsedGroups.ts +64 -0
  320. package/src/hooks/useFireCMSContext.tsx +9 -35
  321. package/src/hooks/useInternalUserManagementController.tsx +16 -0
  322. package/src/hooks/useLargeLayout.tsx +0 -35
  323. package/src/hooks/useModeController.tsx +1 -2
  324. package/src/hooks/useProjectLog.tsx +32 -10
  325. package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
  326. package/src/hooks/useValidateAuthenticator.tsx +17 -37
  327. package/src/index.ts +1 -0
  328. package/src/internal/useBuildDataSource.ts +79 -85
  329. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  330. package/src/internal/useBuildSideEntityController.tsx +204 -77
  331. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  332. package/src/preview/PropertyPreview.tsx +42 -25
  333. package/src/preview/PropertyPreviewProps.tsx +7 -1
  334. package/src/preview/components/BooleanPreview.tsx +2 -2
  335. package/src/preview/components/EmptyValue.tsx +1 -1
  336. package/src/preview/components/EnumValuesChip.tsx +2 -2
  337. package/src/preview/components/ImagePreview.tsx +26 -37
  338. package/src/preview/components/ReferencePreview.tsx +30 -38
  339. package/src/preview/components/StorageThumbnail.tsx +5 -1
  340. package/src/preview/components/UrlComponentPreview.tsx +60 -28
  341. package/src/preview/components/UserPreview.tsx +27 -0
  342. package/src/preview/index.ts +1 -0
  343. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -6
  344. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +7 -5
  345. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -4
  346. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -4
  347. package/src/preview/property_previews/ArrayOneOfPreview.tsx +7 -6
  348. package/src/preview/property_previews/ArrayPropertyPreview.tsx +8 -7
  349. package/src/preview/property_previews/MapPropertyPreview.tsx +14 -13
  350. package/src/preview/property_previews/NumberPropertyPreview.tsx +2 -2
  351. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
  352. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  353. package/src/preview/util.ts +10 -10
  354. package/src/routes/CustomCMSRoute.tsx +21 -0
  355. package/src/routes/FireCMSRoute.tsx +246 -0
  356. package/src/routes/HomePageRoute.tsx +17 -0
  357. package/src/types/analytics.ts +3 -0
  358. package/src/types/auth.tsx +9 -13
  359. package/src/types/collections.ts +146 -30
  360. package/src/types/customization_controller.tsx +9 -1
  361. package/src/types/datasource.ts +61 -43
  362. package/src/types/dialogs_controller.tsx +7 -3
  363. package/src/types/entities.ts +19 -3
  364. package/src/types/entity_actions.tsx +86 -10
  365. package/src/types/entity_callbacks.ts +18 -18
  366. package/src/types/entity_overrides.tsx +2 -2
  367. package/src/types/export_import.ts +4 -4
  368. package/src/types/fields.tsx +91 -42
  369. package/src/types/firecms.tsx +34 -4
  370. package/src/types/firecms_context.tsx +18 -1
  371. package/src/types/index.ts +1 -1
  372. package/src/types/internal_user_management.ts +24 -0
  373. package/src/types/navigation.ts +77 -24
  374. package/src/types/permissions.ts +5 -5
  375. package/src/types/plugins.tsx +69 -15
  376. package/src/types/properties.ts +141 -33
  377. package/src/types/property_config.tsx +2 -2
  378. package/src/types/roles.ts +3 -0
  379. package/src/types/side_dialogs_controller.tsx +15 -0
  380. package/src/types/side_entity_controller.tsx +16 -1
  381. package/src/types/storage.ts +83 -1
  382. package/src/types/user.ts +3 -1
  383. package/src/util/builders.ts +10 -8
  384. package/src/util/callbacks.ts +119 -0
  385. package/src/util/collections.ts +8 -0
  386. package/src/util/createFormexStub.tsx +66 -0
  387. package/src/util/entities.ts +11 -8
  388. package/src/util/entity_actions.ts +28 -0
  389. package/src/util/entity_cache.ts +223 -0
  390. package/src/util/enums.ts +1 -1
  391. package/src/util/icon_list.ts +16 -10
  392. package/src/util/icon_synonyms.ts +3 -100
  393. package/src/util/icons.tsx +36 -11
  394. package/src/util/index.ts +3 -0
  395. package/src/util/join_collections.ts +11 -4
  396. package/src/util/make_properties_editable.ts +5 -19
  397. package/src/util/navigation_from_path.ts +33 -12
  398. package/src/util/navigation_utils.ts +141 -25
  399. package/src/util/objects.ts +128 -33
  400. package/src/util/parent_references_from_path.ts +3 -3
  401. package/src/util/permissions.ts +9 -8
  402. package/src/util/plurals.ts +0 -2
  403. package/src/util/property_utils.tsx +17 -6
  404. package/src/util/references.ts +19 -8
  405. package/src/util/resolutions.ts +122 -48
  406. package/src/util/storage.ts +79 -21
  407. package/src/util/strings.ts +2 -2
  408. package/src/util/useStorageUploadController.tsx +162 -62
  409. package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
  410. package/dist/components/FireCMSAppBar.d.ts +0 -26
  411. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  412. package/dist/components/VirtualTable/common.d.ts +0 -2
  413. package/dist/core/Drawer.d.ts +0 -23
  414. package/dist/core/Scaffold.d.ts +0 -55
  415. package/dist/core/SideEntityView.d.ts +0 -7
  416. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  417. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  418. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  419. package/dist/internal/useLocaleConfig.d.ts +0 -1
  420. package/dist/types/appcheck.d.ts +0 -26
  421. package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
  422. package/src/components/FireCMSAppBar.tsx +0 -165
  423. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  424. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
  425. package/src/core/Drawer.tsx +0 -191
  426. package/src/core/Scaffold.tsx +0 -281
  427. package/src/core/SideEntityView.tsx +0 -38
  428. package/src/form/components/FormikArrayContainer.tsx +0 -44
  429. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  430. package/src/internal/useBuildCustomizationController.tsx +0 -5
  431. package/src/internal/useLocaleConfig.tsx +0 -18
  432. package/src/types/appcheck.ts +0 -29
  433. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -0,0 +1,344 @@
1
+ import React, { useMemo } from "react";
2
+ import {
3
+ Entity,
4
+ EntityAction,
5
+ EntityActionClickProps,
6
+ FireCMSContext,
7
+ FormContext,
8
+ ResolvedEntityCollection,
9
+ SideEntityController
10
+ } from "../types";
11
+
12
+ import { copyEntityAction, deleteEntityAction } from "../components";
13
+ import { canCreateEntity, canDeleteEntity, mergeEntityActions, resolveEntityAction } from "../util";
14
+ import {
15
+ Button,
16
+ CircularProgress,
17
+ cls,
18
+ defaultBorderMixin,
19
+ DialogActions,
20
+ ErrorIcon,
21
+ IconButton,
22
+ LoadingButton,
23
+ Tooltip,
24
+ Typography
25
+ } from "@firecms/ui";
26
+ import {
27
+ useAuthController,
28
+ useCustomizationController,
29
+ useFireCMSContext,
30
+ useSideEntityController,
31
+ useSnackbarController
32
+ } from "../hooks";
33
+ import { EntityFormActionsProps } from "../form/EntityFormActions";
34
+ import { SideDialogController, useSideDialogContext } from "./SideDialogs";
35
+ import { FormexController } from "@firecms/formex";
36
+ import { ErrorTooltip } from "../components/ErrorTooltip";
37
+
38
+ export function EntityEditViewFormActions({
39
+ collection,
40
+ path,
41
+ entity,
42
+ layout,
43
+ savingError,
44
+ formex,
45
+ disabled,
46
+ status,
47
+ pluginActions,
48
+ openEntityMode,
49
+ showDefaultActions = true,
50
+ navigateBack,
51
+ formContext
52
+ }: EntityFormActionsProps) {
53
+
54
+ const authController = useAuthController();
55
+ const context = useFireCMSContext();
56
+ const sideEntityController = useSideEntityController();
57
+ const sideDialogContext = useSideDialogContext();
58
+ const customizationController = useCustomizationController();
59
+
60
+ const entityActions = useMemo((): EntityAction[] => {
61
+ const customEntityActions = (collection.entityActions ?? [])
62
+ .map(action => resolveEntityAction(action, customizationController.entityActions))
63
+ .filter(Boolean) as EntityAction[];
64
+ const createEnabled = canCreateEntity(collection, authController, path, null);
65
+ const deleteEnabled = entity ? canDeleteEntity(collection, authController, path, entity) : false;
66
+ const actions: EntityAction[] = [];
67
+ if (createEnabled)
68
+ actions.push(copyEntityAction);
69
+ if (deleteEnabled)
70
+ actions.push(deleteEntityAction);
71
+ if (customEntityActions)
72
+ return mergeEntityActions(actions, customEntityActions);
73
+ return actions;
74
+ }, [authController, collection, path, customizationController.entityActions?.length]);
75
+
76
+ const formActions = showDefaultActions ? entityActions.filter(a => a.includeInForm === undefined || a.includeInForm) : [];
77
+
78
+ return layout === "bottom"
79
+ ? buildBottomActions({
80
+ savingError,
81
+ entity,
82
+ formActions,
83
+ collection,
84
+ context,
85
+ sideEntityController,
86
+ disabled,
87
+ status,
88
+ sideDialogContext,
89
+ pluginActions,
90
+ openEntityMode,
91
+ navigateBack,
92
+ formContext,
93
+ formex
94
+ })
95
+ : buildSideActions({
96
+ savingError,
97
+ entity,
98
+ formActions,
99
+ collection,
100
+ context,
101
+ sideEntityController,
102
+ sideDialogContext,
103
+ disabled,
104
+ status,
105
+ pluginActions,
106
+ openEntityMode,
107
+ navigateBack,
108
+ formContext,
109
+ formex
110
+ });
111
+ }
112
+
113
+ type ActionsViewProps<M extends object> = {
114
+ savingError: Error | undefined,
115
+ entity: Entity<M> | undefined,
116
+ formActions: EntityAction[],
117
+ collection: ResolvedEntityCollection,
118
+ context: FireCMSContext,
119
+ sideEntityController: SideEntityController,
120
+ disabled: boolean,
121
+ status: "new" | "existing" | "copy",
122
+ sideDialogContext: SideDialogController,
123
+ pluginActions?: React.ReactNode[],
124
+ openEntityMode: "side_panel" | "full_screen";
125
+ navigateBack: () => void;
126
+ formContext: FormContext,
127
+ formex: FormexController<any>;
128
+ };
129
+
130
+ function buildBottomActions<M extends object>({
131
+ savingError,
132
+ entity,
133
+ formActions,
134
+ collection,
135
+ context,
136
+ sideEntityController,
137
+ disabled,
138
+ status,
139
+ sideDialogContext,
140
+ pluginActions,
141
+ openEntityMode,
142
+ navigateBack,
143
+ formContext,
144
+ formex
145
+ }: ActionsViewProps<M>) {
146
+
147
+ const hasErrors = Object.keys(formex.errors).length > 0 && formex.submitCount > 0;
148
+ const canClose = openEntityMode === "side_panel";
149
+ return <DialogActions
150
+ position={"absolute"}>
151
+ {savingError &&
152
+ <div className="text-right">
153
+ <Typography color={"error"}>{savingError.message}</Typography>
154
+ </div>
155
+ }
156
+
157
+ {formActions.length > 0 && <div className="flex-grow flex overflow-auto no-scrollbar">
158
+ {formActions.map(action => {
159
+
160
+ const props = {
161
+ view: "form",
162
+ entity,
163
+ fullPath: collection.path,
164
+ collection: collection,
165
+ context,
166
+ sideEntityController,
167
+ openEntityMode,
168
+ navigateBack,
169
+ formContext
170
+ } satisfies EntityActionClickProps<any>;
171
+
172
+ const isEnabled = !action.isEnabled || action.isEnabled(props);
173
+ return (
174
+ <EntityActionButton
175
+ key={action.key}
176
+ action={action}
177
+ enabled={isEnabled}
178
+ props={props}
179
+ />
180
+ );
181
+ })}
182
+ </div>}
183
+
184
+ {pluginActions}
185
+
186
+ {hasErrors ?
187
+ <ErrorTooltip title={"This form has errors"}>
188
+ <ErrorIcon className="ml-4" color="error" size={"smallest"}/>
189
+ </ErrorTooltip> : null}
190
+ <Button variant="text"
191
+ color="primary"
192
+ disabled={disabled || formex.isSubmitting}
193
+ type="reset">
194
+ {status === "existing" ? "Discard" : "Clear"}
195
+ </Button>
196
+ <Button variant={canClose ? "text" : "filled"}
197
+ color="primary"
198
+ type="submit"
199
+ disabled={disabled || formex.isSubmitting}
200
+ onClick={() => {
201
+ sideDialogContext.setPendingClose(false);
202
+ }}>
203
+ {status === "existing" && "Save"}
204
+ {status === "copy" && "Create copy"}
205
+ {status === "new" && "Create"}
206
+ </Button>
207
+ {canClose && <LoadingButton variant="filled"
208
+ color="primary"
209
+ type="submit"
210
+ loading={formex.isSubmitting}
211
+ disabled={disabled}
212
+ onClick={() => {
213
+ sideDialogContext.setPendingClose?.(true);
214
+ }}>
215
+ {status === "existing" && "Save and close"}
216
+ {status === "copy" && "Create copy and close"}
217
+ {status === "new" && "Create and close"}
218
+ </LoadingButton>}
219
+ </DialogActions>;
220
+ }
221
+
222
+ function buildSideActions<M extends object>({
223
+ savingError,
224
+ entity,
225
+ formActions,
226
+ collection,
227
+ context,
228
+ sideEntityController,
229
+ disabled,
230
+ status,
231
+ sideDialogContext,
232
+ pluginActions,
233
+ openEntityMode,
234
+ navigateBack,
235
+ formContext,
236
+ formex
237
+ }: ActionsViewProps<M>) {
238
+
239
+ const hasErrors = Object.keys(formex.errors).length > 0 && formex.submitCount > 0;
240
+ return <div
241
+ className={cls("overflow-auto h-full flex flex-col gap-2 w-80 2xl:w-96 px-4 py-16 sticky top-0 border-l", defaultBorderMixin)}>
242
+ <LoadingButton fullWidth={true}
243
+ variant="filled"
244
+ color="primary"
245
+ type="submit"
246
+ size={"large"}
247
+ startIcon={hasErrors ? <ErrorIcon/> : undefined}
248
+ disabled={disabled || formex.isSubmitting}
249
+ onClick={() => {
250
+ sideDialogContext.setPendingClose?.(false);
251
+ }}>
252
+ {status === "existing" && "Save"}
253
+ {status === "copy" && "Create copy"}
254
+ {status === "new" && "Create"}
255
+ </LoadingButton>
256
+
257
+ <Button fullWidth={true} variant="text" disabled={disabled || formex.isSubmitting} type="reset">
258
+ {status === "existing" ? "Discard" : "Clear"}
259
+ </Button>
260
+
261
+ {pluginActions}
262
+
263
+ {formActions.length > 0 && <div className="flex flex-row flex-wrap mt-2">
264
+ {formActions.map(action => {
265
+ const props = {
266
+ view: "form",
267
+ entity,
268
+ fullPath: collection.path,
269
+ collection: collection,
270
+ context,
271
+ sideEntityController,
272
+ openEntityMode,
273
+ navigateBack,
274
+ formContext
275
+ } satisfies EntityActionClickProps<any>;
276
+ const isEnabled = !action.isEnabled || action.isEnabled(props);
277
+ return (
278
+ <EntityActionButton key={action.key} action={action} enabled={isEnabled} props={props}/>
279
+ );
280
+ })}
281
+ </div>}
282
+
283
+ {savingError &&
284
+ <div className="text-right">
285
+ <Typography color={"error"}>{savingError.message}</Typography>
286
+ </div>
287
+ }
288
+ </div>;
289
+ }
290
+
291
+ function EntityActionButton({
292
+ action,
293
+ enabled,
294
+ props
295
+ }: {
296
+ action: EntityAction,
297
+ enabled: boolean,
298
+ props: EntityActionClickProps<any, any>
299
+ }) {
300
+ const snackbarController = useSnackbarController();
301
+ const [loading, setLoading] = React.useState(false);
302
+ return <Tooltip
303
+ title={action.name}>
304
+ <IconButton
305
+ color="primary"
306
+ disabled={!enabled}
307
+ onClick={(event) => {
308
+ console.debug("Executing action", action.key, props);
309
+ try {
310
+ event.stopPropagation();
311
+ if (props.entity) {
312
+ const onClick = action.onClick(props);
313
+ // If the action returns a promise, we can handle it
314
+ if (onClick instanceof Promise) {
315
+ setLoading(true);
316
+ onClick
317
+ .catch((error) => {
318
+ console.error("Error executing action", action.key, error);
319
+ snackbarController.open({
320
+ message: `Error executing action: ${error.message}`,
321
+ type: "error"
322
+ })
323
+ })
324
+ .finally(() => setLoading(false));
325
+ } else {
326
+ snackbarController.open({
327
+ message: `Action ${action.name} executed successfully`,
328
+ type: "success"
329
+ });
330
+ }
331
+
332
+ }
333
+ } catch (e: any) {
334
+ console.error("Error executing action", action.key, e);
335
+ snackbarController.open({
336
+ message: `Error executing action: ${e.message}`,
337
+ type: "error"
338
+ });
339
+ }
340
+ }}>
341
+ {loading ? <CircularProgress size={"smallest"}/> : action.icon}
342
+ </IconButton>
343
+ </Tooltip>;
344
+ }
@@ -1,11 +1,14 @@
1
1
  import React, { useCallback, useEffect, useMemo } from "react";
2
2
 
3
- import { EntitySidePanelProps } from "../types";
4
- import { useNavigationController } from "../hooks";
3
+ import { EntityCollection, EntitySidePanelProps } from "../types";
4
+ import { useNavigationController, useSideEntityController } from "../hooks";
5
5
 
6
6
  import { ErrorBoundary } from "../components";
7
- import { EntityEditView } from "./EntityEditView";
7
+ import { EntityEditView, OnUpdateParams } from "./EntityEditView";
8
8
  import { useSideDialogContext } from "./SideDialogs";
9
+ import { CloseIcon, IconButton, OpenInFullIcon } from "@firecms/ui";
10
+ import { useLocation, useNavigate } from "react-router-dom";
11
+ import { saveEntityToMemoryCache } from "../util/entity_cache";
9
12
 
10
13
  /**
11
14
  * This is the component in charge of rendering the side dialog used
@@ -17,33 +20,64 @@ import { useSideDialogContext } from "./SideDialogs";
17
20
  */
18
21
  export function EntitySidePanel(props: EntitySidePanelProps) {
19
22
 
23
+ const {
24
+ allowFullScreen = true,
25
+ path,
26
+ entityId,
27
+ fullIdPath,
28
+ formProps,
29
+ } = props;
30
+
20
31
  const {
21
32
  blocked,
22
33
  setBlocked,
23
- setBlockedNavigationMessage
34
+ setBlockedNavigationMessage,
35
+ close,
24
36
  } = useSideDialogContext();
25
37
 
38
+ const navigate = useNavigate();
39
+ const location = useLocation();
40
+
41
+ const sideEntityController = useSideEntityController();
26
42
  const navigationController = useNavigationController();
43
+ const sideDialogsController = useSideDialogContext();
27
44
 
28
- const parentCollectionIds = useMemo(() => {
29
- return navigationController.getParentCollectionIds(props.path);
30
- }, [navigationController, props.path]);
45
+ const onClose = () => {
46
+ if (props.onClose) {
47
+ props.onClose();
48
+ }
31
49
 
32
- const collection = useMemo(() => {
33
- if (!props) return undefined;
34
- let usedCollection = props.collection;
50
+ setBlocked(false);
51
+ close(true);
52
+ }
35
53
 
36
- const registryCollection = navigationController.getCollection(props.path, props.entityId);
37
- if (registryCollection) {
38
- usedCollection = registryCollection;
54
+ const onUpdate = (params: OnUpdateParams) => {
55
+ if (props.onUpdate) {
56
+ props.onUpdate(params);
57
+ }
58
+ if (params.status !== "existing") {
59
+ sideEntityController.replace({
60
+ path: params.path,
61
+ entityId: params.entityId,
62
+ fullIdPath: props.fullIdPath,
63
+ selectedTab: params.selectedTab,
64
+ updateUrl: true,
65
+ collection: params.collection,
66
+ });
39
67
  }
40
- if (!usedCollection) {
41
- console.error("ERROR: No collection found in path `", props.path, "`. Entity id: ", props.entityId);
42
- throw Error("ERROR: No collection found in path `" + props.path + "`. Make sure you have defined a collection for this path in the root navigation.");
68
+
69
+ if (sideDialogsController.pendingClose) {
70
+ sideDialogsController.setPendingClose(false);
71
+ onClose();
43
72
  }
44
73
 
45
- return usedCollection;
46
- }, [navigationController, props]);
74
+ }
75
+
76
+ const parentCollectionIds = useMemo(() => {
77
+ return navigationController.getParentCollectionIds(path);
78
+ }, [navigationController, path]);
79
+
80
+ const collection = navigationController.getCollection(fullIdPath ?? path) ?? props.collection;
47
81
 
48
82
  useEffect(() => {
49
83
  function beforeunload(e: any) {
@@ -63,11 +97,11 @@ export function EntitySidePanel(props: EntitySidePanelProps) {
63
97
 
64
98
  }, [blocked, collection]);
65
99
 
66
- const onValuesAreModified = useCallback((modified: boolean) => {
67
- setBlocked(modified);
100
+ const onValuesModified = useCallback((modified: boolean) => {
68
101
  setBlockedNavigationMessage(modified
69
102
  ? <> You have unsaved changes in this <b>{collection?.singularName ?? collection?.name}</b>.</>
70
103
  : undefined)
104
+ setBlocked(modified);
71
105
  }, [collection?.name, setBlocked, setBlockedNavigationMessage]);
72
106
 
73
107
  if (!props || !collection) {
@@ -79,10 +113,49 @@ export function EntitySidePanel(props: EntitySidePanelProps) {
79
113
  <ErrorBoundary>
80
114
  <EntityEditView
81
115
  {...props}
82
- formWidth={props.width}
83
- collection={collection}
116
+ fullIdPath={fullIdPath}
117
+ layout={"side_panel"}
118
+ collection={collection as EntityCollection}
84
119
  parentCollectionIds={parentCollectionIds}
85
- onValuesAreModified={onValuesAreModified}
120
+ onValuesModified={onValuesModified}
121
+ onSaved={onUpdate}
122
+ barActions={({
123
+ status,
124
+ values
125
+ }) => <>
126
+ <IconButton
127
+ className="self-center"
128
+ onClick={onClose}>
129
+ <CloseIcon size={"small"}/>
130
+ </IconButton>
131
+ {allowFullScreen && <IconButton
132
+ className="self-center"
133
+ onClick={() => {
134
+ const key = (status === "new" || status === "copy") ? path + "#new" : path + "/" + entityId;
135
+ saveEntityToMemoryCache(key, values);
136
+ if (entityId)
137
+ navigate(location.pathname);
138
+ else
139
+ navigate(location.pathname + "#new");
140
+ }}>
141
+ <OpenInFullIcon size={"small"}/>
142
+ </IconButton>}
143
+ </>}
144
+ onTabChange={({
145
+ entityId,
146
+ selectedTab,
147
+ collection,
148
+ }) => {
149
+ sideEntityController.replace({
150
+ path,
151
+ entityId,
152
+ fullIdPath: props.fullIdPath,
153
+ selectedTab,
154
+ updateUrl: true,
155
+ collection,
156
+ });
157
+ }}
158
+ formProps={formProps}
86
159
  />
87
160
  </ErrorBoundary>
88
161