@firecms/core 3.0.0-canary.19 → 3.0.0-canary.190

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 (375) 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 +30 -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 +23 -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 +16 -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/EntityPreview.d.ts +5 -4
  25. package/dist/components/ErrorView.d.ts +1 -1
  26. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  27. package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
  28. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  29. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  30. package/dist/components/ReferenceWidget.d.ts +3 -1
  31. package/dist/components/SelectableTable/SelectableTable.d.ts +13 -3
  32. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  33. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  34. package/dist/components/VirtualTable/VirtualTableProps.d.ts +28 -12
  35. package/dist/components/VirtualTable/types.d.ts +3 -3
  36. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
  37. package/dist/components/common/index.d.ts +2 -1
  38. package/dist/components/common/table_height.d.ts +5 -0
  39. package/dist/components/common/types.d.ts +4 -6
  40. package/dist/components/common/useColumnsIds.d.ts +3 -1
  41. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
  42. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  43. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  44. package/dist/components/index.d.ts +4 -2
  45. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  46. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
  47. package/dist/core/DefaultDrawer.d.ts +19 -0
  48. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  49. package/dist/core/EntityEditView.d.ts +31 -10
  50. package/dist/core/EntityForm.d.ts +43 -0
  51. package/dist/core/FireCMS.d.ts +2 -2
  52. package/dist/core/FireCMSRouter.d.ts +4 -0
  53. package/dist/core/NavigationRoutes.d.ts +2 -3
  54. package/dist/core/index.d.ts +4 -4
  55. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  56. package/dist/form/components/ErrorFocus.d.ts +1 -1
  57. package/dist/form/components/FieldHelperText.d.ts +3 -3
  58. package/dist/form/components/FormEntry.d.ts +6 -0
  59. package/dist/form/components/FormLayout.d.ts +5 -0
  60. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  61. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  62. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  63. package/dist/form/components/index.d.ts +3 -1
  64. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  65. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  66. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  67. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  68. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  69. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  70. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  71. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  72. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  73. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  74. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  75. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
  76. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  77. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  78. package/dist/form/index.d.ts +3 -5
  79. package/dist/form/useClearRestoreValue.d.ts +2 -2
  80. package/dist/hooks/data/delete.d.ts +4 -4
  81. package/dist/hooks/data/save.d.ts +4 -5
  82. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  83. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  84. package/dist/hooks/index.d.ts +1 -0
  85. package/dist/hooks/useAuthController.d.ts +1 -1
  86. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  87. package/dist/hooks/useBuildNavigationController.d.ts +7 -5
  88. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  89. package/dist/hooks/useModeController.d.ts +1 -2
  90. package/dist/hooks/useProjectLog.d.ts +8 -2
  91. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  92. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  93. package/dist/index.d.ts +1 -0
  94. package/dist/index.es.js +21912 -14304
  95. package/dist/index.es.js.map +1 -1
  96. package/dist/index.umd.js +24287 -588
  97. package/dist/index.umd.js.map +1 -1
  98. package/dist/internal/useBuildDataSource.d.ts +1 -16
  99. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  100. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  101. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  102. package/dist/preview/components/ReferencePreview.d.ts +3 -2
  103. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  104. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  105. package/dist/preview/util.d.ts +3 -3
  106. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  107. package/dist/routes/FireCMSRoute.d.ts +1 -0
  108. package/dist/routes/HomePageRoute.d.ts +3 -0
  109. package/dist/types/auth.d.ts +8 -10
  110. package/dist/types/collections.d.ts +71 -22
  111. package/dist/types/datasource.d.ts +52 -36
  112. package/dist/types/dialogs_controller.d.ts +7 -3
  113. package/dist/types/entities.d.ts +7 -2
  114. package/dist/types/entity_actions.d.ts +28 -4
  115. package/dist/types/entity_callbacks.d.ts +16 -16
  116. package/dist/types/entity_overrides.d.ts +2 -2
  117. package/dist/types/export_import.d.ts +4 -4
  118. package/dist/types/fields.d.ts +75 -40
  119. package/dist/types/firecms.d.ts +6 -2
  120. package/dist/types/firecms_context.d.ts +1 -1
  121. package/dist/types/index.d.ts +0 -1
  122. package/dist/types/navigation.d.ts +32 -14
  123. package/dist/types/permissions.d.ts +4 -4
  124. package/dist/types/plugins.d.ts +23 -12
  125. package/dist/types/properties.d.ts +52 -24
  126. package/dist/types/property_config.d.ts +0 -2
  127. package/dist/types/side_dialogs_controller.d.ts +10 -0
  128. package/dist/types/side_entity_controller.d.ts +1 -1
  129. package/dist/types/storage.d.ts +86 -3
  130. package/dist/types/user.d.ts +1 -0
  131. package/dist/util/builders.d.ts +3 -3
  132. package/dist/util/entities.d.ts +3 -3
  133. package/dist/util/entity_actions.d.ts +2 -0
  134. package/dist/util/entity_cache.d.ts +23 -0
  135. package/dist/util/icon_list.d.ts +5 -1
  136. package/dist/util/icon_synonyms.d.ts +1 -98
  137. package/dist/util/icons.d.ts +6 -3
  138. package/dist/util/index.d.ts +2 -0
  139. package/dist/util/navigation_from_path.d.ts +5 -1
  140. package/dist/util/navigation_utils.d.ts +14 -3
  141. package/dist/util/objects.d.ts +2 -1
  142. package/dist/util/permissions.d.ts +4 -4
  143. package/dist/util/plurals.d.ts +0 -2
  144. package/dist/util/property_utils.d.ts +3 -3
  145. package/dist/util/resolutions.d.ts +30 -16
  146. package/dist/util/storage.d.ts +23 -2
  147. package/dist/util/useStorageUploadController.d.ts +3 -3
  148. package/package.json +61 -48
  149. package/src/app/AppBar.tsx +18 -0
  150. package/src/app/Drawer.tsx +24 -0
  151. package/src/app/Scaffold.tsx +243 -0
  152. package/src/app/index.ts +4 -0
  153. package/src/app/useApp.tsx +32 -0
  154. package/src/components/ArrayContainer.tsx +126 -40
  155. package/src/components/CircularProgressCenter.tsx +2 -2
  156. package/src/components/ClearFilterSortButton.tsx +41 -0
  157. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +3 -3
  158. package/src/components/DeleteEntityDialog.tsx +10 -19
  159. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +54 -37
  160. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
  161. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
  162. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -39
  163. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  164. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
  165. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
  166. package/src/components/EntityCollectionTable/index.tsx +1 -1
  167. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +31 -36
  168. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
  169. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  170. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +86 -77
  171. package/src/components/EntityCollectionView/EntityCollectionView.tsx +206 -112
  172. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +4 -2
  173. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  174. package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
  175. package/src/components/EntityCollectionView/utils.ts +19 -0
  176. package/src/components/EntityPreview.tsx +62 -52
  177. package/src/components/EntityView.tsx +10 -10
  178. package/src/components/ErrorView.tsx +4 -4
  179. package/src/components/HomePage/DefaultHomePage.tsx +26 -19
  180. package/src/components/HomePage/FavouritesView.tsx +6 -11
  181. package/src/components/HomePage/NavigationCard.tsx +3 -3
  182. package/src/components/HomePage/NavigationCardBinding.tsx +5 -10
  183. package/src/components/HomePage/NavigationGroup.tsx +2 -2
  184. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  185. package/src/components/NotFoundPage.tsx +2 -2
  186. package/src/components/PropertyConfigBadge.tsx +9 -3
  187. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  188. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +19 -13
  189. package/src/components/ReferenceWidget.tsx +21 -11
  190. package/src/components/SearchIconsView.tsx +10 -7
  191. package/src/components/SelectableTable/SelectableTable.tsx +27 -12
  192. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  193. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
  194. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
  195. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -23
  196. package/src/components/UnsavedChangesDialog.tsx +42 -0
  197. package/src/components/VirtualTable/VirtualTable.tsx +96 -48
  198. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  199. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  200. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  201. package/src/components/VirtualTable/VirtualTableProps.tsx +33 -14
  202. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  203. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  204. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +3 -2
  205. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  206. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  207. package/src/components/VirtualTable/types.tsx +2 -3
  208. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +33 -40
  209. package/src/components/common/index.ts +2 -1
  210. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  211. package/src/components/common/types.tsx +4 -6
  212. package/src/components/common/useColumnsIds.tsx +24 -3
  213. package/src/components/common/useDataSourceTableController.tsx +420 -0
  214. package/src/components/common/useDebouncedCallback.tsx +20 -0
  215. package/src/components/common/useScrollRestoration.tsx +68 -0
  216. package/src/components/common/useTableSearchHelper.ts +53 -12
  217. package/src/components/index.tsx +4 -2
  218. package/src/contexts/BreacrumbsContext.tsx +38 -0
  219. package/src/contexts/DialogsProvider.tsx +5 -4
  220. package/src/contexts/ModeController.tsx +1 -3
  221. package/src/contexts/SnackbarProvider.tsx +2 -0
  222. package/src/core/DefaultAppBar.tsx +207 -0
  223. package/src/core/DefaultDrawer.tsx +185 -0
  224. package/src/core/DrawerNavigationItem.tsx +66 -0
  225. package/src/core/EntityEditView.tsx +407 -458
  226. package/src/core/EntityForm.tsx +956 -0
  227. package/src/core/EntitySidePanel.tsx +80 -17
  228. package/src/core/FireCMS.tsx +56 -49
  229. package/src/core/FireCMSRouter.tsx +17 -0
  230. package/src/core/NavigationRoutes.tsx +28 -38
  231. package/src/core/SideDialogs.tsx +12 -6
  232. package/src/core/field_configs.tsx +11 -12
  233. package/src/core/index.tsx +6 -5
  234. package/src/form/PropertyFieldBinding.tsx +85 -44
  235. package/src/form/components/CustomIdField.tsx +6 -2
  236. package/src/form/components/FieldHelperText.tsx +4 -4
  237. package/src/form/components/FormEntry.tsx +22 -0
  238. package/src/form/components/FormLayout.tsx +16 -0
  239. package/src/form/components/LabelWithIcon.tsx +30 -19
  240. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  241. package/src/form/components/StorageItemPreview.tsx +22 -12
  242. package/src/form/components/StorageUploadProgress.tsx +4 -5
  243. package/src/form/components/index.tsx +3 -1
  244. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +31 -19
  245. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +47 -35
  246. package/src/form/field_bindings/BlockFieldBinding.tsx +56 -34
  247. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  248. package/src/form/field_bindings/KeyValueFieldBinding.tsx +60 -51
  249. package/src/form/field_bindings/MapFieldBinding.tsx +71 -54
  250. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +153 -0
  251. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
  252. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  253. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  254. package/src/form/field_bindings/RepeatFieldBinding.tsx +56 -35
  255. package/src/form/field_bindings/SelectFieldBinding.tsx +22 -14
  256. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +42 -50
  257. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  258. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  259. package/src/form/index.tsx +4 -9
  260. package/src/form/useClearRestoreValue.tsx +2 -2
  261. package/src/form/validation.ts +13 -23
  262. package/src/hooks/data/delete.ts +6 -5
  263. package/src/hooks/data/save.ts +13 -9
  264. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  265. package/src/hooks/data/useDataSource.tsx +11 -3
  266. package/src/hooks/data/useEntityFetch.tsx +10 -6
  267. package/src/hooks/index.tsx +1 -0
  268. package/src/hooks/useAuthController.tsx +1 -1
  269. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  270. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  271. package/src/hooks/useBuildModeController.tsx +22 -29
  272. package/src/hooks/useBuildNavigationController.tsx +159 -52
  273. package/src/hooks/useFireCMSContext.tsx +5 -5
  274. package/src/hooks/useLargeLayout.tsx +0 -35
  275. package/src/hooks/useModeController.tsx +1 -2
  276. package/src/hooks/useProjectLog.tsx +32 -10
  277. package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
  278. package/src/hooks/useValidateAuthenticator.tsx +17 -37
  279. package/src/index.ts +1 -0
  280. package/src/internal/useBuildDataSource.ts +72 -82
  281. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  282. package/src/internal/useBuildSideEntityController.tsx +230 -70
  283. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  284. package/src/preview/PropertyPreview.tsx +17 -24
  285. package/src/preview/PropertyPreviewProps.tsx +7 -1
  286. package/src/preview/components/BooleanPreview.tsx +2 -2
  287. package/src/preview/components/EmptyValue.tsx +1 -1
  288. package/src/preview/components/EnumValuesChip.tsx +2 -2
  289. package/src/preview/components/ImagePreview.tsx +25 -36
  290. package/src/preview/components/ReferencePreview.tsx +22 -33
  291. package/src/preview/components/StorageThumbnail.tsx +5 -1
  292. package/src/preview/components/UrlComponentPreview.tsx +60 -28
  293. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
  294. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
  295. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
  296. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
  297. package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
  298. package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
  299. package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
  300. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +12 -12
  301. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  302. package/src/preview/util.ts +10 -10
  303. package/src/routes/CustomCMSRoute.tsx +21 -0
  304. package/src/routes/FireCMSRoute.tsx +223 -0
  305. package/src/routes/HomePageRoute.tsx +17 -0
  306. package/src/types/auth.tsx +9 -13
  307. package/src/types/collections.ts +87 -27
  308. package/src/types/customization_controller.tsx +0 -1
  309. package/src/types/datasource.ts +61 -43
  310. package/src/types/dialogs_controller.tsx +7 -3
  311. package/src/types/entities.ts +12 -2
  312. package/src/types/entity_actions.tsx +32 -7
  313. package/src/types/entity_callbacks.ts +18 -18
  314. package/src/types/entity_overrides.tsx +2 -2
  315. package/src/types/export_import.ts +4 -4
  316. package/src/types/fields.tsx +86 -44
  317. package/src/types/firecms.tsx +7 -2
  318. package/src/types/firecms_context.tsx +1 -1
  319. package/src/types/index.ts +0 -1
  320. package/src/types/navigation.ts +38 -18
  321. package/src/types/permissions.ts +5 -5
  322. package/src/types/plugins.tsx +25 -14
  323. package/src/types/properties.ts +60 -25
  324. package/src/types/property_config.tsx +0 -2
  325. package/src/types/side_dialogs_controller.tsx +13 -0
  326. package/src/types/side_entity_controller.tsx +1 -1
  327. package/src/types/storage.ts +94 -3
  328. package/src/types/user.ts +2 -0
  329. package/src/util/builders.ts +10 -8
  330. package/src/util/entities.ts +9 -6
  331. package/src/util/entity_actions.ts +28 -0
  332. package/src/util/entity_cache.ts +204 -0
  333. package/src/util/enums.ts +1 -1
  334. package/src/util/icon_list.ts +16 -10
  335. package/src/util/icon_synonyms.ts +3 -100
  336. package/src/util/icons.tsx +17 -7
  337. package/src/util/index.ts +2 -0
  338. package/src/util/join_collections.ts +3 -0
  339. package/src/util/make_properties_editable.ts +13 -5
  340. package/src/util/navigation_from_path.ts +10 -2
  341. package/src/util/navigation_utils.ts +59 -7
  342. package/src/util/objects.ts +45 -28
  343. package/src/util/parent_references_from_path.ts +3 -3
  344. package/src/util/permissions.ts +9 -8
  345. package/src/util/plurals.ts +0 -2
  346. package/src/util/property_utils.tsx +11 -4
  347. package/src/util/references.ts +11 -2
  348. package/src/util/resolutions.ts +79 -46
  349. package/src/util/storage.ts +79 -21
  350. package/src/util/strings.ts +2 -2
  351. package/src/util/useStorageUploadController.tsx +71 -27
  352. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  353. package/dist/components/VirtualTable/common.d.ts +0 -2
  354. package/dist/core/Drawer.d.ts +0 -23
  355. package/dist/core/Scaffold.d.ts +0 -55
  356. package/dist/core/SideEntityView.d.ts +0 -7
  357. package/dist/form/EntityForm.d.ts +0 -77
  358. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  359. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  360. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  361. package/dist/internal/useLocaleConfig.d.ts +0 -1
  362. package/dist/types/appcheck.d.ts +0 -26
  363. package/src/components/FireCMSAppBar.tsx +0 -165
  364. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  365. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
  366. package/src/core/Drawer.tsx +0 -191
  367. package/src/core/Scaffold.tsx +0 -281
  368. package/src/core/SideEntityView.tsx +0 -38
  369. package/src/form/EntityForm.tsx +0 -728
  370. package/src/form/components/FormikArrayContainer.tsx +0 -44
  371. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  372. package/src/internal/useBuildCustomizationController.tsx +0 -5
  373. package/src/internal/useLocaleConfig.tsx +0 -18
  374. package/src/types/appcheck.ts +0 -29
  375. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -1,55 +0,0 @@
1
- import React from "react";
2
- import { DrawerProps } from "./Drawer";
3
- import { FireCMSAppBarProps } from "../components";
4
- export declare const DRAWER_WIDTH = 280;
5
- /**
6
- * @group Core
7
- */
8
- export interface ScaffoldProps<ExtraDrawerProps = object, ExtraAppbarProps = object> {
9
- /**
10
- * Name of the app, displayed as the main title and in the tab title
11
- */
12
- name: string;
13
- /**
14
- * Logo to be displayed in the drawer of the CMS
15
- */
16
- logo?: string;
17
- /**
18
- * Whether to include the drawer in the scaffold
19
- */
20
- includeDrawer?: boolean;
21
- /**
22
- * In case you need to override the view that gets rendered as a drawer
23
- * @see DefaultDrawer
24
- */
25
- Drawer?: React.ComponentType<DrawerProps<ExtraDrawerProps>>;
26
- /**
27
- * Additional props passed to the custom Drawer
28
- */
29
- drawerProps?: Partial<DrawerProps> & ExtraDrawerProps;
30
- /**
31
- * Open the drawer on hover
32
- */
33
- autoOpenDrawer?: boolean;
34
- /**
35
- * A component that gets rendered on the upper side of the main toolbar.
36
- * `toolbarExtraWidget` has no effect if this is set.
37
- */
38
- FireCMSAppBar?: React.ComponentType<FireCMSAppBarProps<ExtraAppbarProps>>;
39
- /**
40
- * Additional props passed to the custom AppBar
41
- */
42
- fireCMSAppBarProps?: Partial<FireCMSAppBarProps> & ExtraAppbarProps;
43
- }
44
- /**
45
- * This view acts as a scaffold for FireCMS.
46
- *
47
- * It is in charge of displaying the navigation drawer, top bar and main
48
- * collection views.
49
- * This component needs a parent {@link FireCMS}
50
- *
51
- * @param props
52
- * @constructor
53
- * @group Core
54
- */
55
- export declare const Scaffold: React.NamedExoticComponent<React.PropsWithChildren<ScaffoldProps<object, object>>>;
@@ -1,7 +0,0 @@
1
- import { User } from "../types";
2
- import { EntityEditViewProps } from "./EntityEditView";
3
- export type SideEntityViewProps<M extends Record<string, any>> = EntityEditViewProps<M> & {
4
- formWidth?: number | string;
5
- onClose?: () => void;
6
- };
7
- export declare function SideEntityView<M extends Record<string, any>, UserType extends User>({ path, entityId, selectedSubPath, copy, collection, parentCollectionIds, onValuesAreModified, formWidth, onUpdate, onClose }: SideEntityViewProps<M>): import("react/jsx-runtime").JSX.Element;
@@ -1,77 +0,0 @@
1
- import { Entity, EntityCollection, EntityStatus, EntityValues, FormContext, ResolvedEntityCollection } from "../types";
2
- import { ValidationError } from "yup";
3
- /**
4
- * @group Components
5
- */
6
- export interface EntityFormProps<M extends Record<string, any>> {
7
- /**
8
- * New or existing status
9
- */
10
- status: EntityStatus;
11
- /**
12
- * Path of the collection this entity is located
13
- */
14
- path: string;
15
- /**
16
- * The collection is used to build the fields of the form
17
- */
18
- collection: EntityCollection<M>;
19
- /**
20
- * The updated entity is passed from the parent component when the underlying data
21
- * has changed in the datasource
22
- */
23
- entity?: Entity<M>;
24
- /**
25
- * The callback function called when Save is clicked and validation is correct
26
- */
27
- onEntitySaveRequested: (props: EntityFormSaveParams<M>) => Promise<void>;
28
- /**
29
- * The callback function called when discard is clicked
30
- */
31
- onDiscard?: () => void;
32
- /**
33
- * The callback function when the form is dirty, so the values are different
34
- * from the original ones
35
- */
36
- onModified?: (dirty: boolean) => void;
37
- /**
38
- * The callback function when the form original values have been modified
39
- */
40
- onValuesChanged?: (values?: EntityValues<M>) => void;
41
- /**
42
- *
43
- * @param id
44
- */
45
- onIdChange?: (id: string) => void;
46
- currentEntityId?: string;
47
- onFormContextChange?: (formContext: FormContext<M>) => void;
48
- hideId?: boolean;
49
- autoSave?: boolean;
50
- onIdUpdateError?: (error: any) => void;
51
- }
52
- export type EntityFormSaveParams<M extends Record<string, any>> = {
53
- collection: ResolvedEntityCollection<M>;
54
- path: string;
55
- entityId: string | undefined;
56
- values: EntityValues<M>;
57
- previousValues?: EntityValues<M>;
58
- closeAfterSave: boolean;
59
- autoSave: boolean;
60
- };
61
- /**
62
- * This is the form used internally by the CMS
63
- * @param status
64
- * @param path
65
- * @param collection
66
- * @param entity
67
- * @param onEntitySave
68
- * @param onDiscard
69
- * @param onModified
70
- * @param onValuesChanged
71
- * @constructor
72
- * @group Components
73
- */
74
- export declare const EntityForm: typeof EntityFormInternal;
75
- declare function EntityFormInternal<M extends Record<string, any>>({ status, path, collection: inputCollection, entity, onEntitySaveRequested, onDiscard, onModified, onValuesChanged, onIdChange, onFormContextChange, hideId, autoSave, onIdUpdateError, }: EntityFormProps<M>): import("react/jsx-runtime").JSX.Element;
76
- export declare function yupToFormErrors(yupError: ValidationError): Record<string, any>;
77
- export {};
@@ -1,18 +0,0 @@
1
- import React from "react";
2
- interface ArrayContainerProps<T> {
3
- value: T[];
4
- name: string;
5
- addLabel: string;
6
- buildEntry: (index: number, internalId: number) => React.ReactNode;
7
- disabled?: boolean;
8
- small?: boolean;
9
- onInternalIdAdded?: (id: number) => void;
10
- includeAddButton?: boolean;
11
- newDefaultEntry?: T | null;
12
- setFieldValue: (field: string, value: any, shouldValidate?: boolean | undefined) => void;
13
- }
14
- /**
15
- * @group Form custom fields
16
- */
17
- export declare function FormikArrayContainer<T>({ name, addLabel, value, disabled, buildEntry, small, onInternalIdAdded, includeAddButton, newDefaultEntry, setFieldValue }: ArrayContainerProps<T>): import("react/jsx-runtime").JSX.Element;
18
- export {};
@@ -1,9 +0,0 @@
1
- import { FieldProps } from "../../types";
2
- /**
3
- * Render a markdown field that allows edition and seeing the preview.
4
- *
5
- * This is one of the internal components that get mapped natively inside forms
6
- * and tables to the specified properties.
7
- * @group Form fields
8
- */
9
- export declare function MarkdownFieldBinding({ propertyKey, value, setValue, error, showError, disabled, autoFocus, touched, property, tableMode, includeDescription, context }: FieldProps<string>): import("react/jsx-runtime").JSX.Element;
@@ -1,2 +0,0 @@
1
- import { CustomizationController } from "../types/customization_controller";
2
- export declare function useBuildCustomizationController(controller: CustomizationController): CustomizationController;
@@ -1 +0,0 @@
1
- export declare function useLocaleConfig(locale?: string): void;
@@ -1,26 +0,0 @@
1
- import { FirebaseApp } from "firebase/app";
2
- /**
3
- * @group Firebase
4
- */
5
- export interface AppCheck {
6
- firebaseApp?: FirebaseApp;
7
- }
8
- /**
9
- * @group Firebase
10
- */
11
- export interface AppCheckOptions {
12
- providerKey: string;
13
- useEnterpriseRecaptcha: boolean;
14
- isTokenAutoRefreshEnabled?: boolean;
15
- debugToken?: string;
16
- forceRefresh?: boolean;
17
- }
18
- /**
19
- * @group Firebase
20
- */
21
- export declare interface AppCheckTokenResult {
22
- /**
23
- * The token string in JWT format.
24
- */
25
- readonly token: string;
26
- }
@@ -1,165 +0,0 @@
1
- import React from "react";
2
-
3
- import { Link as ReactLink } from "react-router-dom";
4
- import { ErrorBoundary } from "../components";
5
- import {
6
- Avatar,
7
- cn,
8
- DarkModeIcon,
9
- IconButton,
10
- LightModeIcon,
11
- LogoutIcon,
12
- Menu,
13
- MenuItem,
14
- Skeleton,
15
- Typography
16
- } from "@firecms/ui";
17
- import { useAuthController, useLargeLayout, useModeController, useNavigationController } from "../hooks";
18
- import { User } from "../types";
19
-
20
- export type FireCMSAppBarProps<ADDITIONAL_PROPS = object> = {
21
- title: string;
22
- /**
23
- * A component that gets rendered on the upper side of the main toolbar
24
- */
25
- endAdornment?: React.ReactNode;
26
-
27
- startAdornment?: React.ReactNode;
28
-
29
- dropDownActions?: React.ReactNode;
30
-
31
- includeDrawer?: boolean;
32
-
33
- drawerOpen: boolean;
34
-
35
- className?: string;
36
-
37
- style?: React.CSSProperties;
38
-
39
- user?: User;
40
- } & ADDITIONAL_PROPS;
41
-
42
- /**
43
- * This component renders the main app bar of FireCMS.
44
- * You will likely not need to use this component directly.
45
- *
46
- * @param title
47
- * @param toolbarExtraWidget
48
- * @param drawerOpen
49
- * @constructor
50
- */
51
- export const FireCMSAppBar = function FireCMSAppBar({
52
- title,
53
- endAdornment,
54
- startAdornment,
55
- drawerOpen,
56
- dropDownActions,
57
- includeDrawer,
58
- className,
59
- style,
60
- user: userProp
61
- }: FireCMSAppBarProps) {
62
- const navigation = useNavigationController();
63
-
64
- const authController = useAuthController();
65
- const {
66
- mode,
67
- toggleMode
68
- } = useModeController();
69
-
70
- const largeLayout = useLargeLayout();
71
-
72
- const user = userProp ?? authController.user;
73
-
74
- let avatarComponent: JSX.Element;
75
- if (user && user.photoURL) {
76
- avatarComponent = <Avatar
77
- src={user.photoURL}/>;
78
- } else if (user === undefined || authController.initialLoading) {
79
- avatarComponent = <div className={"p-1 flex justify-center"}>
80
- <Skeleton className={"w-10 h-10 rounded-full"}/>
81
- </div>;
82
- } else {
83
- const initial = user?.displayName
84
- ? user.displayName[0].toUpperCase()
85
- : (user?.email ? user.email[0].toUpperCase() : "A");
86
- avatarComponent = <Avatar>{initial}</Avatar>;
87
- }
88
-
89
- return (
90
- <div
91
- style={style}
92
- className={cn("pr-2",
93
- {
94
- "ml-[17rem]": drawerOpen && largeLayout,
95
- "ml-16": includeDrawer && !(drawerOpen && largeLayout) && !startAdornment,
96
- "h-16": true,
97
- "z-10": largeLayout,
98
- "transition-all": true,
99
- "ease-in": true,
100
- "duration-75": true,
101
- "w-full": !includeDrawer,
102
- "w-[calc(100%-64px)]": includeDrawer && !(drawerOpen && largeLayout),
103
- "w-[calc(100%-17rem)]": includeDrawer && (drawerOpen && largeLayout),
104
- "duration-150": drawerOpen && largeLayout,
105
- fixed: true,
106
- },
107
- className)}>
108
-
109
- <div className="flex flex-row gap-2 px-4 h-full items-center">
110
-
111
- {startAdornment}
112
-
113
- {navigation && <div className="mr-8 hidden lg:block">
114
- <ReactLink
115
- className="visited:text-inherit visited:dark:text-inherit"
116
- to={navigation?.basePath ?? "/"}
117
- >
118
- <Typography variant="subtitle1"
119
- noWrap
120
- className={"ml-2 !font-medium"}>
121
- {title}
122
- </Typography>
123
- </ReactLink>
124
- </div>}
125
-
126
- <div className={"flex-grow"}/>
127
-
128
- {endAdornment &&
129
- <ErrorBoundary>
130
- {endAdornment}
131
- </ErrorBoundary>}
132
-
133
- <IconButton
134
- color="inherit"
135
- aria-label="Open drawer"
136
- onClick={toggleMode}
137
- size="large">
138
- {mode === "dark"
139
- ? <DarkModeIcon/>
140
- : <LightModeIcon/>}
141
- </IconButton>
142
-
143
- <Menu trigger={avatarComponent}>
144
- {user && <div className={"px-4 py-2 mb-2"}>
145
- {user.displayName && <Typography variant={"body1"} color={"secondary"}>
146
- {user.displayName}
147
- </Typography>}
148
- {user.email && <Typography variant={"body2"} color={"secondary"}>
149
- {user.email}
150
- </Typography>}
151
- </div>}
152
-
153
- {dropDownActions}
154
-
155
- {!dropDownActions && <MenuItem onClick={authController.signOut}>
156
- <LogoutIcon/>
157
- Log Out
158
- </MenuItem>}
159
-
160
- </Menu>
161
-
162
- </div>
163
- </div>
164
- );
165
- }
@@ -1,28 +0,0 @@
1
- import { ContentPasteIcon, IconButton, Typography } from "@firecms/ui";
2
- import { useCallback, useState } from "react";
3
-
4
- export function PropertyIdCopyTooltipContent({ propertyId }: { propertyId: string }) {
5
-
6
- const [copied, setCopied] = useState(false);
7
-
8
- return (
9
- <div className={"flex flex-row gap-2 items-center justify-center text-white"}>
10
- <div>
11
- <Typography variant={"caption"} className={"min-w-20 text-slate-400"}
12
- color={"disabled"}>{copied ? "Copied" : "Property ID"}</Typography>
13
- <Typography variant={"caption"} className={"text-white"}><code>{propertyId}</code></Typography>
14
- </div>
15
- {/* Copy to clipboard button*/}
16
- <IconButton size={"small"}>
17
- <ContentPasteIcon size={"smallest"}
18
- className={"text-white"}
19
- onClick={useCallback(() => {
20
- navigator.clipboard.writeText(propertyId);
21
- setCopied(true);
22
- setTimeout(() => setCopied(false), 2000);
23
- }, [propertyId])}
24
- />
25
- </IconButton>
26
- </div>
27
- );
28
- }
@@ -1,225 +0,0 @@
1
- import React, { useCallback, useEffect, useMemo, useState } from "react";
2
-
3
- import { useDataSource, useFireCMSContext, useNavigationController } from "../../hooks";
4
- import { useDataOrder } from "../../hooks/data/useDataOrder";
5
- import {
6
- Entity,
7
- EntityCollection,
8
- EntityTableController,
9
- FilterValues,
10
- FireCMSContext,
11
- SelectedCellProps,
12
- User
13
- } from "../../types";
14
- import { useDebouncedData } from "./useDebouncedData";
15
-
16
- const DEFAULT_PAGE_SIZE = 50;
17
-
18
- export type DataSourceEntityCollectionTableControllerProps<M extends Record<string, any> = any> = {
19
- /**
20
- * Full path where the data of this table is located
21
- */
22
- fullPath: string;
23
- /**
24
- * The collection that is represented by this config.
25
- */
26
- collection: EntityCollection<M>;
27
- /**
28
- * List of entities that will be displayed on top, no matter the ordering.
29
- * This is used for reference fields selection
30
- */
31
- entitiesDisplayedFirst?: Entity<M>[];
32
-
33
- lastDeleteTimestamp?: number;
34
- forceFilter?: FilterValues<string>;
35
- }
36
-
37
- /**
38
- * Use this hook to build a controller for the {@link EntityCollectionTable}.
39
- * This controller is bound to data in a path in your specified datasource.
40
- *
41
- * Note that you can build your own hook returning a {@link EntityTableController}
42
- * if you would like to display different data.
43
- *
44
- * @param fullPath
45
- * @param collection
46
- * @param entitiesDisplayedFirst
47
- * @param lastDeleteTimestamp
48
- * @param forceFilterFromProps
49
- */
50
- export function useDataSourceEntityCollectionTableController<M extends Record<string, any> = any, UserType extends User = User>(
51
- {
52
- fullPath,
53
- collection,
54
- entitiesDisplayedFirst,
55
- lastDeleteTimestamp,
56
- forceFilter: forceFilterFromProps,
57
- }: DataSourceEntityCollectionTableControllerProps<M>)
58
- : EntityTableController<M> {
59
-
60
- const {
61
- initialFilter,
62
- initialSort,
63
- forceFilter: forceFilterFromCollection
64
- } = collection;
65
-
66
- const [popupCell, setPopupCell] = React.useState<SelectedCellProps<M> | undefined>(undefined);
67
- const navigation = useNavigationController();
68
- const dataSource = useDataSource(collection);
69
- const resolvedPath = useMemo(() => navigation.resolveAliasesFrom(fullPath), [fullPath, navigation.resolveAliasesFrom]);
70
-
71
- const forceFilter = forceFilterFromProps ?? forceFilterFromCollection;
72
- const paginationEnabled = collection.pagination === undefined || Boolean(collection.pagination);
73
- const pageSize = typeof collection.pagination === "number" ? collection.pagination : DEFAULT_PAGE_SIZE;
74
-
75
- const [searchString, setSearchString] = React.useState<string | undefined>();
76
- const [itemCount, setItemCount] = React.useState<number | undefined>(paginationEnabled ? pageSize : undefined);
77
-
78
- const initialSortInternal = useMemo(() => {
79
- if (initialSort && forceFilter && !checkFilterCombination(forceFilter, initialSort)) {
80
- console.warn("Initial sort is not compatible with the force filter. Ignoring initial sort");
81
- return undefined;
82
- }
83
- return initialSort;
84
- }, [initialSort, forceFilter]);
85
-
86
- const [filterValues, setFilterValues] = React.useState<FilterValues<Extract<keyof M, string>> | undefined>(forceFilter ?? initialFilter ?? undefined);
87
- const [sortBy, setSortBy] = React.useState<[Extract<keyof M, string>, "asc" | "desc"] | undefined>(initialSortInternal);
88
-
89
- const sortByProperty = sortBy ? sortBy[0] : undefined;
90
- const currentSort = sortBy ? sortBy[1] : undefined;
91
-
92
- const context: FireCMSContext<UserType> = useFireCMSContext();
93
-
94
- const [rawData, setRawData] = useState<Entity<M>[]>([]);
95
-
96
- const [dataLoading, setDataLoading] = useState<boolean>(false);
97
- const [dataLoadingError, setDataLoadingError] = useState<Error | undefined>();
98
- const [noMoreToLoad, setNoMoreToLoad] = useState<boolean>(false);
99
-
100
- const checkFilterCombination = useCallback((filterValues: FilterValues<any>,
101
- sortBy?: [string, "asc" | "desc"]) => {
102
- if (!dataSource.isFilterCombinationValid)
103
- return true;
104
- return dataSource.isFilterCombinationValid({
105
- path: resolvedPath,
106
- collection,
107
- filterValues,
108
- sortBy
109
- })
110
- }, []);
111
-
112
- const clearFilter = useCallback(() => setFilterValues(forceFilter ?? undefined), [forceFilter]);
113
-
114
- const updateFilterValues = useCallback((updatedFilter: FilterValues<Extract<keyof M, string>> | undefined) => {
115
- if (forceFilter) {
116
- console.warn("Filter is not compatible with the force filter. Ignoring filter");
117
- return;
118
- }
119
- if (updatedFilter && Object.keys(updatedFilter).length === 0) {
120
- setFilterValues(undefined);
121
- } else {
122
- setFilterValues(updatedFilter);
123
- }
124
- }, [forceFilter]);
125
-
126
- useEffect(() => {
127
-
128
- setDataLoading(true);
129
-
130
- const onEntitiesUpdate = async (entities: Entity<M>[]) => {
131
- if (collection.callbacks?.onFetch) {
132
- try {
133
- entities = await Promise.all(
134
- entities.map((entity) =>
135
- collection.callbacks!.onFetch!({
136
- collection,
137
- path: resolvedPath,
138
- entity,
139
- context
140
- })));
141
- } catch (e: any) {
142
- console.error(e);
143
- }
144
- }
145
- setDataLoading(false);
146
- setDataLoadingError(undefined);
147
- setRawData(entities.map(e => ({
148
- ...e,
149
- // values: sanitizeData(e.values, resolvedCollection.properties)
150
- })));
151
- setNoMoreToLoad(!itemCount || entities.length < itemCount);
152
- };
153
-
154
- const onError = (error: Error) => {
155
- console.error("ERROR", error);
156
- setDataLoading(false);
157
- setRawData([]);
158
- setDataLoadingError(error);
159
- };
160
-
161
- if (dataSource.listenCollection) {
162
- return dataSource.listenCollection<M>({
163
- path: resolvedPath,
164
- collection,
165
- onUpdate: onEntitiesUpdate,
166
- onError,
167
- searchString,
168
- filter: filterValues,
169
- limit: itemCount,
170
- startAfter: undefined,
171
- orderBy: sortByProperty,
172
- order: currentSort
173
- });
174
- } else {
175
- dataSource.fetchCollection<M>({
176
- path: resolvedPath,
177
- collection,
178
- searchString,
179
- filter: filterValues,
180
- limit: itemCount,
181
- startAfter: undefined,
182
- orderBy: sortByProperty,
183
- order: currentSort
184
- })
185
- .then(onEntitiesUpdate)
186
- .catch(onError);
187
- return () => {
188
- };
189
- }
190
- }, [resolvedPath, itemCount, currentSort, sortByProperty, filterValues, searchString]);
191
-
192
- const orderedData = useDataOrder({
193
- data: rawData,
194
- entitiesDisplayedFirst
195
- });
196
-
197
- // hack to fix Firestore listeners firing with incomplete data
198
- const data = useDebouncedData(orderedData, {
199
- filterValues,
200
- sortBy,
201
- searchString,
202
- lastDeleteTimestamp
203
- });
204
-
205
- return {
206
- data,
207
- dataLoading,
208
- noMoreToLoad,
209
- dataLoadingError,
210
- filterValues,
211
- setFilterValues: updateFilterValues,
212
- sortBy,
213
- setSortBy,
214
- searchString,
215
- setSearchString,
216
- clearFilter,
217
- itemCount,
218
- setItemCount,
219
- paginationEnabled,
220
- pageSize,
221
- checkFilterCombination,
222
- popupCell,
223
- setPopupCell
224
- }
225
- }