@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
@@ -18,7 +18,6 @@ export function ArrayOfReferencesPreview({
18
18
  const property = resolveArrayProperty({
19
19
  propertyKey,
20
20
  property: inputProperty,
21
- propertyValue: value,
22
21
  fields: customizationController.propertyConfigs
23
22
  });
24
23
 
@@ -29,7 +28,7 @@ export function ArrayOfReferencesPreview({
29
28
  if (property?.dataType !== "array" || !property.of || property.of.dataType !== "reference")
30
29
  throw Error("Picked wrong preview component ArrayOfReferencesPreview");
31
30
 
32
- const childSize: PreviewSize = size === "medium" ? "small" : "tiny";
31
+ const childSize: PreviewSize = size === "medium" ? "small" : "smallest";
33
32
 
34
33
  return (
35
34
  <div className="flex flex-col w-full">
@@ -43,6 +42,8 @@ export function ArrayOfReferencesPreview({
43
42
  previewProperties={ofProperty.previewProperties}
44
43
  size={childSize}
45
44
  reference={reference}
45
+ includeId={ofProperty.includeId}
46
+ includeEntityLink={ofProperty.includeEntityLink}
46
47
  />
47
48
  </div>;
48
49
  }
@@ -23,7 +23,6 @@ export function ArrayOfStorageComponentsPreview({
23
23
  const property = resolveArrayProperty({
24
24
  propertyKey,
25
25
  property: inputProperty,
26
- propertyValue: value,
27
26
  fields: customizationController.propertyConfigs
28
27
  });
29
28
 
@@ -34,7 +33,7 @@ export function ArrayOfStorageComponentsPreview({
34
33
  if (property.dataType !== "array" || !property.of || property.of.dataType !== "string")
35
34
  throw Error("Picked wrong preview component ArrayOfStorageComponentsPreview");
36
35
 
37
- const childSize: PreviewSize = size === "medium" ? "small" : "tiny";
36
+ const childSize: PreviewSize = size === "medium" ? "small" : "smallest";
38
37
 
39
38
  return (
40
39
  <div className={"flex flex-wrap gap-2"}>
@@ -21,7 +21,6 @@ export function ArrayOfStringsPreview({
21
21
  const property = resolveArrayProperty({
22
22
  propertyKey,
23
23
  property: inputProperty,
24
- propertyValue: value,
25
24
  fields: customizationController.propertyConfigs
26
25
  });
27
26
 
@@ -4,7 +4,7 @@ import { ResolvedProperty } from "../../types";
4
4
  import { useCustomizationController } from "../../hooks";
5
5
  import { PreviewSize, PropertyPreviewProps } from "../PropertyPreviewProps";
6
6
  import { PropertyPreview } from "../PropertyPreview";
7
- import { cn, defaultBorderMixin } from "@firecms/ui";
7
+ import { cls, defaultBorderMixin } from "@firecms/ui";
8
8
  import { DEFAULT_ONE_OF_TYPE, DEFAULT_ONE_OF_VALUE } from "../../util/common";
9
9
  import { ErrorBoundary } from "../../components";
10
10
 
@@ -23,7 +23,6 @@ export function ArrayOneOfPreview({
23
23
  const property = resolveArrayProperty({
24
24
  propertyKey,
25
25
  property: inputProperty,
26
- propertyValue: value,
27
26
  fields: customizationController.propertyConfigs
28
27
  });
29
28
 
@@ -38,7 +37,7 @@ export function ArrayOneOfPreview({
38
37
 
39
38
  if (!values) return null;
40
39
 
41
- const childSize: PreviewSize = size === "medium" ? "small" : "tiny";
40
+ const childSize: PreviewSize = size === "medium" ? "small" : "smallest";
42
41
 
43
42
  const typeField = property.oneOf.typeField ?? DEFAULT_ONE_OF_TYPE;
44
43
  const valueField = property.oneOf.valueField ?? DEFAULT_ONE_OF_VALUE;
@@ -50,7 +49,7 @@ export function ArrayOneOfPreview({
50
49
  values.map((value, index) =>
51
50
  <React.Fragment
52
51
  key={"preview_array_" + value + "_" + index}>
53
- <div className={cn(defaultBorderMixin, "m-1 border-b last:border-b-0")}>
52
+ <div className={cls(defaultBorderMixin, "m-1 border-b last:border-b-0")}>
54
53
  <ErrorBoundary>
55
54
  {value && <PropertyPreview
56
55
  propertyKey={propertyKey}
@@ -5,7 +5,7 @@ import { ResolvedProperty } from "../../types";
5
5
  import { useCustomizationController } from "../../hooks";
6
6
  import { PreviewSize, PropertyPreviewProps } from "../PropertyPreviewProps";
7
7
  import { PropertyPreview } from "../PropertyPreview";
8
- import { cn, defaultBorderMixin } from "@firecms/ui";
8
+ import { cls, defaultBorderMixin } from "@firecms/ui";
9
9
  import { ErrorBoundary } from "../../components";
10
10
 
11
11
  /**
@@ -23,7 +23,6 @@ export function ArrayPropertyPreview({
23
23
  const property = resolveArrayProperty({
24
24
  propertyKey,
25
25
  property: inputProperty,
26
- propertyValue: value,
27
26
  fields: customizationController.propertyConfigs
28
27
  });
29
28
 
@@ -38,7 +37,7 @@ export function ArrayPropertyPreview({
38
37
 
39
38
  if (!values) return null;
40
39
 
41
- const childSize: PreviewSize = size === "medium" ? "small" : "tiny";
40
+ const childSize: PreviewSize = size === "medium" ? "small" : "smallest";
42
41
 
43
42
  return (
44
43
  <div className="flex flex-col gap-2">
@@ -49,7 +48,7 @@ export function ArrayPropertyPreview({
49
48
  return of
50
49
  ? <React.Fragment
51
50
  key={"preview_array_" + index}>
52
- <div className={cn(defaultBorderMixin, "m-1 border-b last:border-b-0")}>
51
+ <div className={cls(defaultBorderMixin, "m-1 border-b last:border-b-0")}>
53
52
  <ErrorBoundary>
54
53
  <PropertyPreview
55
54
  propertyKey={propertyKey}
@@ -3,7 +3,7 @@ import React from "react";
3
3
  import { ResolvedMapProperty } from "../../types";
4
4
  import { PropertyPreviewProps } from "../PropertyPreviewProps";
5
5
  import { PropertyPreview } from "../PropertyPreview";
6
- import { cn, defaultBorderMixin, Typography } from "@firecms/ui";
6
+ import { cls, defaultBorderMixin, Typography } from "@firecms/ui";
7
7
  import { ErrorBoundary } from "../../components";
8
8
  import { EmptyValue } from "../components/EmptyValue";
9
9
 
@@ -34,7 +34,7 @@ export function MapPropertyPreview<T extends Record<string, any> = Record<string
34
34
 
35
35
  const mapPropertyKeys: string[] = Object.keys(mapProperty.properties)
36
36
 
37
- if (size === "tiny")
37
+ if (size === "smallest")
38
38
  return (
39
39
  <div className="w-full flex flex-col space-y-1 md:space-y-2">
40
40
  {mapPropertyKeys.map((key, index) => (
@@ -61,7 +61,7 @@ export function MapPropertyPreview<T extends Record<string, any> = Record<string
61
61
  return (
62
62
  <div
63
63
  key={`map_preview_table_${key}}`}
64
- className={cn(defaultBorderMixin, "last:border-b-0 border-b")}>
64
+ className={cls(defaultBorderMixin, "last:border-b-0 border-b")}>
65
65
  <div
66
66
  className={"flex flex-row pt-0.5 pb-0.5 gap-2"}>
67
67
  <div
@@ -87,7 +87,7 @@ export function MapPropertyPreview<T extends Record<string, any> = Record<string
87
87
  </div>
88
88
 
89
89
  {(childProperty.dataType === "map" || childProperty === "array") &&
90
- <div className={cn(defaultBorderMixin, "border-l pl-4 ml-2 my-2")}>
90
+ <div className={cls(defaultBorderMixin, "border-l pl-4 ml-2 my-2")}>
91
91
  <PropertyPreview
92
92
  propertyKey={key}
93
93
  value={(value)[key]}
@@ -113,7 +113,7 @@ export function KeyValuePreview({ value }: { value: any }) {
113
113
  Object.entries(value).map(([key, childValue]) => (
114
114
  <div
115
115
  key={`map_preview_table_${key}}`}
116
- className={cn(defaultBorderMixin, "last:border-b-0 border-b")}>
116
+ className={cls(defaultBorderMixin, "last:border-b-0 border-b")}>
117
117
  <div
118
118
  className={"flex flex-row pt-0.5 pb-0.5 gap-2"}>
119
119
  <div
@@ -135,7 +135,7 @@ export function KeyValuePreview({ value }: { value: any }) {
135
135
  </div>
136
136
  </div>
137
137
  {typeof childValue === "object" &&
138
- <div className={cn(defaultBorderMixin, "border-l pl-4")}>
138
+ <div className={cls(defaultBorderMixin, "border-l pl-4")}>
139
139
  <KeyValuePreview value={childValue}/>
140
140
  </div>
141
141
  }
@@ -87,7 +87,7 @@ function renderMap<T extends Record<string, any>>(property: ResolvedMapProperty<
87
87
  mapPropertyKeys = (property.previewProperties || Object.keys(property.properties)) as string[];
88
88
  if (size === "small")
89
89
  mapPropertyKeys = mapPropertyKeys.slice(0, 3);
90
- else if (size === "tiny")
90
+ else if (size === "smallest")
91
91
  mapPropertyKeys = mapPropertyKeys.slice(0, 1);
92
92
  }
93
93
 
@@ -226,7 +226,7 @@ function renderUrlAudioComponent() {
226
226
 
227
227
  export function renderSkeletonImageThumbnail(size: PreviewSize) {
228
228
  // eslint-disable-next-line react-hooks/rules-of-hooks
229
- const imageSize = size === "tiny" ? 40 : size === "small" ? 100 : 200;
229
+ const imageSize = size === "smallest" ? 40 : size === "small" ? 100 : 200;
230
230
  return (
231
231
  <Skeleton width={imageSize}
232
232
  height={imageSize}/>
@@ -6,7 +6,7 @@ import { PreviewType } from "../../types";
6
6
  import { UrlComponentPreview } from "../components/UrlComponentPreview";
7
7
  import { PropertyPreviewProps } from "../PropertyPreviewProps";
8
8
  import { ErrorBoundary } from "../../components";
9
- import { Chip, cn, getColorSchemeForSeed } from "@firecms/ui";
9
+ import { Chip, cls, getColorSchemeForSeed } from "@firecms/ui";
10
10
 
11
11
  /**
12
12
  * @group Preview components
@@ -45,14 +45,14 @@ export function StringPropertyPreview({
45
45
  if (!value) return <></>;
46
46
  const lines = value.split("\n");
47
47
  return value && value.includes("\n")
48
- ? <div className={cn("overflow-x-scroll", size === "tiny" ? "text-sm" : "")}>
48
+ ? <div className={cls("overflow-x-scroll", size === "smallest" ? "text-sm" : "")}>
49
49
  {lines.map((str, index) =>
50
50
  <React.Fragment key={`string_preview_${index}`}>
51
51
  <span>{str}</span>
52
52
  {index !== lines.length - 1 && <br/>}
53
53
  </React.Fragment>)}
54
54
  </div>
55
- : (size === "tiny"
55
+ : (size === "smallest"
56
56
  ? <span className={"text-sm"}>{value}</span>
57
57
  : <>{value}</>
58
58
  );
@@ -6,7 +6,7 @@ export const SMALL_THUMBNAIL = 100;
6
6
  export const REGULAR_THUMBNAIL = 200;
7
7
 
8
8
  export function getThumbnailMeasure(size: PreviewSize): number {
9
- if (size === "tiny")
9
+ if (size === "smallest")
10
10
  return TINY_THUMBNAIL;
11
11
  else if (size === "small")
12
12
  return SMALL_THUMBNAIL;
@@ -19,7 +19,7 @@ export function getPreviewSizeFrom(size: CollectionSize): PreviewSize {
19
19
  switch (size) {
20
20
  case "xs":
21
21
  case "s":
22
- return "tiny";
22
+ return "smallest";
23
23
  case "m":
24
24
  return "small";
25
25
  case "l":
@@ -9,7 +9,7 @@ import { StorageSource } from "./storage";
9
9
  * to do it as the result of a hook.
10
10
  * @group Hooks and utilities
11
11
  */
12
- export type AuthController<UserType extends User = any, ExtraData extends any = any> = {
12
+ export type AuthController<UserType extends User = any, ExtraData = any> = {
13
13
 
14
14
  /**
15
15
  * The user currently logged in
@@ -38,7 +38,7 @@ export type AuthController<UserType extends User = any, ExtraData extends any =
38
38
  /**
39
39
  * Sign out
40
40
  */
41
- signOut: () => void;
41
+ signOut: () => Promise<void>;
42
42
 
43
43
  /**
44
44
  * Error initializing the authentication
@@ -73,7 +73,7 @@ export type AuthController<UserType extends User = any, ExtraData extends any =
73
73
  * Implement this function to allow access to specific users.
74
74
  * @group Hooks and utilities
75
75
  */
76
- export type Authenticator<UserType extends User = User, Controller extends AuthController<UserType> = AuthController<UserType>> = ({ user }: {
76
+ export type Authenticator<UserType extends User = User, Controller extends AuthController<UserType> = AuthController<UserType>> = (props: {
77
77
 
78
78
  /**
79
79
  * Logged-in user or null
@@ -51,6 +51,12 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
51
51
  */
52
52
  path: string;
53
53
 
54
+ /**
55
+ * Optional database id of this collection. If not specified, the default
56
+ * database id will be used.
57
+ */
58
+ databaseId?: string;
59
+
54
60
  /**
55
61
  * If this collection is a top level navigation entry, you can set this
56
62
  * property to `true` to indicate that this collection is a collection group.
@@ -61,7 +67,8 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
61
67
  * Icon key to use in this collection.
62
68
  * You can use any of the icons in the Material specs:
63
69
  * https://fonts.google.com/icons
64
- * e.g. 'account_tree' or 'person'
70
+ * e.g. 'account_tree' or 'person'.
71
+ * Find all the icons in https://firecms.co/docs/icons
65
72
  */
66
73
  icon?: string;
67
74
 
@@ -82,7 +89,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
82
89
  * as the title in entity related views and references.
83
90
  * If not specified, the first property simple text property will be used.
84
91
  */
85
- titleProperty?: keyof M,
92
+ titleProperty?: keyof M;
86
93
 
87
94
  /**
88
95
  * Can this collection be edited by the end user.
@@ -107,8 +114,12 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
107
114
  * `subcollection:`. e.g. `subcollection:orders`.
108
115
  * - If you are using a collection group, you will also have an
109
116
  * additional `collectionGroupParent` column.
117
+ * You can use this prop to hide some properties from the table view.
118
+ * Note that if you set this prop, other ways to hide fields, like
119
+ * `hidden` in the property definition,will be ignored.
120
+ * `propertiesOrder` has precedence over `hidden`.
110
121
  */
111
- propertiesOrder?: Extract<keyof M, string>[];
122
+ propertiesOrder?: (Extract<keyof M, string> | `subcollection:${string}`)[];
112
123
 
113
124
  /**
114
125
  * If enabled, content is loaded in batches. If `false` all entities in the
@@ -290,7 +301,21 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
290
301
  * are writing custom code
291
302
  */
292
303
  ownerId?: string;
304
+
305
+ /**
306
+ * Overrides for the entity view, like the data source or the storage source.
307
+ */
293
308
  overrides?: EntityOverrides;
309
+
310
+ /**
311
+ * Width of the side dialog (in pixels) when opening an entity in this collection.
312
+ */
313
+ sideDialogWidth?: number | string;
314
+
315
+ /**
316
+ * Default preview properties displayed when this collection is referenced to.
317
+ */
318
+ previewProperties?: string[];
294
319
  }
295
320
 
296
321
  /**
@@ -349,14 +374,13 @@ export interface CollectionActionsProps<M extends Record<string, any> = any, Use
349
374
  /**
350
375
  * Use this controller to retrieve the selected entities or modify them in
351
376
  * an {@link EntityCollection}
352
- * If you want to pass a `SelectionController` to
353
377
  * @group Models
354
378
  */
355
379
  export type SelectionController<M extends Record<string, any> = any> = {
356
380
  selectedEntities: Entity<M>[];
357
381
  setSelectedEntities: Dispatch<SetStateAction<Entity<M>[]>>;
358
382
  isEntitySelected: (entity: Entity<M>) => boolean;
359
- toggleEntitySelection: (entity: Entity<M>) => void;
383
+ toggleEntitySelection: (entity: Entity<M>, newSelectedState?: boolean) => void;
360
384
  }
361
385
 
362
386
  /**
@@ -451,7 +475,10 @@ export interface AdditionalFieldDelegate<M extends Record<string, any> = any,
451
475
  * view.
452
476
  * @param entity
453
477
  */
454
- value?: (props: { entity: Entity<M>, context: FireCMSContext<any> }) => string | number | Promise<string | number> | undefined;
478
+ value?: (props: {
479
+ entity: Entity<M>,
480
+ context: FireCMSContext<any>
481
+ }) => string | number | Promise<string | number> | undefined;
455
482
  }
456
483
 
457
484
  /**
@@ -461,8 +488,22 @@ export interface AdditionalFieldDelegate<M extends Record<string, any> = any,
461
488
  */
462
489
  export type EntityCustomView<M extends Record<string, any> = any> =
463
490
  {
491
+ /**
492
+ * Key of this custom view.
493
+ */
464
494
  key: string,
495
+ /**
496
+ * Name of this custom view.
497
+ */
465
498
  name: string,
499
+ /**
500
+ * If set to true, the actions of the entity will be included in the
501
+ * bottom of the panel (save buttons, delete buttons, etc.)
502
+ */
503
+ includeActions?: boolean;
504
+ /**
505
+ * Builder for rendering the custom view
506
+ */
466
507
  Builder?: React.ComponentType<EntityCustomViewParams<M>>;
467
508
  }
468
509
 
@@ -523,7 +564,7 @@ export type EntityTableController<M extends Record<string, any> = any> = {
523
564
  filterValues?: FilterValues<Extract<keyof M, string>>;
524
565
  setFilterValues?: (filterValues: FilterValues<Extract<keyof M, string>>) => void;
525
566
  sortBy?: [Extract<keyof M, string>, "asc" | "desc"];
526
- setSortBy?: (sortBy: [Extract<keyof M, string>, "asc" | "desc"]) => void;
567
+ setSortBy?: (sortBy?: [Extract<keyof M, string>, "asc" | "desc"]) => void;
527
568
  searchString?: string;
528
569
  setSearchString?: (searchString?: string) => void;
529
570
  clearFilter?: () => void;
@@ -24,7 +24,6 @@ export type CustomizationController = {
24
24
  *
25
25
  * You can also define an entity view from the UI.
26
26
  */
27
-
28
27
  entityViews?: EntityCustomView[];
29
28
 
30
29
  /**
@@ -1,6 +1,7 @@
1
- import { Entity, EntityReference, EntityStatus, EntityValues, GeoPoint } from "./entities";
1
+ import { Entity, EntityStatus, EntityValues } from "./entities";
2
2
  import { EntityCollection, FilterValues } from "./collections";
3
3
  import { ResolvedEntityCollection } from "./resolved_entities";
4
+ import { FireCMSContext } from "./firecms_context";
4
5
 
5
6
  /**
6
7
  * @group Datasource
@@ -17,6 +18,7 @@ export interface FetchEntityProps<M extends Record<string, any> = any> {
17
18
  export type ListenEntityProps<M extends Record<string, any> = any> =
18
19
  FetchEntityProps<M>
19
20
  & {
21
+ databaseId?: string;
20
22
  onUpdate: (entity: Entity<M>) => void,
21
23
  onError?: (error: Error) => void,
22
24
  }
@@ -65,9 +67,8 @@ export interface DeleteEntityProps<M extends Record<string, any> = any> {
65
67
  }
66
68
 
67
69
  /**
68
- * Implement this interface and pass it to a {@link FireCMS}
69
- * to connect it to your data source.
70
- * A Firestore implementation of this interface can be found in {@link useFirestoreDataSource}
70
+ * Component in charge of communicating with the data source.
71
+ * Usually you won't need to implement this interface, but a {@link DataSourceDelegate} instead.
71
72
  * @group Datasource
72
73
  */
73
74
  export interface DataSource {
@@ -198,7 +199,8 @@ export interface DataSource {
198
199
  path: string,
199
200
  name: string,
200
201
  value: any,
201
- entityId?: string
202
+ entityId?: string,
203
+ databaseId?: string
202
204
  ): Promise<boolean>;
203
205
 
204
206
  /**
@@ -216,6 +218,19 @@ export interface DataSource {
216
218
  * @param props
217
219
  */
218
220
  isFilterCombinationValid?(props: FilterCombinationValidProps): boolean;
221
+
222
+ /**
223
+ * Called when the user clicks on the search bar in a collection view.
224
+ * Useful for initializing a text search index.
225
+ * @param props
226
+ */
227
+ initTextSearch?: (props: {
228
+ context: FireCMSContext,
229
+ path: string,
230
+ collection: EntityCollection,
231
+ parentCollectionIds?: string[]
232
+ }) => Promise<boolean>;
233
+
219
234
  }
220
235
 
221
236
  export type FilterCombinationValidProps = {
@@ -225,21 +240,24 @@ export type FilterCombinationValidProps = {
225
240
  sortBy?: [string, "asc" | "desc"];
226
241
  };
227
242
 
228
- export type SaveEntityDelegateProps<M extends Record<string, any> = any> = Omit<SaveEntityProps<M>, "collection">;
243
+ export type SaveEntityDelegateProps<M extends Record<string, any> = any> = SaveEntityProps<M>;
229
244
 
230
- export type FetchCollectionDelegateProps<M extends Record<string, any> = any> =
231
- Omit<FetchCollectionProps<M>, "collection">
232
- & {
233
- isCollectionGroup?: boolean
234
- };
245
+ export type FetchCollectionDelegateProps<M extends Record<string, any> = any> = FetchCollectionProps<M>;
235
246
 
236
- export type ListenCollectionDelegateProps<M extends Record<string, any> = any> =
237
- ListenCollectionProps<M>
238
- & {
239
- isCollectionGroup?: boolean;
240
- };
247
+ export type ListenCollectionDelegateProps<M extends Record<string, any> = any> = ListenCollectionProps<M>;
241
248
 
242
249
  export interface DataSourceDelegate {
250
+
251
+ /**
252
+ * Key that identifies this data source delegate
253
+ */
254
+ key: string;
255
+
256
+ /**
257
+ * If the data source has been initialised
258
+ */
259
+ initialised?: boolean;
260
+
243
261
  /**
244
262
  * Fetch data from a collection
245
263
  * @param path
@@ -297,7 +315,7 @@ export interface DataSourceDelegate {
297
315
  fetchEntity<M extends Record<string, any> = any>({
298
316
  path,
299
317
  entityId,
300
- }: Omit<FetchEntityProps<M>, "collection">): Promise<Entity<M> | undefined>;
318
+ }: FetchEntityProps<M>): Promise<Entity<M> | undefined>;
301
319
 
302
320
  /**
303
321
  * Get realtime updates on one entity.
@@ -313,13 +331,13 @@ export interface DataSourceDelegate {
313
331
  entityId,
314
332
  onUpdate,
315
333
  onError
316
- }: Omit<ListenEntityProps<M>, "collection">): () => void;
334
+ }: ListenEntityProps<M>): () => void;
317
335
 
318
336
  /**
319
337
  * Save entity to the specified path
320
338
  * @param path
321
- * @param id
322
- * @param collection
339
+ * @param entityId
340
+ * @param values
323
341
  * @param status
324
342
  */
325
343
  saveEntity<M extends Record<string, any> = any>({
@@ -344,7 +362,7 @@ export interface DataSourceDelegate {
344
362
  * @param entityId
345
363
  * @return `true` if there are no other fields besides the given entity
346
364
  */
347
- checkUniqueField(path: string, name: string, value: any, entityId?: string): Promise<boolean>;
365
+ checkUniqueField(path: string, name: string, value: any, entityId?: string, databaseId?: string): Promise<boolean>;
348
366
 
349
367
  /**
350
368
  * Generate an id for a new entity
@@ -360,30 +378,26 @@ export interface DataSourceDelegate {
360
378
  * Check if the given filter combination is valid
361
379
  * @param props
362
380
  */
363
- isFilterCombinationValid?(props: Omit<FilterCombinationValidProps, "collection">): boolean;
364
-
365
- /**
366
- * Convert a FireCMS reference to a reference that can be used by the datasource
367
- * @param reference
368
- */
369
- buildReference: (reference: EntityReference) => any,
370
-
371
- /**
372
- * Convert a FireCMS GeoPoint to a GeoPoint that can be used by the datasource
373
- * @param geoPoint
374
- */
375
- buildGeoPoint: (geoPoint: GeoPoint) => any,
381
+ isFilterCombinationValid?(props: Omit<FilterCombinationValidProps, "collection"> & {
382
+ databaseId?: string
383
+ }): boolean;
376
384
 
377
385
  /**
378
386
  * Get the object to generate the current time in the datasource
379
387
  */
380
- currentTime(): any;
381
-
382
- buildDate: (date: Date) => any;
383
-
384
- buildDeleteFieldValue: () => any;
388
+ currentTime?: () => any;
385
389
 
386
390
  delegateToCMSModel: (data: any) => any;
387
391
 
392
+ cmsToDelegateModel: (data: any) => any;
393
+
388
394
  setDateToMidnight: (input?: any) => any;
395
+
396
+ initTextSearch?: (props: {
397
+ context: FireCMSContext,
398
+ path: string,
399
+ databaseId?: string,
400
+ collection: EntityCollection,
401
+ parentCollectionIds?: string[]
402
+ }) => Promise<boolean>;
389
403
  }
@@ -25,6 +25,8 @@ export interface Entity<M extends object> {
25
25
  * Current values
26
26
  */
27
27
  values: EntityValues<M>;
28
+
29
+ databaseId?: string;
28
30
  }
29
31
 
30
32
  /**
@@ -37,7 +39,7 @@ export type EntityValues<M extends object> = M;
37
39
  /**
38
40
  * Class used to create a reference to an entity in a different path
39
41
  */
40
- export class EntityReference<M extends Record<string, any> = any> {
42
+ export class EntityReference {
41
43
  /**
42
44
  * ID of the entity
43
45
  */
@@ -78,3 +80,11 @@ export class GeoPoint {
78
80
  this.longitude = longitude;
79
81
  }
80
82
  }
83
+
84
+ export class Vector {
85
+ readonly value: number[];
86
+
87
+ constructor(value: number[]) {
88
+ this.value = value;
89
+ }
90
+ }
@@ -4,11 +4,26 @@ 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
- import { EntityOverrides } from "./entity_overrides";
8
7
 
8
+ /**
9
+ * An entity action is a custom action that can be performed on an entity.
10
+ * They are displayed in the entity view and in the collection view.
11
+ */
9
12
  export type EntityAction<M extends object = any, UserType extends User = User> = {
13
+ /**
14
+ * Title of the action
15
+ */
10
16
  name: string;
17
+
18
+ /**
19
+ * Icon of the action
20
+ */
11
21
  icon?: React.ReactElement;
22
+
23
+ /**
24
+ * Callback when the action is clicked
25
+ * @param props
26
+ */
12
27
  onClick: (props: EntityActionClickProps<M, UserType>) => Promise<void> | void;
13
28
 
14
29
  /**
@@ -25,8 +40,6 @@ export type EntityAction<M extends object = any, UserType extends User = User> =
25
40
 
26
41
  }
27
42
 
28
-
29
-
30
43
  export type EntityActionClickProps<M extends object, UserType extends User = User> = {
31
44
  entity: Entity<M>;
32
45
  context: FireCMSContext<UserType>;