@firecms/core 3.0.0-canary.11 → 3.0.0-canary.110

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 (269) hide show
  1. package/README.md +1 -1
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +17 -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/CircularProgressCenter.d.ts +1 -1
  8. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  9. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +11 -12
  10. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
  11. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +5 -3
  12. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
  13. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  14. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +2 -0
  15. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  16. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  17. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +2 -2
  18. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +12 -2
  19. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  20. package/dist/components/EntityPreview.d.ts +5 -4
  21. package/dist/components/ErrorView.d.ts +1 -1
  22. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  23. package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
  24. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  25. package/dist/components/ReferenceWidget.d.ts +3 -1
  26. package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
  27. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  28. package/dist/components/VirtualTable/VirtualTableProps.d.ts +15 -12
  29. package/dist/components/VirtualTable/types.d.ts +3 -3
  30. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
  31. package/dist/components/common/index.d.ts +1 -0
  32. package/dist/components/common/table_height.d.ts +5 -0
  33. package/dist/components/common/types.d.ts +4 -6
  34. package/dist/components/common/useColumnsIds.d.ts +2 -1
  35. package/dist/components/common/useDataSourceEntityCollectionTableController.d.ts +3 -0
  36. package/dist/components/index.d.ts +3 -1
  37. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
  38. package/dist/core/DefaultDrawer.d.ts +19 -0
  39. package/dist/core/DrawerNavigationItem.d.ts +9 -0
  40. package/dist/core/EntityEditView.d.ts +18 -4
  41. package/dist/core/FireCMS.d.ts +1 -1
  42. package/dist/core/NavigationRoutes.d.ts +3 -3
  43. package/dist/core/index.d.ts +3 -4
  44. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  45. package/dist/form/components/ErrorFocus.d.ts +1 -1
  46. package/dist/form/components/FieldHelperText.d.ts +3 -3
  47. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  48. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  49. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  50. package/dist/form/components/index.d.ts +1 -0
  51. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  52. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  53. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  54. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  55. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  56. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  57. package/dist/form/field_bindings/MultiSelectBinding.d.ts +1 -1
  58. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  59. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  60. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  61. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
  62. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  63. package/dist/form/index.d.ts +2 -4
  64. package/dist/hooks/data/save.d.ts +1 -2
  65. package/dist/hooks/index.d.ts +1 -0
  66. package/dist/hooks/useBuildNavigationController.d.ts +1 -2
  67. package/dist/hooks/useProjectLog.d.ts +2 -2
  68. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  69. package/dist/index.d.ts +1 -0
  70. package/dist/index.es.js +15627 -12442
  71. package/dist/index.es.js.map +1 -1
  72. package/dist/index.umd.js +19866 -587
  73. package/dist/index.umd.js.map +1 -1
  74. package/dist/internal/useBuildDataSource.d.ts +1 -16
  75. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  76. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  77. package/dist/preview/components/ReferencePreview.d.ts +2 -1
  78. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  79. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  80. package/dist/types/auth.d.ts +3 -3
  81. package/dist/types/collections.d.ts +39 -5
  82. package/dist/types/datasource.d.ts +45 -31
  83. package/dist/types/entities.d.ts +6 -1
  84. package/dist/types/entity_actions.d.ts +14 -0
  85. package/dist/types/fields.d.ts +45 -39
  86. package/dist/types/index.d.ts +0 -1
  87. package/dist/types/navigation.d.ts +6 -5
  88. package/dist/types/plugins.d.ts +14 -4
  89. package/dist/types/properties.d.ts +32 -19
  90. package/dist/types/storage.d.ts +11 -3
  91. package/dist/util/entities.d.ts +1 -1
  92. package/dist/util/icon_list.d.ts +5 -1
  93. package/dist/util/icon_synonyms.d.ts +1 -97
  94. package/dist/util/icons.d.ts +2 -2
  95. package/dist/util/index.d.ts +1 -0
  96. package/dist/util/navigation_utils.d.ts +2 -2
  97. package/dist/util/objects.d.ts +1 -1
  98. package/dist/util/plurals.d.ts +0 -2
  99. package/dist/util/resolutions.d.ts +14 -13
  100. package/dist/util/storage.d.ts +23 -2
  101. package/dist/util/useStorageUploadController.d.ts +1 -1
  102. package/package.json +128 -119
  103. package/src/app/AppBar.tsx +18 -0
  104. package/src/app/Drawer.tsx +25 -0
  105. package/src/app/Scaffold.tsx +245 -0
  106. package/src/app/index.ts +4 -0
  107. package/src/app/useApp.tsx +32 -0
  108. package/src/components/ArrayContainer.tsx +9 -7
  109. package/src/components/CircularProgressCenter.tsx +1 -1
  110. package/src/components/ClearFilterSortButton.tsx +41 -0
  111. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +12 -19
  112. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +21 -20
  113. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +10 -6
  114. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +41 -35
  115. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  116. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +22 -12
  117. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +14 -6
  118. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +29 -34
  119. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +17 -13
  120. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +19 -7
  121. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +7 -10
  122. package/src/components/EntityCollectionView/EntityCollectionView.tsx +75 -51
  123. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  124. package/src/components/EntityCollectionView/useSelectionController.tsx +19 -7
  125. package/src/components/EntityPreview.tsx +21 -15
  126. package/src/components/EntityView.tsx +5 -5
  127. package/src/components/ErrorView.tsx +1 -1
  128. package/src/components/HomePage/DefaultHomePage.tsx +24 -15
  129. package/src/components/HomePage/NavigationCard.tsx +3 -3
  130. package/src/components/HomePage/NavigationCardBinding.tsx +1 -1
  131. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  132. package/src/components/PropertyIdCopyTooltip.tsx +48 -0
  133. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +2 -5
  134. package/src/components/ReferenceWidget.tsx +22 -12
  135. package/src/components/SearchIconsView.tsx +11 -7
  136. package/src/components/SelectableTable/SelectableTable.tsx +7 -7
  137. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  138. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +22 -7
  139. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +28 -6
  140. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +35 -15
  141. package/src/components/VirtualTable/VirtualTable.tsx +70 -37
  142. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -1
  143. package/src/components/VirtualTable/VirtualTableHeader.tsx +4 -4
  144. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  145. package/src/components/VirtualTable/VirtualTableProps.tsx +18 -14
  146. package/src/components/VirtualTable/VirtualTableRow.tsx +4 -5
  147. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +1 -1
  148. package/src/components/VirtualTable/types.tsx +2 -3
  149. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +2 -2
  150. package/src/components/common/index.ts +1 -0
  151. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  152. package/src/components/common/types.tsx +4 -6
  153. package/src/components/common/useColumnsIds.tsx +23 -2
  154. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +11 -0
  155. package/src/components/common/useTableSearchHelper.ts +53 -12
  156. package/src/components/index.tsx +3 -1
  157. package/src/contexts/DialogsProvider.tsx +2 -2
  158. package/src/{components/FireCMSAppBar.tsx → core/DefaultAppBar.tsx} +52 -37
  159. package/src/core/DefaultDrawer.tsx +177 -0
  160. package/src/core/DrawerNavigationItem.tsx +64 -0
  161. package/src/core/EntityEditView.tsx +702 -137
  162. package/src/core/EntitySidePanel.tsx +1 -2
  163. package/src/core/FireCMS.tsx +39 -44
  164. package/src/core/NavigationRoutes.tsx +7 -8
  165. package/src/core/SideDialogs.tsx +4 -0
  166. package/src/core/field_configs.tsx +4 -5
  167. package/src/core/index.tsx +3 -4
  168. package/src/form/PropertyFieldBinding.tsx +53 -21
  169. package/src/form/components/CustomIdField.tsx +4 -2
  170. package/src/form/components/FieldHelperText.tsx +4 -4
  171. package/src/form/components/LabelWithIcon.tsx +27 -19
  172. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  173. package/src/form/components/StorageItemPreview.tsx +21 -11
  174. package/src/form/components/StorageUploadProgress.tsx +3 -4
  175. package/src/form/components/index.tsx +1 -0
  176. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +15 -11
  177. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +26 -21
  178. package/src/form/field_bindings/BlockFieldBinding.tsx +13 -12
  179. package/src/form/field_bindings/DateTimeFieldBinding.tsx +17 -14
  180. package/src/form/field_bindings/KeyValueFieldBinding.tsx +52 -46
  181. package/src/form/field_bindings/MapFieldBinding.tsx +15 -15
  182. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +138 -0
  183. package/src/form/field_bindings/MultiSelectBinding.tsx +9 -5
  184. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  185. package/src/form/field_bindings/ReferenceFieldBinding.tsx +37 -27
  186. package/src/form/field_bindings/RepeatFieldBinding.tsx +20 -16
  187. package/src/form/field_bindings/SelectFieldBinding.tsx +47 -41
  188. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +31 -52
  189. package/src/form/field_bindings/SwitchFieldBinding.tsx +9 -5
  190. package/src/form/field_bindings/TextFieldBinding.tsx +26 -22
  191. package/src/form/index.tsx +6 -6
  192. package/src/form/validation.ts +1 -17
  193. package/src/hooks/data/save.ts +6 -1
  194. package/src/hooks/data/useDataSource.tsx +1 -1
  195. package/src/hooks/index.tsx +1 -0
  196. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  197. package/src/hooks/useBuildModeController.tsx +11 -5
  198. package/src/hooks/useBuildNavigationController.tsx +86 -29
  199. package/src/hooks/useProjectLog.tsx +19 -8
  200. package/src/hooks/useResolvedNavigationFrom.tsx +1 -1
  201. package/src/hooks/useValidateAuthenticator.tsx +21 -41
  202. package/src/index.ts +1 -0
  203. package/src/internal/useBuildDataSource.ts +84 -62
  204. package/src/internal/useBuildSideEntityController.tsx +90 -21
  205. package/src/internal/useUnsavedChangesDialog.tsx +3 -1
  206. package/src/preview/PropertyPreview.tsx +10 -17
  207. package/src/preview/PropertyPreviewProps.tsx +7 -1
  208. package/src/preview/components/BooleanPreview.tsx +2 -2
  209. package/src/preview/components/EnumValuesChip.tsx +2 -2
  210. package/src/preview/components/ImagePreview.tsx +24 -34
  211. package/src/preview/components/ReferencePreview.tsx +23 -23
  212. package/src/preview/components/StorageThumbnail.tsx +5 -1
  213. package/src/preview/components/UrlComponentPreview.tsx +44 -11
  214. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +0 -1
  215. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +3 -2
  216. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +1 -2
  217. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +0 -1
  218. package/src/preview/property_previews/ArrayOneOfPreview.tsx +3 -4
  219. package/src/preview/property_previews/ArrayPropertyPreview.tsx +3 -4
  220. package/src/preview/property_previews/MapPropertyPreview.tsx +6 -6
  221. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +2 -2
  222. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  223. package/src/preview/util.ts +2 -2
  224. package/src/types/auth.tsx +3 -3
  225. package/src/types/collections.ts +48 -7
  226. package/src/types/customization_controller.tsx +0 -1
  227. package/src/types/datasource.ts +53 -39
  228. package/src/types/entities.ts +11 -1
  229. package/src/types/entity_actions.tsx +16 -3
  230. package/src/types/fields.tsx +49 -43
  231. package/src/types/index.ts +0 -1
  232. package/src/types/navigation.ts +7 -7
  233. package/src/types/plugins.tsx +16 -6
  234. package/src/types/properties.ts +37 -20
  235. package/src/types/storage.ts +12 -3
  236. package/src/util/entities.ts +5 -4
  237. package/src/util/enums.ts +1 -1
  238. package/src/util/icon_list.ts +15 -10
  239. package/src/util/icon_synonyms.ts +3 -99
  240. package/src/util/index.ts +1 -0
  241. package/src/util/navigation_utils.ts +6 -6
  242. package/src/util/objects.ts +25 -28
  243. package/src/util/permissions.ts +1 -0
  244. package/src/util/plurals.ts +0 -2
  245. package/src/util/references.ts +3 -0
  246. package/src/util/resolutions.ts +44 -39
  247. package/src/util/storage.ts +76 -22
  248. package/src/util/strings.ts +2 -2
  249. package/src/util/useStorageUploadController.tsx +22 -4
  250. package/src/util/useTraceUpdate.tsx +1 -0
  251. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  252. package/dist/components/VirtualTable/common.d.ts +0 -2
  253. package/dist/core/Drawer.d.ts +0 -23
  254. package/dist/core/Scaffold.d.ts +0 -55
  255. package/dist/core/SideEntityView.d.ts +0 -7
  256. package/dist/form/EntityForm.d.ts +0 -77
  257. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  258. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  259. package/dist/internal/useLocaleConfig.d.ts +0 -1
  260. package/dist/types/appcheck.d.ts +0 -26
  261. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  262. package/src/core/Drawer.tsx +0 -191
  263. package/src/core/Scaffold.tsx +0 -281
  264. package/src/core/SideEntityView.tsx +0 -38
  265. package/src/form/EntityForm.tsx +0 -728
  266. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  267. package/src/internal/useBuildCustomizationController.tsx +0 -5
  268. package/src/internal/useLocaleConfig.tsx +0 -18
  269. package/src/types/appcheck.ts +0 -29
@@ -1,4 +1,4 @@
1
- import { DataSource, DataSourceDelegate, EntityReference, GeoPoint, NavigationController, PropertyConfig } from "../types";
1
+ import { DataSource, DataSourceDelegate, NavigationController, PropertyConfig } from "../types";
2
2
  /**
3
3
  * Use this hook to build a {@link DataSource} based on Firestore
4
4
  * @param firebaseApp
@@ -9,18 +9,3 @@ export declare function useBuildDataSource({ delegate, propertyConfigs, navigati
9
9
  propertyConfigs?: Record<string, PropertyConfig>;
10
10
  navigationController: NavigationController;
11
11
  }): DataSource;
12
- /**
13
- * Recursive function that converts Firestore data types into CMS or plain
14
- * JS types.
15
- * FireCMS uses Javascript dates internally instead of Firestore timestamps.
16
- * This makes it easier to interact with the rest of the libraries and
17
- * bindings.
18
- * Also, Firestore references are replaced with {@link EntityReference}
19
- * @param data
20
- * @param buildReference
21
- * @param buildGeoPoint
22
- * @param buildDate
23
- * @param buildDelete
24
- * @group Firestore
25
- */
26
- export declare function cmsToDelegateModel(data: any, buildReference: (reference: EntityReference) => any, buildGeoPoint: (geoPoint: GeoPoint) => any, buildDate: (date: Date) => any, buildDelete: () => any): any;
@@ -2,7 +2,7 @@ import { CMSType, Property, ResolvedProperty } from "../types";
2
2
  /**
3
3
  * @group Preview components
4
4
  */
5
- export type PreviewSize = "medium" | "small" | "tiny";
5
+ export type PreviewSize = "medium" | "small" | "smallest";
6
6
  /**
7
7
  * @group Preview components
8
8
  */
@@ -37,4 +37,9 @@ export interface PropertyPreviewProps<T extends CMSType = any, CustomProps = any
37
37
  * Additional properties set by the developer
38
38
  */
39
39
  customProps?: CustomProps;
40
+ /**
41
+ * If the preview should be interactive or not.
42
+ * This applies only to videos.
43
+ */
44
+ interactive?: boolean;
40
45
  }
@@ -3,7 +3,7 @@ import { EnumValues } from "../../types";
3
3
  export interface EnumValuesChipProps {
4
4
  enumValues?: EnumValues;
5
5
  enumKey: string | number;
6
- size: "tiny" | "small" | "medium";
6
+ size: "smallest" | "small" | "medium";
7
7
  className?: string;
8
8
  children?: React.ReactNode;
9
9
  }
@@ -8,7 +8,8 @@ export type ReferencePreviewProps = {
8
8
  previewProperties?: string[];
9
9
  onClick?: (e: React.SyntheticEvent) => void;
10
10
  hover?: boolean;
11
- allowEntityNavigation?: boolean;
11
+ includeEntityLink?: boolean;
12
+ includeId?: boolean;
12
13
  };
13
14
  /**
14
15
  * @group Preview components
@@ -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;
@@ -8,7 +8,7 @@ import { StorageSource } from "./storage";
8
8
  * to do it as the result of a hook.
9
9
  * @group Hooks and utilities
10
10
  */
11
- export type AuthController<UserType extends User = any, ExtraData extends any = any> = {
11
+ export type AuthController<UserType extends User = any, ExtraData = any> = {
12
12
  /**
13
13
  * The user currently logged in
14
14
  * The values can be: the user object, null if they skipped login
@@ -32,7 +32,7 @@ export type AuthController<UserType extends User = any, ExtraData extends any =
32
32
  /**
33
33
  * Sign out
34
34
  */
35
- signOut: () => void;
35
+ signOut: () => Promise<void>;
36
36
  /**
37
37
  * Error initializing the authentication
38
38
  */
@@ -56,7 +56,7 @@ export type AuthController<UserType extends User = any, ExtraData extends any =
56
56
  * Implement this function to allow access to specific users.
57
57
  * @group Hooks and utilities
58
58
  */
59
- export type Authenticator<UserType extends User = User, Controller extends AuthController<UserType> = AuthController<UserType>> = ({ user }: {
59
+ export type Authenticator<UserType extends User = User, Controller extends AuthController<UserType> = AuthController<UserType>> = (props: {
60
60
  /**
61
61
  * Logged-in user or null
62
62
  */
@@ -44,6 +44,11 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
44
44
  * This path also determines the URL in FireCMS, unless an alias is specified
45
45
  */
46
46
  path: string;
47
+ /**
48
+ * Optional database id of this collection. If not specified, the default
49
+ * database id will be used.
50
+ */
51
+ databaseId?: string;
47
52
  /**
48
53
  * If this collection is a top level navigation entry, you can set this
49
54
  * property to `true` to indicate that this collection is a collection group.
@@ -53,7 +58,8 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
53
58
  * Icon key to use in this collection.
54
59
  * You can use any of the icons in the Material specs:
55
60
  * https://fonts.google.com/icons
56
- * e.g. 'account_tree' or 'person'
61
+ * e.g. 'account_tree' or 'person'.
62
+ * Find all the icons in https://firecms.co/docs/icons
57
63
  */
58
64
  icon?: string;
59
65
  /**
@@ -94,8 +100,12 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
94
100
  * `subcollection:`. e.g. `subcollection:orders`.
95
101
  * - If you are using a collection group, you will also have an
96
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`.
97
107
  */
98
- propertiesOrder?: Extract<keyof M, string>[];
108
+ propertiesOrder?: (Extract<keyof M, string> | `subcollection:${string}`)[];
99
109
  /**
100
110
  * If enabled, content is loaded in batches. If `false` all entities in the
101
111
  * collection are loaded.
@@ -253,7 +263,18 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
253
263
  * are writing custom code
254
264
  */
255
265
  ownerId?: string;
266
+ /**
267
+ * Overrides for the entity view, like the data source or the storage source.
268
+ */
256
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[];
257
278
  }
258
279
  /**
259
280
  * Parameter passed to the `Actions` prop in the collection configuration.
@@ -302,14 +323,13 @@ export interface CollectionActionsProps<M extends Record<string, any> = any, Use
302
323
  /**
303
324
  * Use this controller to retrieve the selected entities or modify them in
304
325
  * an {@link EntityCollection}
305
- * If you want to pass a `SelectionController` to
306
326
  * @group Models
307
327
  */
308
328
  export type SelectionController<M extends Record<string, any> = any> = {
309
329
  selectedEntities: Entity<M>[];
310
330
  setSelectedEntities: Dispatch<SetStateAction<Entity<M>[]>>;
311
331
  isEntitySelected: (entity: Entity<M>) => boolean;
312
- toggleEntitySelection: (entity: Entity<M>) => void;
332
+ toggleEntitySelection: (entity: Entity<M>, newSelectedState?: boolean) => void;
313
333
  };
314
334
  /**
315
335
  * Filter conditions in a `Query.where()` clause are specified using the
@@ -391,8 +411,22 @@ export interface AdditionalFieldDelegate<M extends Record<string, any> = any, Us
391
411
  * @group Models
392
412
  */
393
413
  export type EntityCustomView<M extends Record<string, any> = any> = {
414
+ /**
415
+ * Key of this custom view.
416
+ */
394
417
  key: string;
418
+ /**
419
+ * Name of this custom view.
420
+ */
395
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
+ */
396
430
  Builder?: React.ComponentType<EntityCustomViewParams<M>>;
397
431
  };
398
432
  /**
@@ -445,7 +479,7 @@ export type EntityTableController<M extends Record<string, any> = any> = {
445
479
  filterValues?: FilterValues<Extract<keyof M, string>>;
446
480
  setFilterValues?: (filterValues: FilterValues<Extract<keyof M, string>>) => void;
447
481
  sortBy?: [Extract<keyof M, string>, "asc" | "desc"];
448
- setSortBy?: (sortBy: [Extract<keyof M, string>, "asc" | "desc"]) => void;
482
+ setSortBy?: (sortBy?: [Extract<keyof M, string>, "asc" | "desc"]) => void;
449
483
  searchString?: string;
450
484
  setSearchString?: (searchString?: string) => void;
451
485
  clearFilter?: () => void;
@@ -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
  * @group Datasource
6
7
  */
@@ -13,6 +14,7 @@ export interface FetchEntityProps<M extends Record<string, any> = any> {
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
  };
@@ -54,9 +56,8 @@ export interface DeleteEntityProps<M extends Record<string, any> = any> {
54
56
  entity: Entity<M>;
55
57
  }
56
58
  /**
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}
59
+ * Component in charge of communicating with the data source.
60
+ * Usually you won't need to implement this interface, but a {@link DataSourceDelegate} instead.
60
61
  * @group Datasource
61
62
  */
62
63
  export interface DataSource {
@@ -131,7 +132,7 @@ export interface DataSource {
131
132
  * @param entityId
132
133
  * @return `true` if there are no other fields besides the given entity
133
134
  */
134
- checkUniqueField(path: string, name: string, value: any, entityId?: string): Promise<boolean>;
135
+ checkUniqueField(path: string, name: string, value: any, entityId?: string, databaseId?: string): Promise<boolean>;
135
136
  /**
136
137
  * Generate an id for a new entity
137
138
  */
@@ -145,6 +146,17 @@ export interface DataSource {
145
146
  * @param props
146
147
  */
147
148
  isFilterCombinationValid?(props: FilterCombinationValidProps): boolean;
149
+ /**
150
+ * Called when the user clicks on the search bar in a collection view.
151
+ * Useful for initializing a text search index.
152
+ * @param props
153
+ */
154
+ initTextSearch?: (props: {
155
+ context: FireCMSContext;
156
+ path: string;
157
+ collection: EntityCollection;
158
+ parentCollectionIds?: string[];
159
+ }) => Promise<boolean>;
148
160
  }
149
161
  export type FilterCombinationValidProps = {
150
162
  path: string;
@@ -152,14 +164,18 @@ export type FilterCombinationValidProps = {
152
164
  filterValues: FilterValues<any>;
153
165
  sortBy?: [string, "asc" | "desc"];
154
166
  };
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
- };
167
+ export type SaveEntityDelegateProps<M extends Record<string, any> = any> = SaveEntityProps<M>;
168
+ export type FetchCollectionDelegateProps<M extends Record<string, any> = any> = FetchCollectionProps<M>;
169
+ export type ListenCollectionDelegateProps<M extends Record<string, any> = any> = ListenCollectionProps<M>;
162
170
  export interface DataSourceDelegate {
171
+ /**
172
+ * Key that identifies this data source delegate
173
+ */
174
+ key: string;
175
+ /**
176
+ * If the data source has been initialised
177
+ */
178
+ initialised?: boolean;
163
179
  /**
164
180
  * Fetch data from a collection
165
181
  * @param path
@@ -194,7 +210,7 @@ export interface DataSourceDelegate {
194
210
  * @param path
195
211
  * @param entityId
196
212
  */
197
- fetchEntity<M extends Record<string, any> = any>({ path, entityId, }: Omit<FetchEntityProps<M>, "collection">): Promise<Entity<M> | undefined>;
213
+ fetchEntity<M extends Record<string, any> = any>({ path, entityId, }: FetchEntityProps<M>): Promise<Entity<M> | undefined>;
198
214
  /**
199
215
  * Get realtime updates on one entity.
200
216
  * @param path
@@ -204,12 +220,12 @@ export interface DataSourceDelegate {
204
220
  * @param onError
205
221
  * @return Function to cancel subscription
206
222
  */
207
- listenEntity?<M extends Record<string, any> = any>({ path, entityId, onUpdate, onError }: Omit<ListenEntityProps<M>, "collection">): () => void;
223
+ listenEntity?<M extends Record<string, any> = any>({ path, entityId, onUpdate, onError }: ListenEntityProps<M>): () => void;
208
224
  /**
209
225
  * Save entity to the specified path
210
226
  * @param path
211
- * @param id
212
- * @param collection
227
+ * @param entityId
228
+ * @param values
213
229
  * @param status
214
230
  */
215
231
  saveEntity<M extends Record<string, any> = any>({ path, entityId, values, status }: SaveEntityDelegateProps<M>): Promise<Entity<M>>;
@@ -227,7 +243,7 @@ export interface DataSourceDelegate {
227
243
  * @param entityId
228
244
  * @return `true` if there are no other fields besides the given entity
229
245
  */
230
- checkUniqueField(path: string, name: string, value: any, entityId?: string): Promise<boolean>;
246
+ checkUniqueField(path: string, name: string, value: any, entityId?: string, databaseId?: string): Promise<boolean>;
231
247
  /**
232
248
  * Generate an id for a new entity
233
249
  */
@@ -240,23 +256,21 @@ export interface DataSourceDelegate {
240
256
  * Check if the given filter combination is valid
241
257
  * @param props
242
258
  */
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;
259
+ isFilterCombinationValid?(props: Omit<FilterCombinationValidProps, "collection"> & {
260
+ databaseId?: string;
261
+ }): boolean;
254
262
  /**
255
263
  * Get the object to generate the current time in the datasource
256
264
  */
257
- currentTime(): any;
258
- buildDate: (date: Date) => any;
259
- buildDeleteFieldValue: () => any;
265
+ currentTime?: () => any;
260
266
  delegateToCMSModel: (data: any) => any;
267
+ cmsToDelegateModel: (data: any) => any;
261
268
  setDateToMidnight: (input?: any) => any;
269
+ initTextSearch?: (props: {
270
+ context: FireCMSContext;
271
+ path: string;
272
+ databaseId?: string;
273
+ collection: EntityCollection;
274
+ parentCollectionIds?: string[];
275
+ }) => Promise<boolean>;
262
276
  }
@@ -21,6 +21,7 @@ export interface Entity<M extends object> {
21
21
  * Current values
22
22
  */
23
23
  values: EntityValues<M>;
24
+ databaseId?: string;
24
25
  }
25
26
  /**
26
27
  * This type represents a record of key value pairs as described in an
@@ -31,7 +32,7 @@ export type EntityValues<M extends object> = M;
31
32
  /**
32
33
  * Class used to create a reference to an entity in a different path
33
34
  */
34
- export declare class EntityReference<M extends Record<string, any> = any> {
35
+ export declare class EntityReference {
35
36
  /**
36
37
  * ID of the entity
37
38
  */
@@ -56,3 +57,7 @@ export declare class GeoPoint {
56
57
  readonly longitude: number;
57
58
  constructor(latitude: number, longitude: number);
58
59
  }
60
+ export declare class Vector {
61
+ readonly value: number[];
62
+ constructor(value: number[]);
63
+ }
@@ -4,9 +4,23 @@ import { Entity } from "./entities";
4
4
  import { EntityCollection, SelectionController } from "./collections";
5
5
  import { User } from "./user";
6
6
  import { SideEntityController } from "./side_entity_controller";
7
+ /**
8
+ * An entity action is a custom action that can be performed on an entity.
9
+ * They are displayed in the entity view and in the collection view.
10
+ */
7
11
  export type EntityAction<M extends object = any, UserType extends User = User> = {
12
+ /**
13
+ * Title of the action
14
+ */
8
15
  name: string;
16
+ /**
17
+ * Icon of the action
18
+ */
9
19
  icon?: React.ReactElement;
20
+ /**
21
+ * Callback when the action is clicked
22
+ * @param props
23
+ */
10
24
  onClick: (props: EntityActionClickProps<M, UserType>) => Promise<void> | void;
11
25
  /**
12
26
  * Show this action collapsed in the menu of the collection view.
@@ -1,6 +1,6 @@
1
- import { EntityValues } from "./entities";
2
1
  import { CMSType, PropertyOrBuilder } from "./properties";
3
2
  import { ResolvedEntityCollection, ResolvedProperty } from "./resolved_entities";
3
+ import { FormexController } from "@firecms/formex";
4
4
  /**
5
5
  * When building a custom field you need to create a React component that takes
6
6
  * this interface as props.
@@ -17,9 +17,6 @@ export interface FieldProps<T extends CMSType = any, CustomProps = any, M extend
17
17
  * Current value of this field
18
18
  */
19
19
  value: T;
20
- /**
21
- * Initial value of this field
22
- */
23
20
  /**
24
21
  * Set value of field directly
25
22
  */
@@ -34,24 +31,24 @@ export interface FieldProps<T extends CMSType = any, CustomProps = any, M extend
34
31
  /**
35
32
  * Is the form currently submitting
36
33
  */
37
- isSubmitting: boolean;
34
+ isSubmitting?: boolean;
38
35
  /**
39
36
  * Should this field show the error indicator.
40
37
  * Note that there might be an error (like an empty field that should be
41
38
  * filled) but we don't want to show the error until the user has tried
42
39
  * saving.
43
40
  */
44
- showError: boolean;
41
+ showError?: boolean;
45
42
  /**
46
43
  * Is there an error in this field. The error field has the same shape as
47
44
  * the field, replacing values with a string containing the error.
48
45
  * It takes the value `null` if there is no error
49
46
  */
50
- error: any | null;
47
+ error?: any | null;
51
48
  /**
52
49
  * Has this field been touched
53
50
  */
54
- touched: boolean;
51
+ touched?: boolean;
55
52
  /**
56
53
  * Property related to this field
57
54
  */
@@ -59,28 +56,24 @@ export interface FieldProps<T extends CMSType = any, CustomProps = any, M extend
59
56
  /**
60
57
  * Should this field include a description
61
58
  */
62
- includeDescription: boolean;
59
+ includeDescription?: boolean;
63
60
  /**
64
61
  * Flag to indicate that the underlying value has been updated in the
65
62
  * datasource
66
63
  */
67
- underlyingValueHasChanged: boolean;
64
+ underlyingValueHasChanged?: boolean;
68
65
  /**
69
66
  * Is this field part of an array
70
67
  */
71
- partOfArray: boolean;
72
- /**
73
- * Is this field part of a block (oneOf array)
74
- */
75
- partOfBlock: boolean;
68
+ partOfArray?: boolean;
76
69
  /**
77
- * Is this field being rendered in the entity table popup
70
+ * Should this field render with the minimal amount of UI elements
78
71
  */
79
- tableMode: boolean;
72
+ minimalistView?: boolean;
80
73
  /**
81
74
  * Should this field autofocus on mount
82
75
  */
83
- autoFocus: boolean;
76
+ autoFocus?: boolean;
84
77
  /**
85
78
  * Additional properties set by the developer
86
79
  */
@@ -92,29 +85,21 @@ export interface FieldProps<T extends CMSType = any, CustomProps = any, M extend
92
85
  /**
93
86
  * Flag to indicate if this field should be disabled
94
87
  */
95
- disabled: boolean;
88
+ disabled?: boolean;
89
+ /**
90
+ * Size of the field
91
+ */
92
+ size?: "smallest" | "small" | "medium";
96
93
  }
97
94
  /**
98
95
  * Context passed to custom fields
99
96
  * @group Form custom fields
100
97
  */
101
98
  export interface FormContext<M extends Record<string, any> = any> {
102
- /**
103
- * Collection of the entity being modified
104
- */
105
- collection: ResolvedEntityCollection<M>;
106
99
  /**
107
100
  * Current values of the entity
108
101
  */
109
- values: EntityValues<M>;
110
- /**
111
- * Entity id, it can be null if it's a new entity
112
- */
113
- entityId?: string;
114
- /**
115
- * Path this entity is located at
116
- */
117
- path: string;
102
+ values: M;
118
103
  /**
119
104
  * Update the value of a field
120
105
  * @param key
@@ -123,9 +108,25 @@ export interface FormContext<M extends Record<string, any> = any> {
123
108
  */
124
109
  setFieldValue: (key: string, value: any, shouldValidate?: boolean) => void;
125
110
  /**
126
- * Save the entity
111
+ * Save the entity.
112
+ */
113
+ save: (values: M) => void;
114
+ /**
115
+ * Collection of the entity being modified
116
+ */
117
+ collection?: ResolvedEntityCollection<M>;
118
+ /**
119
+ * Entity id, it can be null if it's a new entity
127
120
  */
128
- save: (values: EntityValues<M>) => void;
121
+ entityId: string;
122
+ /**
123
+ * Path this entity is located at
124
+ */
125
+ path?: string;
126
+ /**
127
+ * This is the underlying formex controller that powers the form
128
+ */
129
+ formex: FormexController<M>;
129
130
  }
130
131
  /**
131
132
  * In case you need to render a field bound to a Property inside your
@@ -156,10 +157,6 @@ export interface PropertyFieldBindingProps<T extends CMSType, M extends Record<s
156
157
  * field is being edited
157
158
  */
158
159
  underlyingValueHasChanged?: boolean;
159
- /**
160
- * Is this field being rendered in a table
161
- */
162
- tableMode?: boolean;
163
160
  /**
164
161
  * Is this field part of an array
165
162
  */
@@ -167,7 +164,7 @@ export interface PropertyFieldBindingProps<T extends CMSType, M extends Record<s
167
164
  /**
168
165
  * Is this field part of a block (oneOf array)
169
166
  */
170
- partOfBlock?: boolean;
167
+ minimalistView?: boolean;
171
168
  /**
172
169
  * Should the field take focus when rendered. When opening the popup view
173
170
  * in table mode, it makes sense to put the focus on the only field rendered.
@@ -177,4 +174,13 @@ export interface PropertyFieldBindingProps<T extends CMSType, M extends Record<s
177
174
  * Should this field be disabled
178
175
  */
179
176
  disabled?: boolean;
177
+ /**
178
+ * Index of the field in the array.
179
+ * Only used when the field is part of an array.
180
+ */
181
+ index?: number;
182
+ /**
183
+ * The size of the field
184
+ */
185
+ size?: "smallest" | "small" | "medium";
180
186
  }
@@ -23,7 +23,6 @@ export * from "./plugins";
23
23
  export * from "./analytics";
24
24
  export * from "./firecms";
25
25
  export * from "./roles";
26
- export * from "./appcheck";
27
26
  export * from "./export_import";
28
27
  export * from "./modify_collections";
29
28
  export * from "./analytics_controller";
@@ -6,7 +6,7 @@ import { EntityReference } from "./entities";
6
6
  * attributes.
7
7
  * @group Models
8
8
  */
9
- export type NavigationController = {
9
+ export type NavigationController<EC extends EntityCollection = EntityCollection<any>> = {
10
10
  /**
11
11
  * List of the mapped collections in the CMS.
12
12
  * Each entry relates to a collection in the root database.
@@ -47,15 +47,15 @@ export type NavigationController = {
47
47
  * Get the collection configuration for a given path.
48
48
  * The collection is resolved from the given path or alias.
49
49
  */
50
- getCollection: <EC extends EntityCollection = EntityCollection<any>>(pathOrAlias: string, entityId?: string, includeUserOverride?: boolean) => EC | undefined;
50
+ getCollection: (pathOrId: string, includeUserOverride?: boolean) => EC | undefined;
51
51
  /**
52
- * Get the collection configuration from its parent path segments.
52
+ * Get the collection configuration from its parent ids.
53
53
  */
54
- getCollectionFromIds: <EC extends EntityCollection = EntityCollection<any>>(ids: string[]) => EC | undefined;
54
+ getCollectionFromIds: (ids: string[]) => EC | undefined;
55
55
  /**
56
56
  * Get the collection configuration from its parent path segments.
57
57
  */
58
- getCollectionFromPaths: <EC extends EntityCollection = EntityCollection<any>>(pathSegments: string[]) => EC | undefined;
58
+ getCollectionFromPaths: (pathSegments: string[]) => EC | undefined;
59
59
  /**
60
60
  * Default path under the navigation routes of the CMS will be created
61
61
  */
@@ -144,6 +144,7 @@ export interface CMSView {
144
144
  * You can use any of the icons in the Material specs:
145
145
  * https://fonts.google.com/icons
146
146
  * e.g. 'account_tree' or 'person'
147
+ * Find all the icons in https://firecms.co/docs/icons
147
148
  */
148
149
  icon?: string;
149
150
  /**