@firecms/core 3.0.0-canary.21 → 3.0.0-canary.211

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 (382) 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 +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/EntityJsonPreview.d.ts +3 -0
  25. package/dist/components/EntityPreview.d.ts +5 -4
  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 +13 -3
  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 +4 -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 +35 -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 +37 -69
  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 -5
  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 +21921 -14330
  99. package/dist/index.es.js.map +1 -1
  100. package/dist/index.umd.js +24271 -588
  101. package/dist/index.umd.js.map +1 -1
  102. package/dist/internal/useBuildDataSource.d.ts +1 -16
  103. package/dist/internal/useBuildSideEntityController.d.ts +2 -2
  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 +77 -22
  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 +71 -42
  124. package/dist/types/firecms.d.ts +6 -2
  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 +32 -14
  128. package/dist/types/permissions.d.ts +4 -4
  129. package/dist/types/plugins.d.ts +23 -12
  130. package/dist/types/properties.d.ts +52 -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 +6 -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/entities.d.ts +3 -3
  138. package/dist/util/entity_actions.d.ts +2 -0
  139. package/dist/util/entity_cache.d.ts +23 -0
  140. package/dist/util/icon_list.d.ts +5 -1
  141. package/dist/util/icon_synonyms.d.ts +1 -98
  142. package/dist/util/icons.d.ts +6 -3
  143. package/dist/util/index.d.ts +2 -0
  144. package/dist/util/navigation_from_path.d.ts +6 -1
  145. package/dist/util/navigation_utils.d.ts +14 -3
  146. package/dist/util/objects.d.ts +2 -1
  147. package/dist/util/permissions.d.ts +4 -4
  148. package/dist/util/plurals.d.ts +0 -2
  149. package/dist/util/property_utils.d.ts +3 -3
  150. package/dist/util/resolutions.d.ts +36 -17
  151. package/dist/util/storage.d.ts +23 -2
  152. package/dist/util/useStorageUploadController.d.ts +3 -3
  153. package/package.json +62 -48
  154. package/src/app/AppBar.tsx +18 -0
  155. package/src/app/Drawer.tsx +24 -0
  156. package/src/app/Scaffold.tsx +253 -0
  157. package/src/app/index.ts +4 -0
  158. package/src/app/useApp.tsx +32 -0
  159. package/src/components/ArrayContainer.tsx +127 -41
  160. package/src/components/CircularProgressCenter.tsx +2 -2
  161. package/src/components/ClearFilterSortButton.tsx +41 -0
  162. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +3 -3
  163. package/src/components/DeleteEntityDialog.tsx +10 -19
  164. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +54 -37
  165. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
  166. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
  167. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -39
  168. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  169. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
  170. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
  171. package/src/components/EntityCollectionTable/index.tsx +1 -1
  172. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +31 -36
  173. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
  174. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  175. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +81 -80
  176. package/src/components/EntityCollectionView/EntityCollectionView.tsx +207 -113
  177. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +4 -2
  178. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  179. package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
  180. package/src/components/EntityCollectionView/utils.ts +19 -0
  181. package/src/components/EntityJsonPreview.tsx +66 -0
  182. package/src/components/EntityPreview.tsx +62 -52
  183. package/src/components/EntityView.tsx +10 -10
  184. package/src/components/ErrorView.tsx +4 -4
  185. package/src/components/HomePage/DefaultHomePage.tsx +26 -19
  186. package/src/components/HomePage/FavouritesView.tsx +6 -11
  187. package/src/components/HomePage/NavigationCard.tsx +3 -3
  188. package/src/components/HomePage/NavigationCardBinding.tsx +5 -10
  189. package/src/components/HomePage/NavigationGroup.tsx +2 -2
  190. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  191. package/src/components/NotFoundPage.tsx +2 -2
  192. package/src/components/PropertyConfigBadge.tsx +9 -3
  193. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  194. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +19 -13
  195. package/src/components/ReferenceWidget.tsx +21 -11
  196. package/src/components/SearchIconsView.tsx +10 -7
  197. package/src/components/SelectableTable/SelectableTable.tsx +27 -12
  198. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  199. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
  200. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
  201. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -23
  202. package/src/components/UnsavedChangesDialog.tsx +42 -0
  203. package/src/components/VirtualTable/VirtualTable.tsx +96 -48
  204. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  205. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  206. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  207. package/src/components/VirtualTable/VirtualTableProps.tsx +33 -14
  208. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  209. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  210. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +3 -2
  211. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  212. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  213. package/src/components/VirtualTable/types.tsx +2 -3
  214. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +33 -40
  215. package/src/components/common/index.ts +2 -1
  216. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  217. package/src/components/common/types.tsx +4 -6
  218. package/src/components/common/useColumnsIds.tsx +24 -3
  219. package/src/components/common/useDataSourceTableController.tsx +420 -0
  220. package/src/components/common/useDebouncedCallback.tsx +20 -0
  221. package/src/components/common/useScrollRestoration.tsx +68 -0
  222. package/src/components/common/useTableSearchHelper.ts +53 -12
  223. package/src/components/index.tsx +4 -2
  224. package/src/contexts/BreacrumbsContext.tsx +38 -0
  225. package/src/contexts/DialogsProvider.tsx +5 -4
  226. package/src/contexts/ModeController.tsx +1 -3
  227. package/src/contexts/SnackbarProvider.tsx +2 -0
  228. package/src/core/DefaultAppBar.tsx +219 -0
  229. package/src/core/DefaultDrawer.tsx +185 -0
  230. package/src/core/DrawerNavigationItem.tsx +66 -0
  231. package/src/core/EntityEditView.tsx +345 -480
  232. package/src/core/EntityEditViewFormActions.tsx +199 -0
  233. package/src/core/EntitySidePanel.tsx +86 -17
  234. package/src/core/FireCMS.tsx +56 -49
  235. package/src/core/FireCMSRouter.tsx +17 -0
  236. package/src/core/NavigationRoutes.tsx +28 -38
  237. package/src/core/SideDialogs.tsx +22 -12
  238. package/src/core/field_configs.tsx +11 -12
  239. package/src/core/index.tsx +6 -5
  240. package/src/form/EntityForm.tsx +585 -539
  241. package/src/form/EntityFormActions.tsx +169 -0
  242. package/src/form/PropertyFieldBinding.tsx +85 -44
  243. package/src/form/components/CustomIdField.tsx +6 -2
  244. package/src/form/components/FieldHelperText.tsx +4 -4
  245. package/src/form/components/FormEntry.tsx +22 -0
  246. package/src/form/components/FormLayout.tsx +16 -0
  247. package/src/form/components/LabelWithIcon.tsx +30 -19
  248. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  249. package/src/form/components/StorageItemPreview.tsx +22 -12
  250. package/src/form/components/StorageUploadProgress.tsx +4 -5
  251. package/src/form/components/index.tsx +3 -1
  252. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +31 -19
  253. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +47 -35
  254. package/src/form/field_bindings/BlockFieldBinding.tsx +56 -34
  255. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  256. package/src/form/field_bindings/KeyValueFieldBinding.tsx +60 -51
  257. package/src/form/field_bindings/MapFieldBinding.tsx +71 -54
  258. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +153 -0
  259. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
  260. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  261. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  262. package/src/form/field_bindings/RepeatFieldBinding.tsx +56 -35
  263. package/src/form/field_bindings/SelectFieldBinding.tsx +22 -14
  264. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +42 -50
  265. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  266. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  267. package/src/form/index.tsx +16 -37
  268. package/src/form/useClearRestoreValue.tsx +2 -2
  269. package/src/form/validation.ts +13 -23
  270. package/src/hooks/data/delete.ts +6 -5
  271. package/src/hooks/data/save.ts +13 -9
  272. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  273. package/src/hooks/data/useDataSource.tsx +11 -3
  274. package/src/hooks/data/useEntityFetch.tsx +10 -6
  275. package/src/hooks/index.tsx +1 -0
  276. package/src/hooks/useAuthController.tsx +1 -1
  277. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  278. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  279. package/src/hooks/useBuildModeController.tsx +22 -29
  280. package/src/hooks/useBuildNavigationController.tsx +159 -54
  281. package/src/hooks/useFireCMSContext.tsx +5 -5
  282. package/src/hooks/useLargeLayout.tsx +0 -35
  283. package/src/hooks/useModeController.tsx +1 -2
  284. package/src/hooks/useProjectLog.tsx +32 -10
  285. package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
  286. package/src/hooks/useValidateAuthenticator.tsx +17 -37
  287. package/src/index.ts +1 -0
  288. package/src/internal/useBuildDataSource.ts +72 -82
  289. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  290. package/src/internal/useBuildSideEntityController.tsx +194 -73
  291. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  292. package/src/preview/PropertyPreview.tsx +17 -24
  293. package/src/preview/PropertyPreviewProps.tsx +7 -1
  294. package/src/preview/components/BooleanPreview.tsx +2 -2
  295. package/src/preview/components/EmptyValue.tsx +1 -1
  296. package/src/preview/components/EnumValuesChip.tsx +2 -2
  297. package/src/preview/components/ImagePreview.tsx +25 -36
  298. package/src/preview/components/ReferencePreview.tsx +22 -33
  299. package/src/preview/components/StorageThumbnail.tsx +5 -1
  300. package/src/preview/components/UrlComponentPreview.tsx +60 -28
  301. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
  302. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
  303. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
  304. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
  305. package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
  306. package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
  307. package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
  308. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +12 -12
  309. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  310. package/src/preview/util.ts +10 -10
  311. package/src/routes/CustomCMSRoute.tsx +21 -0
  312. package/src/routes/FireCMSRoute.tsx +235 -0
  313. package/src/routes/HomePageRoute.tsx +17 -0
  314. package/src/types/auth.tsx +9 -13
  315. package/src/types/collections.ts +94 -27
  316. package/src/types/customization_controller.tsx +0 -1
  317. package/src/types/datasource.ts +61 -43
  318. package/src/types/dialogs_controller.tsx +7 -3
  319. package/src/types/entities.ts +12 -2
  320. package/src/types/entity_actions.tsx +32 -7
  321. package/src/types/entity_callbacks.ts +18 -18
  322. package/src/types/entity_overrides.tsx +2 -2
  323. package/src/types/export_import.ts +4 -4
  324. package/src/types/fields.tsx +81 -46
  325. package/src/types/firecms.tsx +7 -2
  326. package/src/types/firecms_context.tsx +1 -1
  327. package/src/types/index.ts +0 -1
  328. package/src/types/navigation.ts +38 -18
  329. package/src/types/permissions.ts +5 -5
  330. package/src/types/plugins.tsx +25 -14
  331. package/src/types/properties.ts +60 -25
  332. package/src/types/property_config.tsx +0 -2
  333. package/src/types/side_dialogs_controller.tsx +15 -0
  334. package/src/types/side_entity_controller.tsx +6 -1
  335. package/src/types/storage.ts +94 -3
  336. package/src/types/user.ts +2 -0
  337. package/src/util/builders.ts +10 -8
  338. package/src/util/entities.ts +9 -6
  339. package/src/util/entity_actions.ts +28 -0
  340. package/src/util/entity_cache.ts +204 -0
  341. package/src/util/enums.ts +1 -1
  342. package/src/util/icon_list.ts +16 -10
  343. package/src/util/icon_synonyms.ts +3 -100
  344. package/src/util/icons.tsx +17 -7
  345. package/src/util/index.ts +2 -0
  346. package/src/util/join_collections.ts +3 -0
  347. package/src/util/make_properties_editable.ts +13 -5
  348. package/src/util/navigation_from_path.ts +13 -6
  349. package/src/util/navigation_utils.ts +59 -7
  350. package/src/util/objects.ts +48 -28
  351. package/src/util/parent_references_from_path.ts +3 -3
  352. package/src/util/permissions.ts +9 -8
  353. package/src/util/plurals.ts +0 -2
  354. package/src/util/property_utils.tsx +11 -4
  355. package/src/util/references.ts +11 -2
  356. package/src/util/resolutions.ts +100 -46
  357. package/src/util/storage.ts +79 -21
  358. package/src/util/strings.ts +2 -2
  359. package/src/util/useStorageUploadController.tsx +71 -27
  360. package/dist/components/FireCMSAppBar.d.ts +0 -26
  361. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  362. package/dist/components/VirtualTable/common.d.ts +0 -2
  363. package/dist/core/Drawer.d.ts +0 -23
  364. package/dist/core/Scaffold.d.ts +0 -55
  365. package/dist/core/SideEntityView.d.ts +0 -7
  366. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  367. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  368. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  369. package/dist/internal/useLocaleConfig.d.ts +0 -1
  370. package/dist/types/appcheck.d.ts +0 -26
  371. package/src/components/FireCMSAppBar.tsx +0 -165
  372. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  373. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
  374. package/src/core/Drawer.tsx +0 -191
  375. package/src/core/Scaffold.tsx +0 -281
  376. package/src/core/SideEntityView.tsx +0 -38
  377. package/src/form/components/FormikArrayContainer.tsx +0 -44
  378. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  379. package/src/internal/useBuildCustomizationController.tsx +0 -5
  380. package/src/internal/useLocaleConfig.tsx +0 -18
  381. package/src/types/appcheck.ts +0 -29
  382. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -1,4 +1,4 @@
1
- import { DataSource, DataSourceDelegate, EntityReference, GeoPoint, NavigationController, PropertyConfig } from "../types";
1
+ import { DataSource, DataSourceDelegate, NavigationController, PropertyConfig } from "../types";
2
2
  /**
3
3
  * Use this hook to build a {@link DataSource} based on Firestore
4
4
  * @param firebaseApp
@@ -9,18 +9,3 @@ export declare function useBuildDataSource({ delegate, propertyConfigs, navigati
9
9
  propertyConfigs?: Record<string, PropertyConfig>;
10
10
  navigationController: NavigationController;
11
11
  }): DataSource;
12
- /**
13
- * Recursive function that converts Firestore data types into CMS or plain
14
- * JS types.
15
- * FireCMS uses Javascript dates internally instead of Firestore timestamps.
16
- * This makes it easier to interact with the rest of the libraries and
17
- * bindings.
18
- * Also, Firestore references are replaced with {@link EntityReference}
19
- * @param data
20
- * @param buildReference
21
- * @param buildGeoPoint
22
- * @param buildDate
23
- * @param buildDelete
24
- * @group Firestore
25
- */
26
- export declare function cmsToDelegateModel(data: any, buildReference: (reference: EntityReference) => any, buildGeoPoint: (geoPoint: GeoPoint) => any, buildDate: (date: Date) => any, buildDelete: () => any): any;
@@ -1,4 +1,4 @@
1
- import { EntityCollection, EntitySidePanelProps, NavigationController, SideDialogsController, SideEntityController } from "../types";
2
- export declare function getEntityViewWidth(props: EntitySidePanelProps<any>, small: boolean): string;
1
+ import { CustomizationController, EntityCollection, EntitySidePanelProps, NavigationController, SideDialogsController, SideEntityController } from "../types";
2
+ export declare function getEntityViewWidth(props: EntitySidePanelProps<any>, small: boolean, customizationController: CustomizationController): string;
3
3
  export declare const useBuildSideEntityController: (navigation: NavigationController, sideDialogsController: SideDialogsController) => SideEntityController;
4
4
  export declare function buildSidePanelsFromUrl(path: string, collections: EntityCollection[], newFlag: boolean): EntitySidePanelProps<any>[];
@@ -1,14 +1,12 @@
1
- import React from "react";
1
+ /**
2
+ * Custom hook to handle navigation blocking when there are unsaved changes.
3
+ *
4
+ * @param when - Indicates whether to block navigation.
5
+ * @param onSuccess - Callback invoked when navigation is confirmed.
6
+ * @returns An object containing the state of navigation blocking and handlers.
7
+ */
2
8
  export declare function useNavigationUnsavedChangesDialog(when: boolean, onSuccess: () => void): {
3
9
  navigationWasBlocked: boolean;
4
10
  handleCancel: () => void;
5
11
  handleOk: () => void;
6
12
  };
7
- export interface UnsavedChangesDialogProps {
8
- open: boolean;
9
- body?: React.ReactNode;
10
- title?: string;
11
- handleOk: () => void;
12
- handleCancel: () => void;
13
- }
14
- export declare function UnsavedChangesDialog({ open, handleOk, handleCancel, body, title }: UnsavedChangesDialogProps): import("react/jsx-runtime").JSX.Element;
@@ -2,7 +2,7 @@ import { CMSType, Property, ResolvedProperty } from "../types";
2
2
  /**
3
3
  * @group Preview components
4
4
  */
5
- export type PreviewSize = "medium" | "small" | "tiny";
5
+ export type PreviewSize = "small" | "medium" | "large";
6
6
  /**
7
7
  * @group Preview components
8
8
  */
@@ -37,4 +37,9 @@ export interface PropertyPreviewProps<T extends CMSType = any, CustomProps = any
37
37
  * Additional properties set by the developer
38
38
  */
39
39
  customProps?: CustomProps;
40
+ /**
41
+ * If the preview should be interactive or not.
42
+ * This applies only to videos.
43
+ */
44
+ interactive?: boolean;
40
45
  }
@@ -3,7 +3,7 @@ import { EnumValues } from "../../types";
3
3
  export interface EnumValuesChipProps {
4
4
  enumValues?: EnumValues;
5
5
  enumKey: string | number;
6
- size: "tiny" | "small" | "medium";
6
+ size: "small" | "medium" | "large";
7
7
  className?: string;
8
8
  children?: React.ReactNode;
9
9
  }
@@ -8,9 +8,10 @@ export type ReferencePreviewProps = {
8
8
  previewProperties?: string[];
9
9
  onClick?: (e: React.SyntheticEvent) => void;
10
10
  hover?: boolean;
11
- allowEntityNavigation?: boolean;
11
+ includeEntityLink?: boolean;
12
+ includeId?: boolean;
12
13
  };
13
14
  /**
14
15
  * @group Preview components
15
16
  */
16
- export declare const ReferencePreview: React.FunctionComponent<ReferencePreviewProps>;
17
+ export declare const ReferencePreview: (props: ReferencePreviewProps) => import("react/jsx-runtime").JSX.Element;
@@ -4,10 +4,11 @@ type StorageThumbnailProps = {
4
4
  storagePathOrDownloadUrl: string;
5
5
  storeUrl: boolean;
6
6
  size: PreviewSize;
7
+ interactive?: boolean;
7
8
  };
8
9
  /**
9
10
  * @group Preview components
10
11
  */
11
12
  export declare const StorageThumbnail: React.FunctionComponent<StorageThumbnailProps>;
12
- export declare function StorageThumbnailInternal({ storeUrl, storagePathOrDownloadUrl, size }: StorageThumbnailProps): import("react/jsx-runtime").JSX.Element | null;
13
+ export declare function StorageThumbnailInternal({ storeUrl, interactive, storagePathOrDownloadUrl, size }: StorageThumbnailProps): import("react/jsx-runtime").JSX.Element | null;
13
14
  export {};
@@ -4,9 +4,10 @@ import { PreviewSize } from "../PropertyPreviewProps";
4
4
  /**
5
5
  * @group Preview components
6
6
  */
7
- export declare function UrlComponentPreview({ url, previewType, size, hint }: {
7
+ export declare function UrlComponentPreview({ url, previewType, size, hint, interactive }: {
8
8
  url: string;
9
9
  previewType?: PreviewType;
10
10
  size: PreviewSize;
11
11
  hint?: string;
12
+ interactive?: boolean;
12
13
  }): React.ReactElement;
@@ -1,7 +1,7 @@
1
1
  import { CollectionSize } from "../types";
2
2
  import { PreviewSize } from "./PropertyPreviewProps";
3
- export declare const TINY_THUMBNAIL = 40;
4
- export declare const SMALL_THUMBNAIL = 100;
5
- export declare const REGULAR_THUMBNAIL = 200;
3
+ export declare const SMALL_THUMBNAIL = 40;
4
+ export declare const MEDIUM_THUMBNAIL = 100;
5
+ export declare const LARGE_THUMBNAIL = 200;
6
6
  export declare function getThumbnailMeasure(size: PreviewSize): number;
7
7
  export declare function getPreviewSizeFrom(size: CollectionSize): PreviewSize;
@@ -0,0 +1,4 @@
1
+ import { CMSView } from "../types";
2
+ export declare function CustomCMSRoute({ cmsView }: {
3
+ cmsView: CMSView;
4
+ }): import("react").ReactNode;
@@ -0,0 +1 @@
1
+ export declare function FireCMSRoute(): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,3 @@
1
+ export declare function HomePageRoute({ children }: {
2
+ children: React.ReactNode;
3
+ }): import("react").ReactNode;
@@ -8,16 +8,12 @@ import { StorageSource } from "./storage";
8
8
  * to do it as the result of a hook.
9
9
  * @group Hooks and utilities
10
10
  */
11
- export type AuthController<UserType extends User = any, ExtraData extends any = any> = {
11
+ export type AuthController<USER extends User = any, ExtraData = any> = {
12
12
  /**
13
13
  * The user currently logged in
14
14
  * The values can be: the user object, null if they skipped login
15
15
  */
16
- user: UserType | null;
17
- /**
18
- * Roles related to the logged user
19
- */
20
- roles?: Role[];
16
+ user: USER | null;
21
17
  /**
22
18
  * Initial loading flag. It is used not to display the login screen
23
19
  * when the app first loads, and it has not been checked whether the user
@@ -32,7 +28,7 @@ export type AuthController<UserType extends User = any, ExtraData extends any =
32
28
  /**
33
29
  * Sign out
34
30
  */
35
- signOut: () => void;
31
+ signOut: () => Promise<void>;
36
32
  /**
37
33
  * Error initializing the authentication
38
34
  */
@@ -51,20 +47,22 @@ export type AuthController<UserType extends User = any, ExtraData extends any =
51
47
  loginSkipped: boolean;
52
48
  extra: ExtraData;
53
49
  setExtra: (extra: ExtraData) => void;
50
+ setUser?: (user: USER | null) => void;
51
+ setUserRoles?: (roles: Role[]) => void;
54
52
  };
55
53
  /**
56
54
  * Implement this function to allow access to specific users.
57
55
  * @group Hooks and utilities
58
56
  */
59
- export type Authenticator<UserType extends User = User, Controller extends AuthController<UserType> = AuthController<UserType>> = (props: {
57
+ export type Authenticator<USER extends User = User> = (props: {
60
58
  /**
61
59
  * Logged-in user or null
62
60
  */
63
- user: UserType | null;
61
+ user: USER | null;
64
62
  /**
65
63
  * AuthController
66
64
  */
67
- authController: Controller;
65
+ authController: AuthController<USER>;
68
66
  /**
69
67
  * Connector to your database, e.g. your Firestore database
70
68
  */
@@ -16,7 +16,7 @@ import { EntityOverrides } from "./entity_overrides";
16
16
  *
17
17
  * @group Models
18
18
  */
19
- export interface EntityCollection<M extends Record<string, any> = any, UserType extends User = any> {
19
+ export interface EntityCollection<M extends Record<string, any> = any, USER extends User = any> {
20
20
  /**
21
21
  * You can set an alias that will be used internally instead of the `path`.
22
22
  * The `alias` value will be used to determine the URL of the collection,
@@ -44,6 +44,11 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
44
44
  * This path also determines the URL in FireCMS, unless an alias is specified
45
45
  */
46
46
  path: string;
47
+ /**
48
+ * Optional database id of this collection. If not specified, the default
49
+ * database id will be used.
50
+ */
51
+ databaseId?: string;
47
52
  /**
48
53
  * If this collection is a top level navigation entry, you can set this
49
54
  * property to `true` to indicate that this collection is a collection group.
@@ -53,7 +58,8 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
53
58
  * Icon key to use in this collection.
54
59
  * You can use any of the icons in the Material specs:
55
60
  * https://fonts.google.com/icons
56
- * e.g. 'account_tree' or 'person'
61
+ * e.g. 'account_tree' or 'person'.
62
+ * Find all the icons in https://firecms.co/docs/icons
57
63
  */
58
64
  icon?: string;
59
65
  /**
@@ -66,6 +72,10 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
66
72
  * Set of properties that compose an entity
67
73
  */
68
74
  properties: PropertiesOrBuilders<M>;
75
+ /**
76
+ * Default preview properties displayed when this collection is referenced to.
77
+ */
78
+ previewProperties?: string[];
69
79
  /**
70
80
  * Title property of the entity. This is the property that will be used
71
81
  * as the title in entity related views and references.
@@ -73,11 +83,10 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
73
83
  */
74
84
  titleProperty?: keyof M;
75
85
  /**
76
- * Can this collection be edited by the end user.
77
- * Defaults to `true`.
78
- * Keep in mind that you can also set this prop to individual properties.
86
+ * When editing an entity, you can choose to open the entity in a side dialog
87
+ * or in a full screen dialog. Defaults to `full_screen`.
79
88
  */
80
- editable?: boolean;
89
+ openEntityMode?: "side_panel" | "full_screen";
81
90
  /**
82
91
  * Order in which the properties are displayed.
83
92
  * If you are specifying your collection as code, the order is the same as the
@@ -94,8 +103,12 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
94
103
  * `subcollection:`. e.g. `subcollection:orders`.
95
104
  * - If you are using a collection group, you will also have an
96
105
  * additional `collectionGroupParent` column.
106
+ * You can use this prop to hide some properties from the table view.
107
+ * Note that if you set this prop, other ways to hide fields, like
108
+ * `hidden` in the property definition,will be ignored.
109
+ * `propertiesOrder` has precedence over `hidden`.
97
110
  */
98
- propertiesOrder?: Extract<keyof M, string>[];
111
+ propertiesOrder?: (Extract<keyof M, string> | string | `subcollection:${string}` | "collectionGroupParent")[];
99
112
  /**
100
113
  * If enabled, content is loaded in batches. If `false` all entities in the
101
114
  * collection are loaded.
@@ -112,7 +125,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
112
125
  * Permissions the logged-in user can perform on this collection.
113
126
  * If not specified everything defaults to `true`.
114
127
  */
115
- permissions?: Permissions | PermissionsBuilder<EntityCollection, UserType, M>;
128
+ permissions?: Permissions | PermissionsBuilder<EntityCollection, USER, M>;
116
129
  /**
117
130
  * Are the entities in this collection selectable. Defaults to `true`
118
131
  */
@@ -128,7 +141,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
128
141
  * is being created, updated or deleted.
129
142
  * Useful for adding your own logic or blocking the execution of the operation.
130
143
  */
131
- callbacks?: EntityCallbacks<M, UserType>;
144
+ callbacks?: EntityCallbacks<M, USER>;
132
145
  /**
133
146
  * Builder for rendering additional components such as buttons in the
134
147
  * collection toolbar
@@ -157,7 +170,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
157
170
  * }
158
171
  * ```
159
172
  */
160
- entityActions?: EntityAction<M, UserType>[];
173
+ entityActions?: EntityAction<M, USER>[];
161
174
  /**
162
175
  * Pass your own selection controller if you want to control selected
163
176
  * entities externally.
@@ -202,7 +215,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
202
215
  * You can add additional fields to the collection view by implementing
203
216
  * an additional field delegate.
204
217
  */
205
- additionalFields?: AdditionalFieldDelegate<M, UserType>[];
218
+ additionalFields?: AdditionalFieldDelegate<M, USER>[];
206
219
  /**
207
220
  * Default size of the rendered collection
208
221
  */
@@ -247,13 +260,33 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
247
260
  /**
248
261
  *
249
262
  */
250
- exportable?: boolean | ExportConfig<UserType>;
263
+ exportable?: boolean | ExportConfig<USER>;
251
264
  /**
252
265
  * User id of the owner of this collection. This is used only by plugins, or if you
253
266
  * are writing custom code
254
267
  */
255
268
  ownerId?: string;
269
+ /**
270
+ * Overrides for the entity view, like the data source or the storage source.
271
+ */
256
272
  overrides?: EntityOverrides;
273
+ /**
274
+ * Width of the side dialog (in pixels) when opening an entity in this collection.
275
+ */
276
+ sideDialogWidth?: number | string;
277
+ /**
278
+ * Can this collection configuration be edited by the end user.
279
+ * Defaults to `true`.
280
+ * Keep in mind that you can also set this prop to individual properties.
281
+ * This prop has only effect if you are using the collection editor.
282
+ */
283
+ editable?: boolean;
284
+ /**
285
+ * If set to true, the default values of the properties will be applied
286
+ * to the entity every time the entity is updated (not only when created).
287
+ * Defaults to false.
288
+ */
289
+ alwaysApplyDefaultValues?: boolean;
257
290
  }
258
291
  /**
259
292
  * Parameter passed to the `Actions` prop in the collection configuration.
@@ -262,7 +295,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
262
295
  *
263
296
  * @group Models
264
297
  */
265
- export interface CollectionActionsProps<M extends Record<string, any> = any, UserType extends User = User, EC extends EntityCollection<M> = EntityCollection<M>> {
298
+ export interface CollectionActionsProps<M extends Record<string, any> = any, USER extends User = User, EC extends EntityCollection<M> = EntityCollection<M>> {
266
299
  /**
267
300
  * Full collection path of this entity. This is the full path, like
268
301
  * `users/1234/addresses`
@@ -293,7 +326,7 @@ export interface CollectionActionsProps<M extends Record<string, any> = any, Use
293
326
  /**
294
327
  * Context of the app status
295
328
  */
296
- context: FireCMSContext<UserType>;
329
+ context: FireCMSContext<USER>;
297
330
  /**
298
331
  * Count of the entities in this collection
299
332
  */
@@ -302,14 +335,13 @@ export interface CollectionActionsProps<M extends Record<string, any> = any, Use
302
335
  /**
303
336
  * Use this controller to retrieve the selected entities or modify them in
304
337
  * an {@link EntityCollection}
305
- * If you want to pass a `SelectionController` to
306
338
  * @group Models
307
339
  */
308
340
  export type SelectionController<M extends Record<string, any> = any> = {
309
341
  selectedEntities: Entity<M>[];
310
342
  setSelectedEntities: Dispatch<SetStateAction<Entity<M>[]>>;
311
343
  isEntitySelected: (entity: Entity<M>) => boolean;
312
- toggleEntitySelection: (entity: Entity<M>) => void;
344
+ toggleEntitySelection: (entity: Entity<M>, newSelectedState?: boolean) => void;
313
345
  };
314
346
  /**
315
347
  * Filter conditions in a `Query.where()` clause are specified using the
@@ -337,16 +369,16 @@ export type FilterCombination<Key extends string> = Partial<Record<Key, "asc" |
337
369
  * @group Models
338
370
  */
339
371
  export type CollectionSize = "xs" | "s" | "m" | "l" | "xl";
340
- export type AdditionalFieldDelegateProps<M extends Record<string, any> = any, UserType extends User = User> = {
372
+ export type AdditionalFieldDelegateProps<M extends Record<string, any> = any, USER extends User = User> = {
341
373
  entity: Entity<M>;
342
- context: FireCMSContext<UserType>;
374
+ context: FireCMSContext<USER>;
343
375
  };
344
376
  /**
345
377
  * Use this interface for adding additional fields to entity collection views.
346
378
  * If you need to do some async loading you can use {@link AsyncPreviewComponent}
347
379
  * @group Models
348
380
  */
349
- export interface AdditionalFieldDelegate<M extends Record<string, any> = any, UserType extends User = User> {
381
+ export interface AdditionalFieldDelegate<M extends Record<string, any> = any, USER extends User = User> {
350
382
  /**
351
383
  * ID of this column. You can use this id in the `properties` field of the
352
384
  * collection in any order you want
@@ -363,7 +395,7 @@ export interface AdditionalFieldDelegate<M extends Record<string, any> = any, Us
363
395
  /**
364
396
  * Builder for the content of the cell for this column
365
397
  */
366
- Builder?: React.ComponentType<AdditionalFieldDelegateProps<M, UserType>>;
398
+ Builder?: React.ComponentType<AdditionalFieldDelegateProps<M, USER>>;
367
399
  /**
368
400
  * If this column needs to update dynamically based on other properties,
369
401
  * you can define an array of keys as strings with the
@@ -391,8 +423,24 @@ export interface AdditionalFieldDelegate<M extends Record<string, any> = any, Us
391
423
  * @group Models
392
424
  */
393
425
  export type EntityCustomView<M extends Record<string, any> = any> = {
426
+ /**
427
+ * Key of this custom view.
428
+ */
394
429
  key: string;
430
+ /**
431
+ * Name of this custom view.
432
+ */
395
433
  name: string;
434
+ /**
435
+ * If set to true, the actions of the entity (save, discard,delete) will be
436
+ * included in the view. By default the actions are located in the right or bottom,
437
+ * based on the screen size. You can force the actions to be located at the bottom
438
+ * by setting this prop to "bottom".
439
+ */
440
+ includeActions?: boolean | "bottom";
441
+ /**
442
+ * Builder for rendering the custom view
443
+ */
396
444
  Builder?: React.ComponentType<EntityCustomViewParams<M>>;
397
445
  };
398
446
  /**
@@ -445,12 +493,18 @@ export type EntityTableController<M extends Record<string, any> = any> = {
445
493
  filterValues?: FilterValues<Extract<keyof M, string>>;
446
494
  setFilterValues?: (filterValues: FilterValues<Extract<keyof M, string>>) => void;
447
495
  sortBy?: [Extract<keyof M, string>, "asc" | "desc"];
448
- setSortBy?: (sortBy: [Extract<keyof M, string>, "asc" | "desc"]) => void;
496
+ setSortBy?: (sortBy?: [Extract<keyof M, string>, "asc" | "desc"]) => void;
449
497
  searchString?: string;
450
498
  setSearchString?: (searchString?: string) => void;
451
499
  clearFilter?: () => void;
452
500
  itemCount?: number;
453
501
  setItemCount?: (itemCount: number) => void;
502
+ initialScroll?: number;
503
+ onScroll?: (props: {
504
+ scrollDirection: "forward" | "backward";
505
+ scrollOffset: number;
506
+ scrollUpdateWasRequested: boolean;
507
+ }) => void;
454
508
  paginationEnabled?: boolean;
455
509
  pageSize?: number;
456
510
  checkFilterCombination?: (filterValues: FilterValues<any>, sortBy?: [string, "asc" | "desc"]) => boolean;
@@ -463,5 +517,6 @@ export type SelectedCellProps<M extends Record<string, any>> = {
463
517
  cellRect: DOMRect;
464
518
  width: number;
465
519
  height: number;
466
- entity: Entity<M>;
520
+ entityPath: string;
521
+ entityId: string;
467
522
  };
@@ -1,12 +1,14 @@
1
- import { Entity, EntityReference, EntityStatus, EntityValues, GeoPoint } from "./entities";
1
+ import { Entity, EntityStatus, EntityValues } from "./entities";
2
2
  import { EntityCollection, FilterValues } from "./collections";
3
3
  import { ResolvedEntityCollection } from "./resolved_entities";
4
+ import { FireCMSContext } from "./firecms_context";
4
5
  /**
5
6
  * @group Datasource
6
7
  */
7
8
  export interface FetchEntityProps<M extends Record<string, any> = any> {
8
9
  path: string;
9
10
  entityId: string;
11
+ databaseId?: string;
10
12
  collection?: EntityCollection<M, any>;
11
13
  }
12
14
  /**
@@ -52,11 +54,11 @@ export interface SaveEntityProps<M extends Record<string, any> = any> {
52
54
  */
53
55
  export interface DeleteEntityProps<M extends Record<string, any> = any> {
54
56
  entity: Entity<M>;
57
+ collection?: EntityCollection<M> | ResolvedEntityCollection<M>;
55
58
  }
56
59
  /**
57
- * Implement this interface and pass it to a {@link FireCMS}
58
- * to connect it to your data source.
59
- * A Firestore implementation of this interface can be found in {@link useFirestoreDataSource}
60
+ * Component in charge of communicating with the data source.
61
+ * Usually you won't need to implement this interface, but a {@link DataSourceDelegate} instead.
60
62
  * @group Datasource
61
63
  */
62
64
  export interface DataSource {
@@ -97,7 +99,7 @@ export interface DataSource {
97
99
  * @param entityId
98
100
  * @param collection
99
101
  */
100
- fetchEntity<M extends Record<string, any> = any>({ path, entityId, collection }: FetchEntityProps<M>): Promise<Entity<M> | undefined>;
102
+ fetchEntity<M extends Record<string, any> = any>({ path, entityId, databaseId, collection }: FetchEntityProps<M>): Promise<Entity<M> | undefined>;
101
103
  /**
102
104
  * Get realtime updates on one entity.
103
105
  * @param path
@@ -121,21 +123,21 @@ export interface DataSource {
121
123
  * @param entity
122
124
  * @return was the whole deletion flow successful
123
125
  */
124
- deleteEntity<M extends Record<string, any> = any>({ entity }: DeleteEntityProps<M>): Promise<void>;
126
+ deleteEntity<M extends Record<string, any> = any>({ entity, collection }: DeleteEntityProps<M>): Promise<void>;
125
127
  /**
126
128
  * Check if the given property is unique in the given collection
127
129
  * @param path Collection path
128
130
  * @param name of the property
129
131
  * @param value
130
- * @param property
132
+ * @param collection
131
133
  * @param entityId
132
134
  * @return `true` if there are no other fields besides the given entity
133
135
  */
134
- checkUniqueField(path: string, name: string, value: any, entityId?: string): Promise<boolean>;
136
+ checkUniqueField(path: string, name: string, value: any, entityId?: string, collection?: EntityCollection): Promise<boolean>;
135
137
  /**
136
138
  * Generate an id for a new entity
137
139
  */
138
- generateEntityId(path: string): string;
140
+ generateEntityId(path: string, collection: EntityCollection): string;
139
141
  /**
140
142
  * Count the number of entities in a collection
141
143
  */
@@ -145,6 +147,17 @@ export interface DataSource {
145
147
  * @param props
146
148
  */
147
149
  isFilterCombinationValid?(props: FilterCombinationValidProps): boolean;
150
+ /**
151
+ * Called when the user clicks on the search bar in a collection view.
152
+ * Useful for initializing a text search index.
153
+ * @param props
154
+ */
155
+ initTextSearch?: (props: {
156
+ context: FireCMSContext;
157
+ path: string;
158
+ collection: EntityCollection;
159
+ parentCollectionIds?: string[];
160
+ }) => Promise<boolean>;
148
161
  }
149
162
  export type FilterCombinationValidProps = {
150
163
  path: string;
@@ -152,14 +165,18 @@ export type FilterCombinationValidProps = {
152
165
  filterValues: FilterValues<any>;
153
166
  sortBy?: [string, "asc" | "desc"];
154
167
  };
155
- export type SaveEntityDelegateProps<M extends Record<string, any> = any> = Omit<SaveEntityProps<M>, "collection">;
156
- export type FetchCollectionDelegateProps<M extends Record<string, any> = any> = Omit<FetchCollectionProps<M>, "collection"> & {
157
- isCollectionGroup?: boolean;
158
- };
159
- export type ListenCollectionDelegateProps<M extends Record<string, any> = any> = ListenCollectionProps<M> & {
160
- isCollectionGroup?: boolean;
161
- };
168
+ export type SaveEntityDelegateProps<M extends Record<string, any> = any> = SaveEntityProps<M>;
169
+ export type FetchCollectionDelegateProps<M extends Record<string, any> = any> = FetchCollectionProps<M>;
170
+ export type ListenCollectionDelegateProps<M extends Record<string, any> = any> = ListenCollectionProps<M>;
162
171
  export interface DataSourceDelegate {
172
+ /**
173
+ * Key that identifies this data source delegate
174
+ */
175
+ key: string;
176
+ /**
177
+ * If the data source has been initialised
178
+ */
179
+ initialised?: boolean;
163
180
  /**
164
181
  * Fetch data from a collection
165
182
  * @param path
@@ -194,7 +211,7 @@ export interface DataSourceDelegate {
194
211
  * @param path
195
212
  * @param entityId
196
213
  */
197
- fetchEntity<M extends Record<string, any> = any>({ path, entityId, }: Omit<FetchEntityProps<M>, "collection">): Promise<Entity<M> | undefined>;
214
+ fetchEntity<M extends Record<string, any> = any>({ path, entityId, }: FetchEntityProps<M>): Promise<Entity<M> | undefined>;
198
215
  /**
199
216
  * Get realtime updates on one entity.
200
217
  * @param path
@@ -204,12 +221,12 @@ export interface DataSourceDelegate {
204
221
  * @param onError
205
222
  * @return Function to cancel subscription
206
223
  */
207
- listenEntity?<M extends Record<string, any> = any>({ path, entityId, onUpdate, onError }: Omit<ListenEntityProps<M>, "collection">): () => void;
224
+ listenEntity?<M extends Record<string, any> = any>({ path, entityId, onUpdate, onError }: ListenEntityProps<M>): () => void;
208
225
  /**
209
226
  * Save entity to the specified path
210
227
  * @param path
211
- * @param id
212
- * @param collection
228
+ * @param entityId
229
+ * @param values
213
230
  * @param status
214
231
  */
215
232
  saveEntity<M extends Record<string, any> = any>({ path, entityId, values, status }: SaveEntityDelegateProps<M>): Promise<Entity<M>>;
@@ -225,13 +242,14 @@ export interface DataSourceDelegate {
225
242
  * @param name of the property
226
243
  * @param value
227
244
  * @param entityId
245
+ * @param collection
228
246
  * @return `true` if there are no other fields besides the given entity
229
247
  */
230
- checkUniqueField(path: string, name: string, value: any, entityId?: string): Promise<boolean>;
248
+ checkUniqueField(path: string, name: string, value: any, entityId?: string, collection?: EntityCollection): Promise<boolean>;
231
249
  /**
232
250
  * Generate an id for a new entity
233
251
  */
234
- generateEntityId(path: string): string;
252
+ generateEntityId(path: string, collection?: EntityCollection): string;
235
253
  /**
236
254
  * Count the number of entities in a collection
237
255
  */
@@ -240,23 +258,21 @@ export interface DataSourceDelegate {
240
258
  * Check if the given filter combination is valid
241
259
  * @param props
242
260
  */
243
- isFilterCombinationValid?(props: Omit<FilterCombinationValidProps, "collection">): boolean;
244
- /**
245
- * Convert a FireCMS reference to a reference that can be used by the datasource
246
- * @param reference
247
- */
248
- buildReference: (reference: EntityReference) => any;
249
- /**
250
- * Convert a FireCMS GeoPoint to a GeoPoint that can be used by the datasource
251
- * @param geoPoint
252
- */
253
- buildGeoPoint: (geoPoint: GeoPoint) => any;
261
+ isFilterCombinationValid?(props: Omit<FilterCombinationValidProps, "collection"> & {
262
+ databaseId?: string;
263
+ }): boolean;
254
264
  /**
255
265
  * Get the object to generate the current time in the datasource
256
266
  */
257
- currentTime(): any;
258
- buildDate: (date: Date) => any;
259
- buildDeleteFieldValue: () => any;
267
+ currentTime?: () => any;
260
268
  delegateToCMSModel: (data: any) => any;
269
+ cmsToDelegateModel: (data: any) => any;
261
270
  setDateToMidnight: (input?: any) => any;
271
+ initTextSearch?: (props: {
272
+ context: FireCMSContext;
273
+ path: string;
274
+ databaseId?: string;
275
+ collection: EntityCollection;
276
+ parentCollectionIds?: string[];
277
+ }) => Promise<boolean>;
262
278
  }