@firecms/core 3.0.0-beta.1 → 3.0.0-beta.11

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 +6 -7
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +16 -0
  4. package/dist/app/Scaffold.d.ts +30 -0
  5. package/dist/app/index.d.ts +4 -0
  6. package/dist/app/useApp.d.ts +16 -0
  7. package/dist/components/ArrayContainer.d.ts +19 -8
  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 -18
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -5
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +9 -15
  14. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +3 -2
  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 +2 -4
  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 +8 -5
  21. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +13 -4
  22. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  23. package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
  24. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  25. package/dist/components/EntityPreview.d.ts +26 -7
  26. package/dist/components/EntityView.d.ts +11 -0
  27. package/dist/components/ErrorView.d.ts +1 -1
  28. package/dist/components/FieldCaption.d.ts +5 -0
  29. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  30. package/dist/components/HomePage/NavigationCard.d.ts +8 -0
  31. package/dist/components/HomePage/{NavigationCollectionCard.d.ts → NavigationCardBinding.d.ts} +3 -3
  32. package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
  33. package/dist/components/HomePage/index.d.ts +3 -1
  34. package/dist/components/{FieldConfigBadge.d.ts → PropertyConfigBadge.d.ts} +2 -1
  35. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  36. package/dist/components/{ReferenceSelectionInner.d.ts → ReferenceTable/ReferenceSelectionTable.d.ts} +2 -2
  37. package/dist/components/ReferenceWidget.d.ts +6 -4
  38. package/dist/components/{EntityCollectionTable/SimpleEntityCollectionTable.d.ts → SelectableTable/SelectableTable.d.ts} +8 -28
  39. package/dist/components/SelectableTable/SelectableTableContext.d.ts +4 -0
  40. package/dist/components/{EntityCollectionTable → SelectableTable}/filters/ReferenceFilterField.d.ts +2 -1
  41. package/dist/components/VirtualTable/VirtualTableProps.d.ts +16 -13
  42. package/dist/components/VirtualTable/types.d.ts +3 -3
  43. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
  44. package/dist/components/common/index.d.ts +6 -0
  45. package/dist/components/common/table_height.d.ts +5 -0
  46. package/dist/components/{EntityCollectionTable → common}/types.d.ts +11 -6
  47. package/dist/components/{EntityCollectionView → common}/useColumnsIds.d.ts +2 -1
  48. package/dist/components/{EntityCollectionTable → common}/useDataSourceEntityCollectionTableController.d.ts +5 -2
  49. package/dist/components/common/useTableSearchHelper.d.ts +12 -0
  50. package/dist/components/index.d.ts +14 -8
  51. package/dist/contexts/AuthControllerContext.d.ts +1 -1
  52. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
  53. package/dist/core/DefaultDrawer.d.ts +19 -0
  54. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  55. package/dist/core/EntityEditView.d.ts +36 -0
  56. package/dist/core/FireCMS.d.ts +2 -2
  57. package/dist/core/NavigationRoutes.d.ts +3 -3
  58. package/dist/core/index.d.ts +3 -6
  59. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  60. package/dist/form/components/CustomIdField.d.ts +2 -1
  61. package/dist/form/components/ErrorFocus.d.ts +1 -1
  62. package/dist/form/components/FieldHelperText.d.ts +3 -3
  63. package/dist/{components → form/components}/LabelWithIcon.d.ts +1 -1
  64. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  65. package/dist/form/components/StorageItemPreview.d.ts +4 -3
  66. package/dist/form/components/StorageUploadProgress.d.ts +1 -1
  67. package/dist/form/components/index.d.ts +2 -2
  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 -4
  80. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  81. package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -2
  82. package/dist/form/index.d.ts +4 -5
  83. package/dist/form/useClearRestoreValue.d.ts +2 -2
  84. package/dist/form/validation.d.ts +1 -1
  85. package/dist/hooks/data/delete.d.ts +4 -4
  86. package/dist/hooks/data/save.d.ts +4 -5
  87. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  88. package/dist/hooks/data/useDataSource.d.ts +2 -2
  89. package/dist/hooks/data/useEntityFetch.d.ts +3 -3
  90. package/dist/hooks/index.d.ts +5 -1
  91. package/dist/hooks/useAuthController.d.ts +1 -1
  92. package/dist/{core → hooks}/useBuildModeController.d.ts +1 -1
  93. package/dist/hooks/useBuildNavigationController.d.ts +23 -0
  94. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  95. package/dist/hooks/useProjectLog.d.ts +14 -0
  96. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  97. package/dist/hooks/useSnackbarController.d.ts +1 -0
  98. package/dist/hooks/useStorageSource.d.ts +2 -2
  99. package/dist/hooks/useValidateAuthenticator.d.ts +21 -0
  100. package/dist/index.d.ts +1 -0
  101. package/dist/index.es.js +20246 -13863
  102. package/dist/index.es.js.map +1 -1
  103. package/dist/index.umd.js +22772 -588
  104. package/dist/index.umd.js.map +1 -1
  105. package/dist/internal/useBuildDataSource.d.ts +1 -12
  106. package/dist/preview/PropertyPreview.d.ts +1 -1
  107. package/dist/preview/PropertyPreviewProps.d.ts +7 -5
  108. package/dist/preview/components/BooleanPreview.d.ts +5 -1
  109. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  110. package/dist/preview/components/ReferencePreview.d.ts +4 -9
  111. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  112. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  113. package/dist/preview/util.d.ts +3 -3
  114. package/dist/types/analytics.d.ts +1 -1
  115. package/dist/types/auth.d.ts +37 -3
  116. package/dist/types/collections.d.ts +68 -20
  117. package/dist/types/datasource.d.ts +55 -39
  118. package/dist/types/entities.d.ts +7 -1
  119. package/dist/types/entity_actions.d.ts +18 -4
  120. package/dist/types/entity_callbacks.d.ts +17 -17
  121. package/dist/types/entity_overrides.d.ts +6 -0
  122. package/dist/types/export_import.d.ts +4 -4
  123. package/dist/types/fields.d.ts +63 -42
  124. package/dist/types/firecms.d.ts +10 -25
  125. package/dist/types/firecms_context.d.ts +1 -1
  126. package/dist/types/index.d.ts +2 -1
  127. package/dist/types/navigation.d.ts +18 -16
  128. package/dist/types/permissions.d.ts +8 -4
  129. package/dist/types/plugins.d.ts +39 -39
  130. package/dist/types/properties.d.ts +36 -23
  131. package/dist/types/property_config.d.ts +2 -4
  132. package/dist/types/roles.d.ts +31 -0
  133. package/dist/types/side_dialogs_controller.d.ts +10 -0
  134. package/dist/types/storage.d.ts +86 -3
  135. package/dist/types/user.d.ts +6 -0
  136. package/dist/util/builders.d.ts +2 -2
  137. package/dist/util/collections.d.ts +9 -1
  138. package/dist/util/entities.d.ts +3 -3
  139. package/dist/util/icon_list.d.ts +5 -1
  140. package/dist/util/icon_synonyms.d.ts +1 -98
  141. package/dist/util/icons.d.ts +13 -4
  142. package/dist/util/index.d.ts +3 -1
  143. package/dist/util/navigation_utils.d.ts +2 -2
  144. package/dist/util/objects.d.ts +2 -1
  145. package/dist/util/permissions.d.ts +4 -4
  146. package/dist/util/plurals.d.ts +0 -2
  147. package/dist/util/property_utils.d.ts +3 -3
  148. package/dist/util/references.d.ts +4 -2
  149. package/dist/util/resolutions.d.ts +31 -17
  150. package/dist/util/storage.d.ts +23 -2
  151. package/dist/util/strings.d.ts +1 -1
  152. package/dist/util/useDebouncedCallback.d.ts +1 -0
  153. package/dist/util/useStorageUploadController.d.ts +3 -3
  154. package/dist/util/useTraceUpdate.d.ts +1 -0
  155. package/package.json +70 -47
  156. package/src/app/AppBar.tsx +18 -0
  157. package/src/app/Drawer.tsx +24 -0
  158. package/src/app/Scaffold.tsx +243 -0
  159. package/src/app/index.ts +4 -0
  160. package/src/app/useApp.tsx +32 -0
  161. package/src/components/ArrayContainer.tsx +122 -90
  162. package/src/components/CircularProgressCenter.tsx +2 -2
  163. package/src/components/ClearFilterSortButton.tsx +41 -0
  164. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +3 -3
  165. package/src/components/DeleteEntityDialog.tsx +13 -22
  166. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +51 -59
  167. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +258 -453
  168. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +13 -14
  169. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +60 -52
  170. package/src/components/EntityCollectionTable/column_utils.tsx +4 -4
  171. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +40 -33
  172. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +22 -20
  173. package/src/components/EntityCollectionTable/index.tsx +1 -9
  174. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +44 -46
  175. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
  176. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  177. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +191 -178
  178. package/src/components/EntityCollectionView/EntityCollectionView.tsx +187 -175
  179. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +5 -6
  180. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  181. package/src/components/EntityCollectionView/useSelectionController.tsx +43 -0
  182. package/src/components/EntityCollectionView/utils.ts +19 -0
  183. package/src/components/EntityPreview.tsx +218 -72
  184. package/src/components/EntityView.tsx +84 -0
  185. package/src/components/ErrorView.tsx +4 -4
  186. package/src/components/FieldCaption.tsx +14 -0
  187. package/src/components/HomePage/DefaultHomePage.tsx +39 -28
  188. package/src/components/HomePage/FavouritesView.tsx +6 -11
  189. package/src/components/HomePage/NavigationCard.tsx +69 -0
  190. package/src/components/HomePage/NavigationCardBinding.tsx +111 -0
  191. package/src/components/HomePage/NavigationGroup.tsx +2 -2
  192. package/src/components/HomePage/SmallNavigationCard.tsx +44 -0
  193. package/src/components/HomePage/index.tsx +3 -1
  194. package/src/components/PropertyConfigBadge.tsx +23 -0
  195. package/src/components/PropertyIdCopyTooltip.tsx +48 -0
  196. package/src/components/{ReferenceSelectionInner.tsx → ReferenceTable/ReferenceSelectionTable.tsx} +38 -24
  197. package/src/components/ReferenceWidget.tsx +26 -16
  198. package/src/components/SearchIconsView.tsx +10 -7
  199. package/src/components/{EntityCollectionTable/SimpleEntityCollectionTable.tsx → SelectableTable/SelectableTable.tsx} +46 -84
  200. package/src/components/SelectableTable/SelectableTableContext.tsx +6 -0
  201. package/src/components/{EntityCollectionTable → SelectableTable}/filters/BooleanFilterField.tsx +2 -3
  202. package/src/components/{EntityCollectionTable → SelectableTable}/filters/DateTimeFilterField.tsx +25 -8
  203. package/src/components/{EntityCollectionTable → SelectableTable}/filters/ReferenceFilterField.tsx +40 -24
  204. package/src/components/{EntityCollectionTable → SelectableTable}/filters/StringNumberFilterField.tsx +92 -24
  205. package/src/components/VirtualTable/VirtualTable.tsx +77 -46
  206. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  207. package/src/components/VirtualTable/VirtualTableHeader.tsx +19 -13
  208. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  209. package/src/components/VirtualTable/VirtualTableProps.tsx +19 -15
  210. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  211. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  212. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +4 -3
  213. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +4 -3
  214. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  215. package/src/components/VirtualTable/types.tsx +2 -3
  216. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +17 -9
  217. package/src/components/common/index.ts +6 -0
  218. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  219. package/src/components/{EntityCollectionTable → common}/types.tsx +9 -6
  220. package/src/components/{EntityCollectionView → common}/useColumnsIds.tsx +23 -2
  221. package/src/components/{EntityCollectionTable → common}/useDataSourceEntityCollectionTableController.tsx +27 -16
  222. package/src/components/common/useTableSearchHelper.ts +88 -0
  223. package/src/components/index.tsx +15 -8
  224. package/src/contexts/AuthControllerContext.tsx +1 -1
  225. package/src/contexts/DialogsProvider.tsx +2 -2
  226. package/src/contexts/SnackbarProvider.tsx +2 -0
  227. package/src/core/DefaultAppBar.tsx +177 -0
  228. package/src/core/DefaultDrawer.tsx +185 -0
  229. package/src/core/DrawerNavigationItem.tsx +66 -0
  230. package/src/core/EntityEditView.tsx +1125 -0
  231. package/src/core/EntitySidePanel.tsx +9 -8
  232. package/src/core/FireCMS.tsx +71 -63
  233. package/src/core/NavigationRoutes.tsx +25 -17
  234. package/src/core/SideDialogs.tsx +2 -1
  235. package/src/core/field_configs.tsx +22 -23
  236. package/src/core/index.tsx +3 -6
  237. package/src/form/PropertyFieldBinding.tsx +79 -45
  238. package/src/form/components/CustomIdField.tsx +53 -36
  239. package/src/form/components/ErrorFocus.tsx +3 -3
  240. package/src/form/components/FieldHelperText.tsx +4 -4
  241. package/src/form/components/LabelWithIcon.tsx +41 -0
  242. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  243. package/src/form/components/StorageItemPreview.tsx +23 -11
  244. package/src/form/components/StorageUploadProgress.tsx +8 -8
  245. package/src/form/components/index.tsx +2 -2
  246. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +30 -19
  247. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +52 -46
  248. package/src/form/field_bindings/BlockFieldBinding.tsx +67 -47
  249. package/src/form/field_bindings/DateTimeFieldBinding.tsx +20 -17
  250. package/src/form/field_bindings/KeyValueFieldBinding.tsx +76 -67
  251. package/src/form/field_bindings/MapFieldBinding.tsx +81 -60
  252. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +150 -0
  253. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -22
  254. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +12 -18
  255. package/src/form/field_bindings/ReferenceFieldBinding.tsx +46 -34
  256. package/src/form/field_bindings/RepeatFieldBinding.tsx +55 -35
  257. package/src/form/field_bindings/SelectFieldBinding.tsx +24 -17
  258. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +42 -43
  259. package/src/form/field_bindings/SwitchFieldBinding.tsx +30 -27
  260. package/src/form/field_bindings/TextFieldBinding.tsx +34 -30
  261. package/src/form/index.tsx +5 -9
  262. package/src/form/useClearRestoreValue.tsx +2 -2
  263. package/src/form/validation.ts +4 -21
  264. package/src/hooks/data/delete.ts +7 -6
  265. package/src/hooks/data/save.ts +12 -8
  266. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  267. package/src/hooks/data/useDataSource.tsx +15 -2
  268. package/src/hooks/data/useEntityFetch.tsx +6 -6
  269. package/src/hooks/index.tsx +7 -1
  270. package/src/hooks/useAuthController.tsx +1 -1
  271. package/src/{core → hooks}/useBuildLocalConfigurationPersistence.tsx +8 -10
  272. package/src/{core → hooks}/useBuildModeController.tsx +12 -6
  273. package/src/{internal → hooks}/useBuildNavigationController.tsx +245 -101
  274. package/src/hooks/useFireCMSContext.tsx +53 -5
  275. package/src/hooks/useLargeLayout.tsx +10 -7
  276. package/src/hooks/useProjectLog.tsx +63 -0
  277. package/src/hooks/useReferenceDialog.tsx +3 -3
  278. package/src/hooks/useResolvedNavigationFrom.tsx +6 -6
  279. package/src/hooks/useSnackbarController.tsx +1 -2
  280. package/src/hooks/useStorageSource.tsx +7 -2
  281. package/src/hooks/useValidateAuthenticator.tsx +115 -0
  282. package/src/index.ts +1 -0
  283. package/src/internal/useBuildDataSource.ts +80 -85
  284. package/src/internal/useBuildSideDialogsController.tsx +1 -0
  285. package/src/internal/useBuildSideEntityController.tsx +103 -23
  286. package/src/internal/useUnsavedChangesDialog.tsx +5 -3
  287. package/src/preview/PropertyPreview.tsx +15 -22
  288. package/src/preview/PropertyPreviewProps.tsx +6 -10
  289. package/src/preview/components/BooleanPreview.tsx +19 -4
  290. package/src/preview/components/EmptyValue.tsx +1 -1
  291. package/src/preview/components/EnumValuesChip.tsx +2 -2
  292. package/src/preview/components/ImagePreview.tsx +25 -36
  293. package/src/preview/components/ReferencePreview.tsx +73 -176
  294. package/src/preview/components/StorageThumbnail.tsx +5 -1
  295. package/src/preview/components/UrlComponentPreview.tsx +44 -11
  296. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
  297. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
  298. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
  299. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
  300. package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
  301. package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
  302. package/src/preview/property_previews/MapPropertyPreview.tsx +9 -9
  303. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +12 -12
  304. package/src/preview/property_previews/StringPropertyPreview.tsx +8 -7
  305. package/src/preview/util.ts +10 -10
  306. package/src/types/analytics.ts +1 -0
  307. package/src/types/auth.tsx +48 -3
  308. package/src/types/collections.ts +77 -20
  309. package/src/types/customization_controller.tsx +0 -1
  310. package/src/types/datasource.ts +64 -47
  311. package/src/types/entities.ts +15 -1
  312. package/src/types/entity_actions.tsx +21 -4
  313. package/src/types/entity_callbacks.ts +20 -19
  314. package/src/types/entity_overrides.tsx +7 -0
  315. package/src/types/export_import.ts +4 -4
  316. package/src/types/fields.tsx +69 -45
  317. package/src/types/firecms.tsx +11 -28
  318. package/src/types/firecms_context.tsx +1 -1
  319. package/src/types/index.ts +2 -1
  320. package/src/types/navigation.ts +20 -19
  321. package/src/types/permissions.ts +10 -5
  322. package/src/types/plugins.tsx +46 -48
  323. package/src/types/properties.ts +42 -24
  324. package/src/types/property_config.tsx +2 -4
  325. package/src/types/roles.ts +41 -0
  326. package/src/types/side_dialogs_controller.tsx +13 -0
  327. package/src/types/side_entity_controller.tsx +1 -0
  328. package/src/types/storage.ts +94 -3
  329. package/src/types/user.ts +9 -0
  330. package/src/util/builders.ts +6 -6
  331. package/src/util/collections.ts +22 -0
  332. package/src/util/entities.ts +9 -6
  333. package/src/util/enums.ts +1 -1
  334. package/src/util/icon_list.ts +16 -10
  335. package/src/util/icon_synonyms.ts +3 -100
  336. package/src/util/icons.tsx +26 -8
  337. package/src/util/index.ts +3 -1
  338. package/src/util/make_properties_editable.ts +13 -5
  339. package/src/util/navigation_utils.ts +6 -6
  340. package/src/util/objects.ts +45 -28
  341. package/src/util/permissions.ts +20 -16
  342. package/src/util/plurals.ts +0 -2
  343. package/src/util/property_utils.tsx +11 -4
  344. package/src/util/references.ts +45 -5
  345. package/src/util/resolutions.ts +80 -47
  346. package/src/util/storage.ts +79 -21
  347. package/src/util/strings.ts +4 -3
  348. package/src/util/{useDebounce.ts → useDebouncedCallback.ts} +1 -1
  349. package/src/util/useStorageUploadController.tsx +34 -8
  350. package/src/util/useTraceUpdate.tsx +2 -1
  351. package/dist/components/VirtualTable/common.d.ts +0 -2
  352. package/dist/core/Drawer.d.ts +0 -23
  353. package/dist/core/Scaffold.d.ts +0 -52
  354. package/dist/form/EntityForm.d.ts +0 -75
  355. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  356. package/dist/form/components/SubmitListener.d.ts +0 -1
  357. package/dist/form/components/SwitchControl.d.ts +0 -8
  358. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  359. package/dist/hooks/useVerifyLicense.d.ts +0 -0
  360. package/dist/internal/EntityView.d.ts +0 -22
  361. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  362. package/dist/internal/useBuildNavigationController.d.ts +0 -14
  363. package/dist/internal/useLocaleConfig.d.ts +0 -1
  364. package/dist/types/appcheck.d.ts +0 -26
  365. package/dist/util/useDebounce.d.ts +0 -1
  366. package/src/components/FieldConfigBadge.tsx +0 -17
  367. package/src/components/FireCMSAppBar.tsx +0 -157
  368. package/src/components/HomePage/NavigationCollectionCard.tsx +0 -146
  369. package/src/components/LabelWithIcon.tsx +0 -33
  370. package/src/core/Drawer.tsx +0 -162
  371. package/src/core/Scaffold.tsx +0 -278
  372. package/src/form/EntityForm.tsx +0 -657
  373. package/src/form/components/FormikArrayContainer.tsx +0 -44
  374. package/src/form/components/SubmitListener.tsx +0 -32
  375. package/src/form/components/SwitchControl.tsx +0 -39
  376. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -696
  377. package/src/hooks/useVerifyLicense.tsx +0 -1
  378. package/src/internal/EntityView.tsx +0 -578
  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/dist/components/{EntityCollectionTable → SelectableTable}/filters/BooleanFilterField.d.ts +0 -0
  383. /package/dist/components/{EntityCollectionTable → SelectableTable}/filters/DateTimeFilterField.d.ts +0 -0
  384. /package/dist/components/{EntityCollectionTable → SelectableTable}/filters/StringNumberFilterField.d.ts +0 -0
  385. /package/dist/components/{EntityCollectionTable → common}/useDebouncedData.d.ts +0 -0
  386. /package/dist/{core → hooks}/useBuildLocalConfigurationPersistence.d.ts +0 -0
  387. /package/src/components/{EntityCollectionTable → common}/useDebouncedData.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,14 +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
- * @group Firestore
21
- */
22
- export declare function cmsToDelegateModel(data: any, buildReference: (reference: EntityReference) => any, buildGeoPoint: (geoPoint: GeoPoint) => any, buildDate: (date: Date) => any, buildDelete: () => any): any;
@@ -4,4 +4,4 @@ import { PropertyPreviewProps } from "./PropertyPreviewProps";
4
4
  /**
5
5
  * @group Preview components
6
6
  */
7
- export declare const PropertyPreview: React.MemoExoticComponent<(<T extends CMSType>(props: PropertyPreviewProps<T, any, Record<string, any>>) => any)>;
7
+ export declare const PropertyPreview: React.MemoExoticComponent<(<T extends CMSType>(props: PropertyPreviewProps<T>) => any)>;
@@ -2,11 +2,11 @@ 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
  */
9
- export interface PropertyPreviewProps<T extends CMSType = any, CustomProps = any, M extends Record<string, any> = Record<string, any>> {
9
+ export interface PropertyPreviewProps<T extends CMSType = any, CustomProps = any> {
10
10
  /**
11
11
  * Name of the property
12
12
  */
@@ -19,9 +19,6 @@ export interface PropertyPreviewProps<T extends CMSType = any, CustomProps = any
19
19
  * Property this display is related to
20
20
  */
21
21
  property: Property<T> | ResolvedProperty<T>;
22
- /**
23
- * Click handler
24
- */
25
22
  /**
26
23
  * Desired size of the preview, depending on the context.
27
24
  */
@@ -40,4 +37,9 @@ export interface PropertyPreviewProps<T extends CMSType = any, CustomProps = any
40
37
  * Additional properties set by the developer
41
38
  */
42
39
  customProps?: CustomProps;
40
+ /**
41
+ * If the preview should be interactive or not.
42
+ * This applies only to videos.
43
+ */
44
+ interactive?: boolean;
43
45
  }
@@ -1,7 +1,11 @@
1
1
  import React from "react";
2
+ import { PreviewSize } from "../PropertyPreviewProps";
3
+ import { Property } from "../../types";
2
4
  /**
3
5
  * @group Preview components
4
6
  */
5
- export declare function BooleanPreview({ value }: {
7
+ export declare function BooleanPreview({ value, size, property }: {
6
8
  value: boolean;
9
+ size: PreviewSize;
10
+ property: Property;
7
11
  }): React.ReactElement;
@@ -3,7 +3,7 @@ import { EnumValues } from "../../types";
3
3
  export interface EnumValuesChipProps {
4
4
  enumValues?: EnumValues;
5
5
  enumKey: string | number;
6
- size: "small" | "medium";
6
+ size: "small" | "medium" | "large";
7
7
  className?: string;
8
8
  children?: React.ReactNode;
9
9
  }
@@ -7,16 +7,11 @@ export type ReferencePreviewProps = {
7
7
  size: PreviewSize;
8
8
  previewProperties?: string[];
9
9
  onClick?: (e: React.SyntheticEvent) => void;
10
- onHover?: boolean;
11
- allowEntityNavigation?: boolean;
10
+ hover?: 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 function ReferencePreviewContainer({ children, onHover, size, onClick }: {
18
- children: React.ReactNode;
19
- onHover?: boolean;
20
- size: PreviewSize;
21
- onClick?: (e: React.SyntheticEvent) => void;
22
- }): import("react/jsx-runtime").JSX.Element;
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;
@@ -1 +1 @@
1
- export type CMSAnalyticsEvent = "entity_click" | "entity_click_from_reference" | "reference_selection_clear" | "reference_selection_toggle" | "reference_selected_single" | "reference_selection_new_entity" | "edit_entity_clicked" | "entity_edited" | "new_entity_click" | "new_entity_saved" | "copy_entity_click" | "entity_copied" | "single_delete_dialog_open" | "multiple_delete_dialog_open" | "single_entity_deleted" | "multiple_entities_deleted" | "drawer_navigate_to_home" | "drawer_navigate_to_collection" | "drawer_navigate_to_view" | "home_navigate_to_collection" | "home_favorite_navigate_to_collection" | "home_navigate_to_view" | "home_favorite_navigate_to_view" | "collection_inline_editing" | "unmapped_event";
1
+ export type CMSAnalyticsEvent = "entity_click" | "entity_click_from_reference" | "reference_selection_clear" | "reference_selection_toggle" | "reference_selected_single" | "reference_selection_new_entity" | "edit_entity_clicked" | "entity_edited" | "new_entity_click" | "new_entity_saved" | "copy_entity_click" | "entity_copied" | "single_delete_dialog_open" | "multiple_delete_dialog_open" | "single_entity_deleted" | "multiple_entities_deleted" | "drawer_navigate_to_home" | "drawer_navigate_to_collection" | "drawer_navigate_to_view" | "home_navigate_to_collection" | "home_favorite_navigate_to_collection" | "home_navigate_to_view" | "home_navigate_to_admin_view" | "home_favorite_navigate_to_view" | "collection_inline_editing" | "unmapped_event";
@@ -1,26 +1,34 @@
1
1
  import { User } from "./user";
2
+ import { Role } from "./roles";
3
+ import { DataSourceDelegate } from "./datasource";
4
+ import { StorageSource } from "./storage";
2
5
  /**
3
6
  * Controller for retrieving the logged user or performing auth related operations.
4
7
  * Note that if you are implementing your AuthController, you probably will want
5
8
  * to do it as the result of a hook.
6
9
  * @group Hooks and utilities
7
10
  */
8
- export type AuthController<UserType extends User = User> = {
11
+ export type AuthController<USER extends User = any, ExtraData = any> = {
9
12
  /**
10
13
  * The user currently logged in
11
14
  * The values can be: the user object, null if they skipped login
12
15
  */
13
- user: UserType | null;
16
+ user: USER | null;
14
17
  /**
15
18
  * Initial loading flag. It is used not to display the login screen
16
19
  * when the app first loads, and it has not been checked whether the user
17
20
  * is logged in or not.
18
21
  */
19
22
  initialLoading?: boolean;
23
+ /**
24
+ * Loading flag. It is used to display a loading screen when the user is
25
+ * logging in or out.
26
+ */
27
+ authLoading: boolean;
20
28
  /**
21
29
  * Sign out
22
30
  */
23
- signOut: () => void;
31
+ signOut: () => Promise<void>;
24
32
  /**
25
33
  * Error initializing the authentication
26
34
  */
@@ -37,4 +45,30 @@ export type AuthController<UserType extends User = User> = {
37
45
  * Has the user skipped the login process
38
46
  */
39
47
  loginSkipped: boolean;
48
+ extra: ExtraData;
49
+ setExtra: (extra: ExtraData) => void;
50
+ setUser?: (user: USER | null) => void;
51
+ setUserRoles?: (roles: Role[]) => void;
40
52
  };
53
+ /**
54
+ * Implement this function to allow access to specific users.
55
+ * @group Hooks and utilities
56
+ */
57
+ export type Authenticator<USER extends User = User> = (props: {
58
+ /**
59
+ * Logged-in user or null
60
+ */
61
+ user: USER | null;
62
+ /**
63
+ * AuthController
64
+ */
65
+ authController: AuthController<USER>;
66
+ /**
67
+ * Connector to your database, e.g. your Firestore database
68
+ */
69
+ dataSourceDelegate: DataSourceDelegate;
70
+ /**
71
+ * Used storage implementation
72
+ */
73
+ storageSource: StorageSource;
74
+ }) => boolean | Promise<boolean>;
@@ -8,6 +8,7 @@ import { EnumValues, PropertiesOrBuilders } from "./properties";
8
8
  import { FormContext } from "./fields";
9
9
  import { EntityAction } from "./entity_actions";
10
10
  import { ExportConfig } from "./export_import";
11
+ import { EntityOverrides } from "./entity_overrides";
11
12
  /**
12
13
  * This interface represents a view that includes a collection of entities.
13
14
  * It can be in the root level of the configuration, defining the main
@@ -15,7 +16,7 @@ import { ExportConfig } from "./export_import";
15
16
  *
16
17
  * @group Models
17
18
  */
18
- export interface EntityCollection<M extends Record<string, any> = any, UserType extends User = User> {
19
+ export interface EntityCollection<M extends Record<string, any> = any, USER extends User = any> {
19
20
  /**
20
21
  * You can set an alias that will be used internally instead of the `path`.
21
22
  * The `alias` value will be used to determine the URL of the collection,
@@ -43,6 +44,11 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
43
44
  * This path also determines the URL in FireCMS, unless an alias is specified
44
45
  */
45
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;
46
52
  /**
47
53
  * If this collection is a top level navigation entry, you can set this
48
54
  * property to `true` to indicate that this collection is a collection group.
@@ -52,7 +58,8 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
52
58
  * Icon key to use in this collection.
53
59
  * You can use any of the icons in the Material specs:
54
60
  * https://fonts.google.com/icons
55
- * e.g. 'account_tree' or 'person'
61
+ * e.g. 'account_tree' or 'person'.
62
+ * Find all the icons in https://firecms.co/docs/icons
56
63
  */
57
64
  icon?: string;
58
65
  /**
@@ -65,6 +72,12 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
65
72
  * Set of properties that compose an entity
66
73
  */
67
74
  properties: PropertiesOrBuilders<M>;
75
+ /**
76
+ * Title property of the entity. This is the property that will be used
77
+ * as the title in entity related views and references.
78
+ * If not specified, the first property simple text property will be used.
79
+ */
80
+ titleProperty?: keyof M;
68
81
  /**
69
82
  * Can this collection be edited by the end user.
70
83
  * Defaults to `true`.
@@ -87,8 +100,12 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
87
100
  * `subcollection:`. e.g. `subcollection:orders`.
88
101
  * - If you are using a collection group, you will also have an
89
102
  * additional `collectionGroupParent` column.
103
+ * You can use this prop to hide some properties from the table view.
104
+ * Note that if you set this prop, other ways to hide fields, like
105
+ * `hidden` in the property definition,will be ignored.
106
+ * `propertiesOrder` has precedence over `hidden`.
90
107
  */
91
- propertiesOrder?: Extract<keyof M, string>[];
108
+ propertiesOrder?: (Extract<keyof M, string> | `subcollection:${string}`)[];
92
109
  /**
93
110
  * If enabled, content is loaded in batches. If `false` all entities in the
94
111
  * collection are loaded.
@@ -105,7 +122,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
105
122
  * Permissions the logged-in user can perform on this collection.
106
123
  * If not specified everything defaults to `true`.
107
124
  */
108
- permissions?: Permissions | PermissionsBuilder<EntityCollection, UserType, M>;
125
+ permissions?: Permissions | PermissionsBuilder<EntityCollection, USER, M>;
109
126
  /**
110
127
  * Are the entities in this collection selectable. Defaults to `true`
111
128
  */
@@ -121,7 +138,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
121
138
  * is being created, updated or deleted.
122
139
  * Useful for adding your own logic or blocking the execution of the operation.
123
140
  */
124
- callbacks?: EntityCallbacks<M>;
141
+ callbacks?: EntityCallbacks<M, USER>;
125
142
  /**
126
143
  * Builder for rendering additional components such as buttons in the
127
144
  * collection toolbar
@@ -150,7 +167,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
150
167
  * }
151
168
  * ```
152
169
  */
153
- entityActions?: EntityAction<M, UserType>[];
170
+ entityActions?: EntityAction<M, USER>[];
154
171
  /**
155
172
  * Pass your own selection controller if you want to control selected
156
173
  * entities externally.
@@ -195,7 +212,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
195
212
  * You can add additional fields to the collection view by implementing
196
213
  * an additional field delegate.
197
214
  */
198
- additionalFields?: AdditionalFieldDelegate<M, UserType>[];
215
+ additionalFields?: AdditionalFieldDelegate<M, USER>[];
199
216
  /**
200
217
  * Default size of the rendered collection
201
218
  */
@@ -240,7 +257,24 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
240
257
  /**
241
258
  *
242
259
  */
243
- exportable?: boolean | ExportConfig<UserType>;
260
+ exportable?: boolean | ExportConfig<USER>;
261
+ /**
262
+ * User id of the owner of this collection. This is used only by plugins, or if you
263
+ * are writing custom code
264
+ */
265
+ ownerId?: string;
266
+ /**
267
+ * Overrides for the entity view, like the data source or the storage source.
268
+ */
269
+ overrides?: EntityOverrides;
270
+ /**
271
+ * Width of the side dialog (in pixels) when opening an entity in this collection.
272
+ */
273
+ sideDialogWidth?: number | string;
274
+ /**
275
+ * Default preview properties displayed when this collection is referenced to.
276
+ */
277
+ previewProperties?: string[];
244
278
  }
245
279
  /**
246
280
  * Parameter passed to the `Actions` prop in the collection configuration.
@@ -249,7 +283,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
249
283
  *
250
284
  * @group Models
251
285
  */
252
- export interface CollectionActionsProps<M extends Record<string, any> = any, UserType extends User = User, EC extends EntityCollection<M> = EntityCollection<M>> {
286
+ export interface CollectionActionsProps<M extends Record<string, any> = any, USER extends User = User, EC extends EntityCollection<M> = EntityCollection<M>> {
253
287
  /**
254
288
  * Full collection path of this entity. This is the full path, like
255
289
  * `users/1234/addresses`
@@ -280,7 +314,7 @@ export interface CollectionActionsProps<M extends Record<string, any> = any, Use
280
314
  /**
281
315
  * Context of the app status
282
316
  */
283
- context: FireCMSContext<UserType>;
317
+ context: FireCMSContext<USER>;
284
318
  /**
285
319
  * Count of the entities in this collection
286
320
  */
@@ -289,18 +323,17 @@ export interface CollectionActionsProps<M extends Record<string, any> = any, Use
289
323
  /**
290
324
  * Use this controller to retrieve the selected entities or modify them in
291
325
  * an {@link EntityCollection}
292
- * If you want to pass a `SelectionController` to
293
326
  * @group Models
294
327
  */
295
328
  export type SelectionController<M extends Record<string, any> = any> = {
296
329
  selectedEntities: Entity<M>[];
297
330
  setSelectedEntities: Dispatch<SetStateAction<Entity<M>[]>>;
298
331
  isEntitySelected: (entity: Entity<M>) => boolean;
299
- toggleEntitySelection: (entity: Entity<M>) => void;
332
+ toggleEntitySelection: (entity: Entity<M>, newSelectedState?: boolean) => void;
300
333
  };
301
334
  /**
302
335
  * Filter conditions in a `Query.where()` clause are specified using the
303
- * strings '<', '<=', '==', '>=', '>', 'array-contains', 'in', and 'array-contains-any'.
336
+ * strings `<`, `<=`, `==`, `>=`, `>`, `array-contains`, `in`, and `array-contains-any`.
304
337
  * @group Models
305
338
  */
306
339
  export type WhereFilterOp = "<" | "<=" | "==" | "!=" | ">=" | ">" | "array-contains" | "in" | "not-in" | "array-contains-any";
@@ -324,16 +357,16 @@ export type FilterCombination<Key extends string> = Partial<Record<Key, "asc" |
324
357
  * @group Models
325
358
  */
326
359
  export type CollectionSize = "xs" | "s" | "m" | "l" | "xl";
327
- export type AdditionalFieldDelegateProps<M extends Record<string, any> = any, UserType extends User = User> = {
360
+ export type AdditionalFieldDelegateProps<M extends Record<string, any> = any, USER extends User = User> = {
328
361
  entity: Entity<M>;
329
- context: FireCMSContext<UserType>;
362
+ context: FireCMSContext<USER>;
330
363
  };
331
364
  /**
332
365
  * Use this interface for adding additional fields to entity collection views.
333
366
  * If you need to do some async loading you can use {@link AsyncPreviewComponent}
334
367
  * @group Models
335
368
  */
336
- export interface AdditionalFieldDelegate<M extends Record<string, any> = any, UserType extends User = User> {
369
+ export interface AdditionalFieldDelegate<M extends Record<string, any> = any, USER extends User = User> {
337
370
  /**
338
371
  * ID of this column. You can use this id in the `properties` field of the
339
372
  * collection in any order you want
@@ -350,7 +383,7 @@ export interface AdditionalFieldDelegate<M extends Record<string, any> = any, Us
350
383
  /**
351
384
  * Builder for the content of the cell for this column
352
385
  */
353
- Builder?: React.ComponentType<AdditionalFieldDelegateProps<M, UserType>>;
386
+ Builder?: React.ComponentType<AdditionalFieldDelegateProps<M, USER>>;
354
387
  /**
355
388
  * If this column needs to update dynamically based on other properties,
356
389
  * you can define an array of keys as strings with the
@@ -369,7 +402,7 @@ export interface AdditionalFieldDelegate<M extends Record<string, any> = any, Us
369
402
  */
370
403
  value?: (props: {
371
404
  entity: Entity<M>;
372
- context: FireCMSContext;
405
+ context: FireCMSContext<any>;
373
406
  }) => string | number | Promise<string | number> | undefined;
374
407
  }
375
408
  /**
@@ -378,8 +411,22 @@ export interface AdditionalFieldDelegate<M extends Record<string, any> = any, Us
378
411
  * @group Models
379
412
  */
380
413
  export type EntityCustomView<M extends Record<string, any> = any> = {
414
+ /**
415
+ * Key of this custom view.
416
+ */
381
417
  key: string;
418
+ /**
419
+ * Name of this custom view.
420
+ */
382
421
  name: string;
422
+ /**
423
+ * If set to true, the actions of the entity will be included in the
424
+ * bottom of the panel (save buttons, delete buttons, etc.)
425
+ */
426
+ includeActions?: boolean;
427
+ /**
428
+ * Builder for rendering the custom view
429
+ */
383
430
  Builder?: React.ComponentType<EntityCustomViewParams<M>>;
384
431
  };
385
432
  /**
@@ -432,7 +479,7 @@ export type EntityTableController<M extends Record<string, any> = any> = {
432
479
  filterValues?: FilterValues<Extract<keyof M, string>>;
433
480
  setFilterValues?: (filterValues: FilterValues<Extract<keyof M, string>>) => void;
434
481
  sortBy?: [Extract<keyof M, string>, "asc" | "desc"];
435
- setSortBy?: (sortBy: [Extract<keyof M, string>, "asc" | "desc"]) => void;
482
+ setSortBy?: (sortBy?: [Extract<keyof M, string>, "asc" | "desc"]) => void;
436
483
  searchString?: string;
437
484
  setSearchString?: (searchString?: string) => void;
438
485
  clearFilter?: () => void;
@@ -450,5 +497,6 @@ export type SelectedCellProps<M extends Record<string, any>> = {
450
497
  cellRect: DOMRect;
451
498
  width: number;
452
499
  height: number;
453
- entity: Entity<M>;
500
+ entityPath: string;
501
+ entityId: string;
454
502
  };
@@ -1,18 +1,20 @@
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;
10
- collection?: EntityCollection<M>;
11
+ collection?: EntityCollection<M, any>;
11
12
  }
12
13
  /**
13
14
  * @group Datasource
14
15
  */
15
16
  export type ListenEntityProps<M extends Record<string, any> = any> = FetchEntityProps<M> & {
17
+ databaseId?: string;
16
18
  onUpdate: (entity: Entity<M>) => void;
17
19
  onError?: (error: Error) => void;
18
20
  };
@@ -24,7 +26,7 @@ export interface FetchCollectionProps<M extends Record<string, any> = any> {
24
26
  collection?: EntityCollection<M> | ResolvedEntityCollection<M>;
25
27
  filter?: FilterValues<Extract<keyof M, string>>;
26
28
  limit?: number;
27
- startAfter?: any[];
29
+ startAfter?: any;
28
30
  orderBy?: string;
29
31
  searchString?: string;
30
32
  order?: "desc" | "asc";
@@ -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 {
@@ -121,30 +123,41 @@ 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
  */
142
- countEntities<M extends Record<string, any> = any>(props: FetchCollectionProps<M>): Promise<number>;
144
+ countEntities?<M extends Record<string, any> = any>(props: FetchCollectionProps<M>): Promise<number>;
143
145
  /**
144
146
  * Check if the given filter combination is valid
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,38 +242,37 @@ 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
  */
238
- countEntities<M extends Record<string, any> = any>(props: FetchCollectionDelegateProps<M>): Promise<number>;
256
+ countEntities?<M extends Record<string, any> = any>(props: FetchCollectionDelegateProps<M>): Promise<number>;
239
257
  /**
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
  }