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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (387) hide show
  1. package/README.md +3 -3
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +16 -0
  4. package/dist/app/Scaffold.d.ts +34 -0
  5. package/dist/app/index.d.ts +4 -0
  6. package/dist/app/useApp.d.ts +16 -0
  7. package/dist/components/ArrayContainer.d.ts +30 -6
  8. package/dist/components/CircularProgressCenter.d.ts +1 -1
  9. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  10. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  11. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +13 -13
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +22 -6
  14. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
  15. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  16. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
  17. package/dist/components/EntityCollectionTable/index.d.ts +1 -1
  18. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  19. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  20. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +7 -4
  21. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +20 -2
  22. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  23. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  24. package/dist/components/EntityJsonPreview.d.ts +3 -0
  25. package/dist/components/EntityPreview.d.ts +8 -5
  26. package/dist/components/ErrorView.d.ts +1 -1
  27. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  28. package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
  29. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  30. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  31. package/dist/components/ReferenceWidget.d.ts +3 -1
  32. package/dist/components/SelectableTable/SelectableTable.d.ts +14 -4
  33. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  34. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  35. package/dist/components/VirtualTable/VirtualTableProps.d.ts +28 -12
  36. package/dist/components/VirtualTable/types.d.ts +3 -3
  37. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
  38. package/dist/components/common/index.d.ts +2 -1
  39. package/dist/components/common/table_height.d.ts +5 -0
  40. package/dist/components/common/types.d.ts +4 -6
  41. package/dist/components/common/useColumnsIds.d.ts +3 -1
  42. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
  43. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  44. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  45. package/dist/components/index.d.ts +5 -2
  46. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  47. package/dist/core/DefaultAppBar.d.ts +29 -0
  48. package/dist/core/DefaultDrawer.d.ts +19 -0
  49. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  50. package/dist/core/EntityEditView.d.ts +40 -11
  51. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  52. package/dist/core/FireCMS.d.ts +3 -3
  53. package/dist/core/FireCMSRouter.d.ts +4 -0
  54. package/dist/core/NavigationRoutes.d.ts +2 -3
  55. package/dist/core/SideDialogs.d.ts +4 -2
  56. package/dist/core/index.d.ts +4 -4
  57. package/dist/form/EntityForm.d.ts +36 -64
  58. package/dist/form/EntityFormActions.d.ts +17 -0
  59. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  60. package/dist/form/components/ErrorFocus.d.ts +1 -1
  61. package/dist/form/components/FieldHelperText.d.ts +3 -3
  62. package/dist/form/components/FormEntry.d.ts +6 -0
  63. package/dist/form/components/FormLayout.d.ts +5 -0
  64. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  65. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  66. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  67. package/dist/form/components/index.d.ts +3 -1
  68. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  69. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  70. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  71. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  72. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  73. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  74. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  75. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  76. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  77. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  78. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  79. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
  80. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  81. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  82. package/dist/form/index.d.ts +16 -18
  83. package/dist/form/useClearRestoreValue.d.ts +2 -2
  84. package/dist/hooks/data/delete.d.ts +4 -4
  85. package/dist/hooks/data/save.d.ts +4 -5
  86. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  87. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  88. package/dist/hooks/index.d.ts +1 -0
  89. package/dist/hooks/useAuthController.d.ts +1 -1
  90. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  91. package/dist/hooks/useBuildNavigationController.d.ts +7 -12
  92. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  93. package/dist/hooks/useModeController.d.ts +1 -2
  94. package/dist/hooks/useProjectLog.d.ts +8 -2
  95. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  96. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  97. package/dist/index.d.ts +1 -0
  98. package/dist/index.es.js +21573 -13895
  99. package/dist/index.es.js.map +1 -1
  100. package/dist/index.umd.js +24361 -588
  101. package/dist/index.umd.js.map +1 -1
  102. package/dist/internal/useBuildDataSource.d.ts +3 -17
  103. package/dist/internal/useBuildSideEntityController.d.ts +3 -3
  104. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  105. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  106. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  107. package/dist/preview/components/ReferencePreview.d.ts +3 -2
  108. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  109. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  110. package/dist/preview/util.d.ts +3 -3
  111. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  112. package/dist/routes/FireCMSRoute.d.ts +1 -0
  113. package/dist/routes/HomePageRoute.d.ts +3 -0
  114. package/dist/types/auth.d.ts +8 -10
  115. package/dist/types/collections.d.ts +97 -23
  116. package/dist/types/datasource.d.ts +52 -36
  117. package/dist/types/dialogs_controller.d.ts +7 -3
  118. package/dist/types/entities.d.ts +7 -2
  119. package/dist/types/entity_actions.d.ts +28 -4
  120. package/dist/types/entity_callbacks.d.ts +16 -16
  121. package/dist/types/entity_overrides.d.ts +2 -2
  122. package/dist/types/export_import.d.ts +4 -4
  123. package/dist/types/fields.d.ts +74 -42
  124. package/dist/types/firecms.d.ts +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 +36 -14
  128. package/dist/types/permissions.d.ts +4 -4
  129. package/dist/types/plugins.d.ts +36 -12
  130. package/dist/types/properties.d.ts +73 -24
  131. package/dist/types/property_config.d.ts +0 -2
  132. package/dist/types/side_dialogs_controller.d.ts +10 -0
  133. package/dist/types/side_entity_controller.d.ts +10 -1
  134. package/dist/types/storage.d.ts +86 -3
  135. package/dist/types/user.d.ts +1 -0
  136. package/dist/util/builders.d.ts +3 -3
  137. package/dist/util/callbacks.d.ts +2 -0
  138. package/dist/util/createFormexStub.d.ts +2 -0
  139. package/dist/util/entities.d.ts +3 -3
  140. package/dist/util/entity_actions.d.ts +2 -0
  141. package/dist/util/entity_cache.d.ts +23 -0
  142. package/dist/util/icon_list.d.ts +5 -1
  143. package/dist/util/icon_synonyms.d.ts +1 -98
  144. package/dist/util/icons.d.ts +6 -3
  145. package/dist/util/index.d.ts +3 -0
  146. package/dist/util/navigation_from_path.d.ts +6 -1
  147. package/dist/util/navigation_utils.d.ts +15 -3
  148. package/dist/util/objects.d.ts +2 -1
  149. package/dist/util/permissions.d.ts +4 -4
  150. package/dist/util/plurals.d.ts +0 -2
  151. package/dist/util/property_utils.d.ts +4 -4
  152. package/dist/util/references.d.ts +2 -2
  153. package/dist/util/resolutions.d.ts +41 -17
  154. package/dist/util/storage.d.ts +23 -2
  155. package/dist/util/useStorageUploadController.d.ts +3 -3
  156. package/package.json +62 -48
  157. package/src/app/AppBar.tsx +18 -0
  158. package/src/app/Drawer.tsx +24 -0
  159. package/src/app/Scaffold.tsx +253 -0
  160. package/src/app/index.ts +4 -0
  161. package/src/app/useApp.tsx +32 -0
  162. package/src/components/ArrayContainer.tsx +149 -46
  163. package/src/components/CircularProgressCenter.tsx +2 -2
  164. package/src/components/ClearFilterSortButton.tsx +41 -0
  165. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +11 -11
  166. package/src/components/DeleteEntityDialog.tsx +13 -20
  167. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +59 -40
  168. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
  169. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
  170. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +48 -40
  171. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  172. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
  173. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
  174. package/src/components/EntityCollectionTable/index.tsx +1 -1
  175. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +32 -37
  176. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
  177. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  178. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +84 -80
  179. package/src/components/EntityCollectionView/EntityCollectionView.tsx +229 -117
  180. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +4 -2
  181. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  182. package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
  183. package/src/components/EntityCollectionView/utils.ts +19 -0
  184. package/src/components/EntityJsonPreview.tsx +66 -0
  185. package/src/components/EntityPreview.tsx +80 -59
  186. package/src/components/EntityView.tsx +13 -10
  187. package/src/components/ErrorView.tsx +4 -4
  188. package/src/components/HomePage/DefaultHomePage.tsx +27 -20
  189. package/src/components/HomePage/FavouritesView.tsx +6 -11
  190. package/src/components/HomePage/NavigationCard.tsx +3 -3
  191. package/src/components/HomePage/NavigationCardBinding.tsx +5 -10
  192. package/src/components/HomePage/NavigationGroup.tsx +2 -2
  193. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  194. package/src/components/NotFoundPage.tsx +2 -2
  195. package/src/components/PropertyConfigBadge.tsx +9 -3
  196. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  197. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +21 -13
  198. package/src/components/ReferenceWidget.tsx +21 -11
  199. package/src/components/SearchIconsView.tsx +10 -7
  200. package/src/components/SelectableTable/SelectableTable.tsx +157 -145
  201. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  202. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
  203. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
  204. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -23
  205. package/src/components/UnsavedChangesDialog.tsx +42 -0
  206. package/src/components/VirtualTable/VirtualTable.tsx +130 -51
  207. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  208. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  209. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  210. package/src/components/VirtualTable/VirtualTableProps.tsx +33 -14
  211. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  212. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  213. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +3 -2
  214. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  215. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  216. package/src/components/VirtualTable/types.tsx +2 -3
  217. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +44 -40
  218. package/src/components/common/index.ts +2 -1
  219. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  220. package/src/components/common/types.tsx +4 -6
  221. package/src/components/common/useColumnsIds.tsx +24 -3
  222. package/src/components/common/useDataSourceTableController.tsx +420 -0
  223. package/src/components/common/useDebouncedCallback.tsx +20 -0
  224. package/src/components/common/useScrollRestoration.tsx +68 -0
  225. package/src/components/common/useTableSearchHelper.ts +53 -12
  226. package/src/components/index.tsx +6 -2
  227. package/src/contexts/BreacrumbsContext.tsx +38 -0
  228. package/src/contexts/DialogsProvider.tsx +5 -4
  229. package/src/contexts/ModeController.tsx +1 -3
  230. package/src/contexts/SnackbarProvider.tsx +2 -0
  231. package/src/core/DefaultAppBar.tsx +219 -0
  232. package/src/core/DefaultDrawer.tsx +185 -0
  233. package/src/core/DrawerNavigationItem.tsx +66 -0
  234. package/src/core/EntityEditView.tsx +406 -478
  235. package/src/core/EntityEditViewFormActions.tsx +199 -0
  236. package/src/core/EntitySidePanel.tsx +95 -19
  237. package/src/core/FireCMS.tsx +67 -59
  238. package/src/core/FireCMSRouter.tsx +17 -0
  239. package/src/core/NavigationRoutes.tsx +28 -38
  240. package/src/core/SideDialogs.tsx +22 -12
  241. package/src/core/field_configs.tsx +11 -12
  242. package/src/core/index.tsx +6 -5
  243. package/src/form/EntityForm.tsx +589 -535
  244. package/src/form/EntityFormActions.tsx +169 -0
  245. package/src/form/PropertyFieldBinding.tsx +89 -45
  246. package/src/form/components/CustomIdField.tsx +6 -2
  247. package/src/form/components/FieldHelperText.tsx +4 -4
  248. package/src/form/components/FormEntry.tsx +22 -0
  249. package/src/form/components/FormLayout.tsx +16 -0
  250. package/src/form/components/LabelWithIcon.tsx +30 -19
  251. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  252. package/src/form/components/StorageItemPreview.tsx +22 -12
  253. package/src/form/components/StorageUploadProgress.tsx +4 -5
  254. package/src/form/components/index.tsx +3 -1
  255. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +34 -19
  256. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +48 -35
  257. package/src/form/field_bindings/BlockFieldBinding.tsx +56 -34
  258. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  259. package/src/form/field_bindings/KeyValueFieldBinding.tsx +61 -52
  260. package/src/form/field_bindings/MapFieldBinding.tsx +71 -54
  261. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +157 -0
  262. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
  263. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  264. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  265. package/src/form/field_bindings/RepeatFieldBinding.tsx +62 -35
  266. package/src/form/field_bindings/SelectFieldBinding.tsx +23 -15
  267. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +47 -52
  268. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  269. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  270. package/src/form/index.tsx +16 -37
  271. package/src/form/useClearRestoreValue.tsx +2 -2
  272. package/src/form/validation.ts +13 -23
  273. package/src/hooks/data/delete.ts +6 -5
  274. package/src/hooks/data/save.ts +32 -33
  275. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  276. package/src/hooks/data/useDataSource.tsx +11 -3
  277. package/src/hooks/data/useEntityFetch.tsx +10 -6
  278. package/src/hooks/index.tsx +1 -0
  279. package/src/hooks/useAuthController.tsx +1 -1
  280. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  281. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  282. package/src/hooks/useBuildModeController.tsx +22 -29
  283. package/src/hooks/useBuildNavigationController.tsx +193 -68
  284. package/src/hooks/useFireCMSContext.tsx +3 -33
  285. package/src/hooks/useLargeLayout.tsx +0 -35
  286. package/src/hooks/useModeController.tsx +1 -2
  287. package/src/hooks/useProjectLog.tsx +32 -10
  288. package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
  289. package/src/hooks/useValidateAuthenticator.tsx +17 -37
  290. package/src/index.ts +1 -0
  291. package/src/internal/useBuildDataSource.ts +79 -85
  292. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  293. package/src/internal/useBuildSideEntityController.tsx +201 -75
  294. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  295. package/src/preview/PropertyPreview.tsx +20 -25
  296. package/src/preview/PropertyPreviewProps.tsx +7 -1
  297. package/src/preview/components/BooleanPreview.tsx +2 -2
  298. package/src/preview/components/EmptyValue.tsx +1 -1
  299. package/src/preview/components/EnumValuesChip.tsx +2 -2
  300. package/src/preview/components/ImagePreview.tsx +25 -36
  301. package/src/preview/components/ReferencePreview.tsx +23 -34
  302. package/src/preview/components/StorageThumbnail.tsx +5 -1
  303. package/src/preview/components/UrlComponentPreview.tsx +60 -28
  304. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -6
  305. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +7 -5
  306. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -4
  307. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -4
  308. package/src/preview/property_previews/ArrayOneOfPreview.tsx +7 -6
  309. package/src/preview/property_previews/ArrayPropertyPreview.tsx +7 -6
  310. package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
  311. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
  312. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  313. package/src/preview/util.ts +10 -10
  314. package/src/routes/CustomCMSRoute.tsx +21 -0
  315. package/src/routes/FireCMSRoute.tsx +246 -0
  316. package/src/routes/HomePageRoute.tsx +17 -0
  317. package/src/types/auth.tsx +9 -13
  318. package/src/types/collections.ts +118 -28
  319. package/src/types/customization_controller.tsx +0 -1
  320. package/src/types/datasource.ts +61 -43
  321. package/src/types/dialogs_controller.tsx +7 -3
  322. package/src/types/entities.ts +12 -2
  323. package/src/types/entity_actions.tsx +32 -7
  324. package/src/types/entity_callbacks.ts +18 -18
  325. package/src/types/entity_overrides.tsx +2 -2
  326. package/src/types/export_import.ts +4 -4
  327. package/src/types/fields.tsx +85 -46
  328. package/src/types/firecms.tsx +7 -3
  329. package/src/types/firecms_context.tsx +1 -1
  330. package/src/types/index.ts +0 -1
  331. package/src/types/navigation.ts +43 -18
  332. package/src/types/permissions.ts +5 -5
  333. package/src/types/plugins.tsx +42 -14
  334. package/src/types/properties.ts +87 -26
  335. package/src/types/property_config.tsx +0 -2
  336. package/src/types/side_dialogs_controller.tsx +15 -0
  337. package/src/types/side_entity_controller.tsx +11 -1
  338. package/src/types/storage.ts +94 -3
  339. package/src/types/user.ts +2 -0
  340. package/src/util/builders.ts +10 -8
  341. package/src/util/callbacks.ts +119 -0
  342. package/src/util/createFormexStub.tsx +62 -0
  343. package/src/util/entities.ts +9 -6
  344. package/src/util/entity_actions.ts +28 -0
  345. package/src/util/entity_cache.ts +204 -0
  346. package/src/util/enums.ts +1 -1
  347. package/src/util/icon_list.ts +16 -10
  348. package/src/util/icon_synonyms.ts +3 -100
  349. package/src/util/icons.tsx +17 -7
  350. package/src/util/index.ts +3 -0
  351. package/src/util/join_collections.ts +6 -1
  352. package/src/util/make_properties_editable.ts +13 -5
  353. package/src/util/navigation_from_path.ts +18 -7
  354. package/src/util/navigation_utils.ts +141 -25
  355. package/src/util/objects.ts +52 -28
  356. package/src/util/parent_references_from_path.ts +3 -3
  357. package/src/util/permissions.ts +9 -8
  358. package/src/util/plurals.ts +0 -2
  359. package/src/util/property_utils.tsx +17 -6
  360. package/src/util/references.ts +19 -8
  361. package/src/util/resolutions.ts +110 -48
  362. package/src/util/storage.ts +79 -21
  363. package/src/util/strings.ts +2 -2
  364. package/src/util/useStorageUploadController.tsx +91 -28
  365. package/dist/components/FireCMSAppBar.d.ts +0 -26
  366. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  367. package/dist/components/VirtualTable/common.d.ts +0 -2
  368. package/dist/core/Drawer.d.ts +0 -23
  369. package/dist/core/Scaffold.d.ts +0 -55
  370. package/dist/core/SideEntityView.d.ts +0 -7
  371. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  372. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  373. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  374. package/dist/internal/useLocaleConfig.d.ts +0 -1
  375. package/dist/types/appcheck.d.ts +0 -26
  376. package/src/components/FireCMSAppBar.tsx +0 -165
  377. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  378. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
  379. package/src/core/Drawer.tsx +0 -191
  380. package/src/core/Scaffold.tsx +0 -281
  381. package/src/core/SideEntityView.tsx +0 -38
  382. package/src/form/components/FormikArrayContainer.tsx +0 -44
  383. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  384. package/src/internal/useBuildCustomizationController.tsx +0 -5
  385. package/src/internal/useLocaleConfig.tsx +0 -18
  386. package/src/types/appcheck.ts +0 -29
  387. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -9,18 +9,13 @@ import { StorageSource } from "./storage";
9
9
  * to do it as the result of a hook.
10
10
  * @group Hooks and utilities
11
11
  */
12
- export type AuthController<UserType extends User = any, ExtraData extends any = any> = {
12
+ export type AuthController<USER extends User = any, ExtraData = any> = {
13
13
 
14
14
  /**
15
15
  * The user currently logged in
16
16
  * The values can be: the user object, null if they skipped login
17
17
  */
18
- user: UserType | null;
19
-
20
- /**
21
- * Roles related to the logged user
22
- */
23
- roles?: Role[];
18
+ user: USER | null;
24
19
 
25
20
  /**
26
21
  * Initial loading flag. It is used not to display the login screen
@@ -38,7 +33,7 @@ export type AuthController<UserType extends User = any, ExtraData extends any =
38
33
  /**
39
34
  * Sign out
40
35
  */
41
- signOut: () => void;
36
+ signOut: () => Promise<void>;
42
37
 
43
38
  /**
44
39
  * Error initializing the authentication
@@ -64,26 +59,27 @@ export type AuthController<UserType extends User = any, ExtraData extends any =
64
59
 
65
60
  setExtra: (extra: ExtraData) => void;
66
61
 
67
- // setUser?: (user: UserType | null) => void;
62
+ setUser?: (user: USER | null) => void;
63
+
64
+ setUserRoles?: (roles: Role[]) => void;
68
65
 
69
- // setRoles?: (roles: Role[]) => void;
70
66
  };
71
67
 
72
68
  /**
73
69
  * Implement this function to allow access to specific users.
74
70
  * @group Hooks and utilities
75
71
  */
76
- export type Authenticator<UserType extends User = User, Controller extends AuthController<UserType> = AuthController<UserType>> = (props: {
72
+ export type Authenticator<USER extends User = User> = (props: {
77
73
 
78
74
  /**
79
75
  * Logged-in user or null
80
76
  */
81
- user: UserType | null;
77
+ user: USER | null;
82
78
 
83
79
  /**
84
80
  * AuthController
85
81
  */
86
- authController: Controller;
82
+ authController: AuthController<USER>;
87
83
 
88
84
  /**
89
85
  * Connector to your database, e.g. your Firestore database
@@ -17,7 +17,7 @@ import { EntityOverrides } from "./entity_overrides";
17
17
  *
18
18
  * @group Models
19
19
  */
20
- export interface EntityCollection<M extends Record<string, any> = any, UserType extends User = any> {
20
+ export interface EntityCollection<M extends Record<string, any> = any, USER extends User = any> {
21
21
 
22
22
  /**
23
23
  * You can set an alias that will be used internally instead of the `path`.
@@ -51,6 +51,12 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
51
51
  */
52
52
  path: string;
53
53
 
54
+ /**
55
+ * Optional database id of this collection. If not specified, the default
56
+ * database id will be used.
57
+ */
58
+ databaseId?: string;
59
+
54
60
  /**
55
61
  * If this collection is a top level navigation entry, you can set this
56
62
  * property to `true` to indicate that this collection is a collection group.
@@ -61,7 +67,8 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
61
67
  * Icon key to use in this collection.
62
68
  * You can use any of the icons in the Material specs:
63
69
  * https://fonts.google.com/icons
64
- * e.g. 'account_tree' or 'person'
70
+ * e.g. 'account_tree' or 'person'.
71
+ * Find all the icons in https://firecms.co/docs/icons
65
72
  */
66
73
  icon?: string;
67
74
 
@@ -77,19 +84,23 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
77
84
  */
78
85
  properties: PropertiesOrBuilders<M>;
79
86
 
87
+ /**
88
+ * Default preview properties displayed when this collection is referenced to.
89
+ */
90
+ previewProperties?: string[];
91
+
80
92
  /**
81
93
  * Title property of the entity. This is the property that will be used
82
94
  * as the title in entity related views and references.
83
95
  * If not specified, the first property simple text property will be used.
84
96
  */
85
- titleProperty?: keyof M,
97
+ titleProperty?: keyof M;
86
98
 
87
99
  /**
88
- * Can this collection be edited by the end user.
89
- * Defaults to `true`.
90
- * Keep in mind that you can also set this prop to individual properties.
100
+ * When editing an entity, you can choose to open the entity in a side dialog
101
+ * or in a full screen dialog. Defaults to `full_screen`.
91
102
  */
92
- editable?: boolean;
103
+ openEntityMode?: "side_panel" | "full_screen";
93
104
 
94
105
  /**
95
106
  * Order in which the properties are displayed.
@@ -101,14 +112,18 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
101
112
  * `hidden` in the property definition, will be ignored.
102
113
  * `propertiesOrder` has precedence over `hidden`.
103
114
  * - For properties use the property key.
104
- * - For additional columns use the column id.
115
+ * - For additional fields use the field key.
105
116
  * - If you have subcollections, you get a column for each subcollection,
106
117
  * with the path (or alias) as the subcollection, prefixed with
107
118
  * `subcollection:`. e.g. `subcollection:orders`.
108
119
  * - If you are using a collection group, you will also have an
109
120
  * additional `collectionGroupParent` column.
121
+ * You can use this prop to hide some properties from the table view.
122
+ * Note that if you set this prop, other ways to hide fields, like
123
+ * `hidden` in the property definition,will be ignored.
124
+ * `propertiesOrder` has precedence over `hidden`.
110
125
  */
111
- propertiesOrder?: Extract<keyof M, string>[];
126
+ propertiesOrder?: (Extract<keyof M, string> | string | `subcollection:${string}` | "collectionGroupParent")[];
112
127
 
113
128
  /**
114
129
  * If enabled, content is loaded in batches. If `false` all entities in the
@@ -128,7 +143,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
128
143
  * Permissions the logged-in user can perform on this collection.
129
144
  * If not specified everything defaults to `true`.
130
145
  */
131
- permissions?: Permissions | PermissionsBuilder<EntityCollection, UserType, M>;
146
+ permissions?: Permissions | PermissionsBuilder<EntityCollection, USER, M>;
132
147
 
133
148
  /**
134
149
  * Are the entities in this collection selectable. Defaults to `true`
@@ -147,7 +162,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
147
162
  * is being created, updated or deleted.
148
163
  * Useful for adding your own logic or blocking the execution of the operation.
149
164
  */
150
- callbacks?: EntityCallbacks<M, UserType>;
165
+ callbacks?: EntityCallbacks<M, USER>;
151
166
 
152
167
  /**
153
168
  * Builder for rendering additional components such as buttons in the
@@ -178,7 +193,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
178
193
  * }
179
194
  * ```
180
195
  */
181
- entityActions?: EntityAction<M, UserType>[];
196
+ entityActions?: EntityAction<M, USER>[];
182
197
 
183
198
  /**
184
199
  * Pass your own selection controller if you want to control selected
@@ -200,6 +215,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
200
215
  * Force a filter in this view. If applied, the rest of the filters will
201
216
  * be disabled. Filters applied with this prop cannot be changed.
202
217
  * e.g. `forceFilter: { age: [">=", 18] }`
218
+ * e.g. `forceFilter: { related_user: ["==", new EntityReference("sdc43dsw2", "users")] }`
203
219
  */
204
220
  forceFilter?: FilterValues<Extract<keyof M, string>>;
205
221
 
@@ -207,6 +223,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
207
223
  * Initial filters applied to the collection this collection is related to.
208
224
  * Defaults to none. Filters applied with this prop can be changed.
209
225
  * e.g. `initialFilter: { age: [">=", 18] }`
226
+ * e.g. `initialFilter: { related_user: ["==", new EntityReference("sdc43dsw2", "users")] }`
210
227
  */
211
228
  initialFilter?: FilterValues<Extract<keyof M, string>>; // setting FilterValues<M> can break defining collections by code
212
229
 
@@ -230,7 +247,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
230
247
  * You can add additional fields to the collection view by implementing
231
248
  * an additional field delegate.
232
249
  */
233
- additionalFields?: AdditionalFieldDelegate<M, UserType>[];
250
+ additionalFields?: AdditionalFieldDelegate<M, USER>[];
234
251
 
235
252
  /**
236
253
  * Default size of the rendered collection
@@ -283,14 +300,49 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
283
300
  /**
284
301
  *
285
302
  */
286
- exportable?: boolean | ExportConfig<UserType>;
303
+ exportable?: boolean | ExportConfig<USER>;
287
304
 
288
305
  /**
289
306
  * User id of the owner of this collection. This is used only by plugins, or if you
290
307
  * are writing custom code
291
308
  */
292
309
  ownerId?: string;
310
+
311
+ /**
312
+ * Overrides for the entity view, like the data source or the storage source.
313
+ */
293
314
  overrides?: EntityOverrides;
315
+
316
+ /**
317
+ * Width of the side dialog (in pixels) when opening an entity in this collection.
318
+ */
319
+ sideDialogWidth?: number | string;
320
+
321
+ /**
322
+ * Can this collection configuration be edited by the end user.
323
+ * Defaults to `true`.
324
+ * Keep in mind that you can also set this prop to individual properties.
325
+ * This prop has only effect if you are using the collection editor.
326
+ */
327
+ editable?: boolean;
328
+
329
+ /**
330
+ * If set to true, the default values of the properties will be applied
331
+ * to the entity every time the entity is updated (not only when created).
332
+ * Defaults to false.
333
+ */
334
+ alwaysApplyDefaultValues?: boolean;
335
+
336
+ /**
337
+ * If set to true, a tab including the JSON representation of the entity will be included.
338
+ */
339
+ includeJsonView?: boolean;
340
+
341
+ /**
342
+ * If set to true, changes to the entity will be saved in a subcollection.
343
+ * This prop has no effect if the history plugin is not enabled
344
+ */
345
+ history?: boolean;
294
346
  }
295
347
 
296
348
  /**
@@ -300,7 +352,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
300
352
  *
301
353
  * @group Models
302
354
  */
303
- export interface CollectionActionsProps<M extends Record<string, any> = any, UserType extends User = User, EC extends EntityCollection<M> = EntityCollection<M>> {
355
+ export interface CollectionActionsProps<M extends Record<string, any> = any, USER extends User = User, EC extends EntityCollection<M> = EntityCollection<M>> {
304
356
  /**
305
357
  * Full collection path of this entity. This is the full path, like
306
358
  * `users/1234/addresses`
@@ -337,7 +389,7 @@ export interface CollectionActionsProps<M extends Record<string, any> = any, Use
337
389
  /**
338
390
  * Context of the app status
339
391
  */
340
- context: FireCMSContext<UserType>;
392
+ context: FireCMSContext<USER>;
341
393
 
342
394
  /**
343
395
  * Count of the entities in this collection
@@ -349,14 +401,13 @@ export interface CollectionActionsProps<M extends Record<string, any> = any, Use
349
401
  /**
350
402
  * Use this controller to retrieve the selected entities or modify them in
351
403
  * an {@link EntityCollection}
352
- * If you want to pass a `SelectionController` to
353
404
  * @group Models
354
405
  */
355
406
  export type SelectionController<M extends Record<string, any> = any> = {
356
407
  selectedEntities: Entity<M>[];
357
408
  setSelectedEntities: Dispatch<SetStateAction<Entity<M>[]>>;
358
409
  isEntitySelected: (entity: Entity<M>) => boolean;
359
- toggleEntitySelection: (entity: Entity<M>) => void;
410
+ toggleEntitySelection: (entity: Entity<M>, newSelectedState?: boolean) => void;
360
411
  }
361
412
 
362
413
  /**
@@ -400,9 +451,9 @@ export type FilterCombination<Key extends string> = Partial<Record<Key, "asc" |
400
451
  */
401
452
  export type CollectionSize = "xs" | "s" | "m" | "l" | "xl";
402
453
 
403
- export type AdditionalFieldDelegateProps<M extends Record<string, any> = any, UserType extends User = User> = {
454
+ export type AdditionalFieldDelegateProps<M extends Record<string, any> = any, USER extends User = User> = {
404
455
  entity: Entity<M>,
405
- context: FireCMSContext<UserType>
456
+ context: FireCMSContext<USER>
406
457
  };
407
458
 
408
459
  /**
@@ -411,7 +462,7 @@ export type AdditionalFieldDelegateProps<M extends Record<string, any> = any, Us
411
462
  * @group Models
412
463
  */
413
464
  export interface AdditionalFieldDelegate<M extends Record<string, any> = any,
414
- UserType extends User = User> {
465
+ USER extends User = User> {
415
466
 
416
467
  /**
417
468
  * ID of this column. You can use this id in the `properties` field of the
@@ -432,7 +483,7 @@ export interface AdditionalFieldDelegate<M extends Record<string, any> = any,
432
483
  /**
433
484
  * Builder for the content of the cell for this column
434
485
  */
435
- Builder?: React.ComponentType<AdditionalFieldDelegateProps<M, UserType>>;
486
+ Builder?: React.ComponentType<AdditionalFieldDelegateProps<M, USER>>;
436
487
 
437
488
  /**
438
489
  * If this column needs to update dynamically based on other properties,
@@ -451,7 +502,10 @@ export interface AdditionalFieldDelegate<M extends Record<string, any> = any,
451
502
  * view.
452
503
  * @param entity
453
504
  */
454
- value?: (props: { entity: Entity<M>, context: FireCMSContext<any> }) => string | number | Promise<string | number> | undefined;
505
+ value?: (props: {
506
+ entity: Entity<M>,
507
+ context: FireCMSContext<any>
508
+ }) => string | number | Promise<string | number> | undefined;
455
509
  }
456
510
 
457
511
  /**
@@ -461,10 +515,39 @@ export interface AdditionalFieldDelegate<M extends Record<string, any> = any,
461
515
  */
462
516
  export type EntityCustomView<M extends Record<string, any> = any> =
463
517
  {
464
- key: string,
465
- name: string,
518
+ /**
519
+ * Key of this custom view.
520
+ */
521
+ key: string;
522
+
523
+ /**
524
+ * Name of this custom view.
525
+ */
526
+ name: string;
527
+
528
+ /**
529
+ * Render this custom view in the tab of the entity view, instead of the name
530
+ */
531
+ tabComponent?: React.ReactNode;
532
+
533
+ /**
534
+ * If set to true, the actions of the entity (save, discard,delete) will be
535
+ * included in the view. By default the actions are located in the right or bottom,
536
+ * based on the screen size. You can force the actions to be located at the bottom
537
+ * by setting this prop to "bottom".
538
+ */
539
+ includeActions?: boolean | "bottom";
540
+
541
+ /**
542
+ * Builder for rendering the custom view
543
+ */
466
544
  Builder?: React.ComponentType<EntityCustomViewParams<M>>;
467
- }
545
+
546
+ /**
547
+ * Position of this tab in the entity view. Defaults to `end`.
548
+ */
549
+ position?: "start" | "end";
550
+ };
468
551
 
469
552
  /**
470
553
  * Parameters passed to the builder in charge of rendering a custom panel for
@@ -523,12 +606,18 @@ export type EntityTableController<M extends Record<string, any> = any> = {
523
606
  filterValues?: FilterValues<Extract<keyof M, string>>;
524
607
  setFilterValues?: (filterValues: FilterValues<Extract<keyof M, string>>) => void;
525
608
  sortBy?: [Extract<keyof M, string>, "asc" | "desc"];
526
- setSortBy?: (sortBy: [Extract<keyof M, string>, "asc" | "desc"]) => void;
609
+ setSortBy?: (sortBy?: [Extract<keyof M, string>, "asc" | "desc"]) => void;
527
610
  searchString?: string;
528
611
  setSearchString?: (searchString?: string) => void;
529
612
  clearFilter?: () => void;
530
613
  itemCount?: number;
531
614
  setItemCount?: (itemCount: number) => void;
615
+ initialScroll?: number;
616
+ onScroll?: (props: {
617
+ scrollDirection: "forward" | "backward",
618
+ scrollOffset: number,
619
+ scrollUpdateWasRequested: boolean
620
+ }) => void;
532
621
  paginationEnabled?: boolean;
533
622
  pageSize?: number;
534
623
  checkFilterCombination?: (filterValues: FilterValues<any>,
@@ -544,5 +633,6 @@ export type SelectedCellProps<M extends Record<string, any>> = {
544
633
  cellRect: DOMRect;
545
634
  width: number;
546
635
  height: number;
547
- entity: Entity<M>;
636
+ entityPath: string;
637
+ entityId: string;
548
638
  };
@@ -24,7 +24,6 @@ export type CustomizationController = {
24
24
  *
25
25
  * You can also define an entity view from the UI.
26
26
  */
27
-
28
27
  entityViews?: EntityCustomView[];
29
28
 
30
29
  /**
@@ -1,6 +1,7 @@
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
  /**
6
7
  * @group Datasource
@@ -8,6 +9,7 @@ import { ResolvedEntityCollection } from "./resolved_entities";
8
9
  export interface FetchEntityProps<M extends Record<string, any> = any> {
9
10
  path: string;
10
11
  entityId: string;
12
+ databaseId?: string;
11
13
  collection?: EntityCollection<M, any>
12
14
  }
13
15
 
@@ -62,12 +64,12 @@ export interface SaveEntityProps<M extends Record<string, any> = any> {
62
64
  */
63
65
  export interface DeleteEntityProps<M extends Record<string, any> = any> {
64
66
  entity: Entity<M>;
67
+ collection?: EntityCollection<M> | ResolvedEntityCollection<M>;
65
68
  }
66
69
 
67
70
  /**
68
- * Implement this interface and pass it to a {@link FireCMS}
69
- * to connect it to your data source.
70
- * A Firestore implementation of this interface can be found in {@link useFirestoreDataSource}
71
+ * Component in charge of communicating with the data source.
72
+ * Usually you won't need to implement this interface, but a {@link DataSourceDelegate} instead.
71
73
  * @group Datasource
72
74
  */
73
75
  export interface DataSource {
@@ -137,6 +139,7 @@ export interface DataSource {
137
139
  fetchEntity<M extends Record<string, any> = any>({
138
140
  path,
139
141
  entityId,
142
+ databaseId,
140
143
  collection
141
144
  }: FetchEntityProps<M>
142
145
  ): Promise<Entity<M> | undefined>;
@@ -181,7 +184,8 @@ export interface DataSource {
181
184
  */
182
185
  deleteEntity<M extends Record<string, any> = any>(
183
186
  {
184
- entity
187
+ entity,
188
+ collection
185
189
  }: DeleteEntityProps<M>
186
190
  ): Promise<void>;
187
191
 
@@ -190,7 +194,7 @@ export interface DataSource {
190
194
  * @param path Collection path
191
195
  * @param name of the property
192
196
  * @param value
193
- * @param property
197
+ * @param collection
194
198
  * @param entityId
195
199
  * @return `true` if there are no other fields besides the given entity
196
200
  */
@@ -198,13 +202,14 @@ export interface DataSource {
198
202
  path: string,
199
203
  name: string,
200
204
  value: any,
201
- entityId?: string
205
+ entityId?: string,
206
+ collection?: EntityCollection
202
207
  ): Promise<boolean>;
203
208
 
204
209
  /**
205
210
  * Generate an id for a new entity
206
211
  */
207
- generateEntityId(path: string): string;
212
+ generateEntityId(path: string, collection: EntityCollection): string;
208
213
 
209
214
  /**
210
215
  * Count the number of entities in a collection
@@ -216,6 +221,19 @@ export interface DataSource {
216
221
  * @param props
217
222
  */
218
223
  isFilterCombinationValid?(props: FilterCombinationValidProps): boolean;
224
+
225
+ /**
226
+ * Called when the user clicks on the search bar in a collection view.
227
+ * Useful for initializing a text search index.
228
+ * @param props
229
+ */
230
+ initTextSearch?: (props: {
231
+ context: FireCMSContext,
232
+ path: string,
233
+ collection: EntityCollection,
234
+ parentCollectionIds?: string[]
235
+ }) => Promise<boolean>;
236
+
219
237
  }
220
238
 
221
239
  export type FilterCombinationValidProps = {
@@ -225,21 +243,24 @@ export type FilterCombinationValidProps = {
225
243
  sortBy?: [string, "asc" | "desc"];
226
244
  };
227
245
 
228
- export type SaveEntityDelegateProps<M extends Record<string, any> = any> = Omit<SaveEntityProps<M>, "collection">;
246
+ export type SaveEntityDelegateProps<M extends Record<string, any> = any> = SaveEntityProps<M>;
229
247
 
230
- export type FetchCollectionDelegateProps<M extends Record<string, any> = any> =
231
- Omit<FetchCollectionProps<M>, "collection">
232
- & {
233
- isCollectionGroup?: boolean
234
- };
248
+ export type FetchCollectionDelegateProps<M extends Record<string, any> = any> = FetchCollectionProps<M>;
235
249
 
236
- export type ListenCollectionDelegateProps<M extends Record<string, any> = any> =
237
- ListenCollectionProps<M>
238
- & {
239
- isCollectionGroup?: boolean;
240
- };
250
+ export type ListenCollectionDelegateProps<M extends Record<string, any> = any> = ListenCollectionProps<M>;
241
251
 
242
252
  export interface DataSourceDelegate {
253
+
254
+ /**
255
+ * Key that identifies this data source delegate
256
+ */
257
+ key: string;
258
+
259
+ /**
260
+ * If the data source has been initialised
261
+ */
262
+ initialised?: boolean;
263
+
243
264
  /**
244
265
  * Fetch data from a collection
245
266
  * @param path
@@ -297,7 +318,7 @@ export interface DataSourceDelegate {
297
318
  fetchEntity<M extends Record<string, any> = any>({
298
319
  path,
299
320
  entityId,
300
- }: Omit<FetchEntityProps<M>, "collection">): Promise<Entity<M> | undefined>;
321
+ }: FetchEntityProps<M>): Promise<Entity<M> | undefined>;
301
322
 
302
323
  /**
303
324
  * Get realtime updates on one entity.
@@ -313,13 +334,13 @@ export interface DataSourceDelegate {
313
334
  entityId,
314
335
  onUpdate,
315
336
  onError
316
- }: Omit<ListenEntityProps<M>, "collection">): () => void;
337
+ }: ListenEntityProps<M>): () => void;
317
338
 
318
339
  /**
319
340
  * Save entity to the specified path
320
341
  * @param path
321
- * @param id
322
- * @param collection
342
+ * @param entityId
343
+ * @param values
323
344
  * @param status
324
345
  */
325
346
  saveEntity<M extends Record<string, any> = any>({
@@ -342,14 +363,15 @@ export interface DataSourceDelegate {
342
363
  * @param name of the property
343
364
  * @param value
344
365
  * @param entityId
366
+ * @param collection
345
367
  * @return `true` if there are no other fields besides the given entity
346
368
  */
347
- checkUniqueField(path: string, name: string, value: any, entityId?: string): Promise<boolean>;
369
+ checkUniqueField(path: string, name: string, value: any, entityId?: string, collection?: EntityCollection): Promise<boolean>;
348
370
 
349
371
  /**
350
372
  * Generate an id for a new entity
351
373
  */
352
- generateEntityId(path: string): string;
374
+ generateEntityId(path: string, collection?: EntityCollection): string;
353
375
 
354
376
  /**
355
377
  * Count the number of entities in a collection
@@ -360,30 +382,26 @@ export interface DataSourceDelegate {
360
382
  * Check if the given filter combination is valid
361
383
  * @param props
362
384
  */
363
- isFilterCombinationValid?(props: Omit<FilterCombinationValidProps, "collection">): boolean;
364
-
365
- /**
366
- * Convert a FireCMS reference to a reference that can be used by the datasource
367
- * @param reference
368
- */
369
- buildReference: (reference: EntityReference) => any,
370
-
371
- /**
372
- * Convert a FireCMS GeoPoint to a GeoPoint that can be used by the datasource
373
- * @param geoPoint
374
- */
375
- buildGeoPoint: (geoPoint: GeoPoint) => any,
385
+ isFilterCombinationValid?(props: Omit<FilterCombinationValidProps, "collection"> & {
386
+ databaseId?: string
387
+ }): boolean;
376
388
 
377
389
  /**
378
390
  * Get the object to generate the current time in the datasource
379
391
  */
380
- currentTime(): any;
381
-
382
- buildDate: (date: Date) => any;
383
-
384
- buildDeleteFieldValue: () => any;
392
+ currentTime?: () => any;
385
393
 
386
394
  delegateToCMSModel: (data: any) => any;
387
395
 
396
+ cmsToDelegateModel: (data: any) => any;
397
+
388
398
  setDateToMidnight: (input?: any) => any;
399
+
400
+ initTextSearch?: (props: {
401
+ context: FireCMSContext,
402
+ path: string,
403
+ databaseId?: string,
404
+ collection: EntityCollection,
405
+ parentCollectionIds?: string[]
406
+ }) => Promise<boolean>;
389
407
  }
@@ -15,19 +15,23 @@ export interface DialogsController {
15
15
  * Open a dialog
16
16
  * @param props
17
17
  */
18
- open: (props: DialogControllerEntryProps) => { closeDialog: () => void };
18
+ open: <T extends object = object>(props: DialogControllerEntryProps<T>) => { closeDialog: () => void };
19
19
  }
20
20
 
21
21
  /**
22
22
  * Props used to open a side dialog
23
23
  * @group Hooks and utilities
24
24
  */
25
- export interface DialogControllerEntryProps {
25
+ export interface DialogControllerEntryProps<T extends object = object> {
26
26
 
27
27
  key: string;
28
28
  /**
29
29
  * The component type that will be rendered
30
30
  */
31
- Component: React.ComponentType<{ open: boolean, closeDialog: () => void }>;
31
+ Component: React.ComponentType<{ open: boolean, closeDialog: () => void } & T>;
32
+ /**
33
+ * Props to pass to the dialog component
34
+ */
35
+ props?: T;
32
36
 
33
37
  }
@@ -8,7 +8,7 @@ export type EntityStatus = "new" | "existing" | "copy";
8
8
  * Representation of an entity fetched from the datasource
9
9
  * @group Models
10
10
  */
11
- export interface Entity<M extends object> {
11
+ export interface Entity<M extends object = any> {
12
12
 
13
13
  /**
14
14
  * ID of the entity
@@ -25,6 +25,8 @@ export interface Entity<M extends object> {
25
25
  * Current values
26
26
  */
27
27
  values: EntityValues<M>;
28
+
29
+ databaseId?: string;
28
30
  }
29
31
 
30
32
  /**
@@ -37,7 +39,7 @@ export type EntityValues<M extends object> = M;
37
39
  /**
38
40
  * Class used to create a reference to an entity in a different path
39
41
  */
40
- export class EntityReference<M extends Record<string, any> = any> {
42
+ export class EntityReference {
41
43
  /**
42
44
  * ID of the entity
43
45
  */
@@ -78,3 +80,11 @@ export class GeoPoint {
78
80
  this.longitude = longitude;
79
81
  }
80
82
  }
83
+
84
+ export class Vector {
85
+ readonly value: number[];
86
+
87
+ constructor(value: number[]) {
88
+ this.value = value;
89
+ }
90
+ }