@firecms/core 3.0.0-canary.15 → 3.0.0-canary.150

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 (326) hide show
  1. package/README.md +3 -3
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +16 -0
  4. package/dist/app/Scaffold.d.ts +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 -6
  8. package/dist/components/CircularProgressCenter.d.ts +1 -1
  9. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  10. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  11. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +11 -12
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +7 -5
  14. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
  15. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  16. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
  17. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  18. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  19. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +7 -4
  20. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +12 -2
  21. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  22. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  23. package/dist/components/EntityPreview.d.ts +7 -6
  24. package/dist/components/ErrorView.d.ts +1 -1
  25. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  26. package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
  27. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  28. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  29. package/dist/components/ReferenceWidget.d.ts +3 -1
  30. package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
  31. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  32. package/dist/components/VirtualTable/VirtualTableProps.d.ts +15 -12
  33. package/dist/components/VirtualTable/types.d.ts +3 -3
  34. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
  35. package/dist/components/common/index.d.ts +1 -0
  36. package/dist/components/common/table_height.d.ts +5 -0
  37. package/dist/components/common/types.d.ts +4 -6
  38. package/dist/components/common/useColumnsIds.d.ts +2 -1
  39. package/dist/components/common/useDataSourceEntityCollectionTableController.d.ts +4 -1
  40. package/dist/components/index.d.ts +4 -2
  41. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
  42. package/dist/core/DefaultDrawer.d.ts +19 -0
  43. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  44. package/dist/core/EntityEditView.d.ts +18 -4
  45. package/dist/core/FireCMS.d.ts +2 -2
  46. package/dist/core/NavigationRoutes.d.ts +3 -3
  47. package/dist/core/index.d.ts +3 -4
  48. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  49. package/dist/form/components/ErrorFocus.d.ts +1 -1
  50. package/dist/form/components/FieldHelperText.d.ts +3 -3
  51. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  52. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  53. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  54. package/dist/form/components/index.d.ts +1 -1
  55. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  56. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  57. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  58. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  59. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  60. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  61. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  62. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  63. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  64. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  65. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  66. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
  67. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  68. package/dist/form/index.d.ts +3 -5
  69. package/dist/form/useClearRestoreValue.d.ts +2 -2
  70. package/dist/hooks/data/delete.d.ts +4 -4
  71. package/dist/hooks/data/save.d.ts +4 -5
  72. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  73. package/dist/hooks/data/useEntityFetch.d.ts +3 -3
  74. package/dist/hooks/index.d.ts +1 -0
  75. package/dist/hooks/useAuthController.d.ts +1 -1
  76. package/dist/hooks/useBuildNavigationController.d.ts +3 -4
  77. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  78. package/dist/hooks/useProjectLog.d.ts +8 -2
  79. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  80. package/dist/hooks/useValidateAuthenticator.d.ts +5 -9
  81. package/dist/index.d.ts +1 -0
  82. package/dist/index.es.js +16536 -13058
  83. package/dist/index.es.js.map +1 -1
  84. package/dist/index.umd.js +20159 -587
  85. package/dist/index.umd.js.map +1 -1
  86. package/dist/internal/useBuildDataSource.d.ts +1 -16
  87. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  88. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  89. package/dist/preview/components/ReferencePreview.d.ts +3 -2
  90. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  91. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  92. package/dist/types/auth.d.ts +7 -11
  93. package/dist/types/collections.d.ts +53 -18
  94. package/dist/types/datasource.d.ts +51 -35
  95. package/dist/types/entities.d.ts +6 -1
  96. package/dist/types/entity_actions.d.ts +18 -4
  97. package/dist/types/entity_callbacks.d.ts +16 -16
  98. package/dist/types/entity_overrides.d.ts +2 -2
  99. package/dist/types/export_import.d.ts +4 -4
  100. package/dist/types/fields.d.ts +63 -41
  101. package/dist/types/firecms.d.ts +6 -2
  102. package/dist/types/firecms_context.d.ts +1 -1
  103. package/dist/types/index.d.ts +0 -1
  104. package/dist/types/navigation.d.ts +6 -5
  105. package/dist/types/permissions.d.ts +4 -4
  106. package/dist/types/plugins.d.ts +22 -12
  107. package/dist/types/properties.d.ts +34 -21
  108. package/dist/types/property_config.d.ts +0 -2
  109. package/dist/types/side_dialogs_controller.d.ts +10 -0
  110. package/dist/types/storage.d.ts +86 -3
  111. package/dist/types/user.d.ts +1 -0
  112. package/dist/util/builders.d.ts +2 -2
  113. package/dist/util/entities.d.ts +2 -2
  114. package/dist/util/icon_list.d.ts +5 -1
  115. package/dist/util/icon_synonyms.d.ts +1 -97
  116. package/dist/util/icons.d.ts +6 -3
  117. package/dist/util/index.d.ts +1 -0
  118. package/dist/util/navigation_utils.d.ts +2 -2
  119. package/dist/util/objects.d.ts +2 -1
  120. package/dist/util/permissions.d.ts +4 -4
  121. package/dist/util/plurals.d.ts +0 -2
  122. package/dist/util/property_utils.d.ts +3 -3
  123. package/dist/util/resolutions.d.ts +30 -16
  124. package/dist/util/storage.d.ts +23 -2
  125. package/dist/util/useStorageUploadController.d.ts +3 -3
  126. package/package.json +128 -119
  127. package/src/app/AppBar.tsx +18 -0
  128. package/src/app/Drawer.tsx +24 -0
  129. package/src/app/Scaffold.tsx +243 -0
  130. package/src/app/index.ts +4 -0
  131. package/src/app/useApp.tsx +32 -0
  132. package/src/components/ArrayContainer.tsx +92 -25
  133. package/src/components/CircularProgressCenter.tsx +2 -2
  134. package/src/components/ClearFilterSortButton.tsx +41 -0
  135. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +1 -1
  136. package/src/components/DeleteEntityDialog.tsx +1 -1
  137. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +13 -20
  138. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +25 -24
  139. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +12 -8
  140. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -39
  141. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  142. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +31 -17
  143. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +16 -8
  144. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +29 -34
  145. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
  146. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +19 -7
  147. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +82 -75
  148. package/src/components/EntityCollectionView/EntityCollectionView.tsx +139 -87
  149. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  150. package/src/components/EntityCollectionView/useSelectionController.tsx +19 -7
  151. package/src/components/EntityCollectionView/utils.ts +19 -0
  152. package/src/components/EntityPreview.tsx +47 -41
  153. package/src/components/EntityView.tsx +10 -10
  154. package/src/components/ErrorView.tsx +3 -3
  155. package/src/components/HomePage/DefaultHomePage.tsx +25 -19
  156. package/src/components/HomePage/FavouritesView.tsx +1 -1
  157. package/src/components/HomePage/NavigationCard.tsx +4 -4
  158. package/src/components/HomePage/NavigationCardBinding.tsx +2 -2
  159. package/src/components/HomePage/NavigationGroup.tsx +2 -2
  160. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  161. package/src/components/PropertyConfigBadge.tsx +9 -3
  162. package/src/components/PropertyIdCopyTooltip.tsx +48 -0
  163. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +8 -7
  164. package/src/components/ReferenceWidget.tsx +22 -12
  165. package/src/components/SearchIconsView.tsx +10 -7
  166. package/src/components/SelectableTable/SelectableTable.tsx +9 -9
  167. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  168. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +22 -7
  169. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +28 -6
  170. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +88 -21
  171. package/src/components/VirtualTable/VirtualTable.tsx +77 -46
  172. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  173. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  174. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  175. package/src/components/VirtualTable/VirtualTableProps.tsx +18 -14
  176. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  177. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
  178. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -1
  179. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  180. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +14 -28
  181. package/src/components/VirtualTable/types.tsx +2 -3
  182. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +8 -4
  183. package/src/components/common/index.ts +1 -0
  184. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  185. package/src/components/common/types.tsx +4 -6
  186. package/src/components/common/useColumnsIds.tsx +23 -2
  187. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +25 -14
  188. package/src/components/common/useTableSearchHelper.ts +53 -12
  189. package/src/components/index.tsx +4 -2
  190. package/src/contexts/DialogsProvider.tsx +2 -2
  191. package/src/core/DefaultAppBar.tsx +178 -0
  192. package/src/core/DefaultDrawer.tsx +183 -0
  193. package/src/core/DrawerNavigationItem.tsx +66 -0
  194. package/src/core/EntityEditView.tsx +717 -154
  195. package/src/core/EntitySidePanel.tsx +1 -2
  196. package/src/core/FireCMS.tsx +54 -53
  197. package/src/core/NavigationRoutes.tsx +7 -8
  198. package/src/core/SideDialogs.tsx +2 -1
  199. package/src/core/field_configs.tsx +8 -9
  200. package/src/core/index.tsx +3 -4
  201. package/src/form/PropertyFieldBinding.tsx +74 -35
  202. package/src/form/components/CustomIdField.tsx +4 -2
  203. package/src/form/components/FieldHelperText.tsx +4 -4
  204. package/src/form/components/LabelWithIcon.tsx +27 -19
  205. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  206. package/src/form/components/StorageItemPreview.tsx +22 -12
  207. package/src/form/components/StorageUploadProgress.tsx +3 -4
  208. package/src/form/components/index.tsx +1 -1
  209. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +29 -17
  210. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +45 -35
  211. package/src/form/field_bindings/BlockFieldBinding.tsx +51 -32
  212. package/src/form/field_bindings/DateTimeFieldBinding.tsx +17 -14
  213. package/src/form/field_bindings/KeyValueFieldBinding.tsx +54 -45
  214. package/src/form/field_bindings/MapFieldBinding.tsx +65 -48
  215. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +150 -0
  216. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
  217. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  218. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  219. package/src/form/field_bindings/RepeatFieldBinding.tsx +52 -34
  220. package/src/form/field_bindings/SelectFieldBinding.tsx +20 -13
  221. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +36 -46
  222. package/src/form/field_bindings/SwitchFieldBinding.tsx +9 -5
  223. package/src/form/field_bindings/TextFieldBinding.tsx +26 -23
  224. package/src/form/index.tsx +4 -9
  225. package/src/form/useClearRestoreValue.tsx +2 -2
  226. package/src/form/validation.ts +1 -17
  227. package/src/hooks/data/delete.ts +6 -5
  228. package/src/hooks/data/save.ts +12 -8
  229. package/src/hooks/data/useCollectionFetch.tsx +2 -2
  230. package/src/hooks/data/useDataSource.tsx +11 -3
  231. package/src/hooks/data/useEntityFetch.tsx +5 -5
  232. package/src/hooks/index.tsx +1 -0
  233. package/src/hooks/useAuthController.tsx +1 -1
  234. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  235. package/src/hooks/useBuildModeController.tsx +11 -5
  236. package/src/hooks/useBuildNavigationController.tsx +92 -34
  237. package/src/hooks/useFireCMSContext.tsx +5 -5
  238. package/src/hooks/useProjectLog.tsx +32 -10
  239. package/src/hooks/useResolvedNavigationFrom.tsx +6 -6
  240. package/src/hooks/useValidateAuthenticator.tsx +21 -41
  241. package/src/index.ts +1 -0
  242. package/src/internal/useBuildDataSource.ts +72 -82
  243. package/src/internal/useBuildSideDialogsController.tsx +1 -0
  244. package/src/internal/useBuildSideEntityController.tsx +102 -22
  245. package/src/internal/useUnsavedChangesDialog.tsx +3 -1
  246. package/src/preview/PropertyPreview.tsx +11 -18
  247. package/src/preview/PropertyPreviewProps.tsx +7 -1
  248. package/src/preview/components/BooleanPreview.tsx +2 -2
  249. package/src/preview/components/EmptyValue.tsx +1 -1
  250. package/src/preview/components/EnumValuesChip.tsx +2 -2
  251. package/src/preview/components/ImagePreview.tsx +25 -35
  252. package/src/preview/components/ReferencePreview.tsx +23 -34
  253. package/src/preview/components/StorageThumbnail.tsx +5 -1
  254. package/src/preview/components/UrlComponentPreview.tsx +44 -11
  255. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
  256. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
  257. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
  258. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
  259. package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
  260. package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
  261. package/src/preview/property_previews/MapPropertyPreview.tsx +6 -6
  262. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +2 -2
  263. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  264. package/src/preview/util.ts +2 -2
  265. package/src/types/auth.tsx +7 -13
  266. package/src/types/collections.ts +62 -20
  267. package/src/types/customization_controller.tsx +0 -1
  268. package/src/types/datasource.ts +60 -43
  269. package/src/types/entities.ts +11 -1
  270. package/src/types/entity_actions.tsx +20 -7
  271. package/src/types/entity_callbacks.ts +18 -18
  272. package/src/types/entity_overrides.tsx +2 -2
  273. package/src/types/export_import.ts +4 -4
  274. package/src/types/fields.tsx +69 -45
  275. package/src/types/firecms.tsx +7 -2
  276. package/src/types/firecms_context.tsx +1 -1
  277. package/src/types/index.ts +0 -1
  278. package/src/types/navigation.ts +7 -7
  279. package/src/types/permissions.ts +5 -5
  280. package/src/types/plugins.tsx +24 -14
  281. package/src/types/properties.ts +39 -22
  282. package/src/types/property_config.tsx +0 -2
  283. package/src/types/side_dialogs_controller.tsx +13 -0
  284. package/src/types/storage.ts +94 -3
  285. package/src/types/user.ts +2 -0
  286. package/src/util/builders.ts +6 -6
  287. package/src/util/entities.ts +6 -5
  288. package/src/util/enums.ts +1 -1
  289. package/src/util/icon_list.ts +15 -10
  290. package/src/util/icon_synonyms.ts +3 -99
  291. package/src/util/icons.tsx +17 -7
  292. package/src/util/index.ts +1 -0
  293. package/src/util/make_properties_editable.ts +13 -5
  294. package/src/util/navigation_utils.ts +6 -6
  295. package/src/util/objects.ts +45 -28
  296. package/src/util/permissions.ts +9 -8
  297. package/src/util/plurals.ts +0 -2
  298. package/src/util/property_utils.tsx +11 -4
  299. package/src/util/references.ts +3 -0
  300. package/src/util/resolutions.ts +79 -46
  301. package/src/util/storage.ts +79 -21
  302. package/src/util/strings.ts +2 -2
  303. package/src/util/useStorageUploadController.tsx +33 -7
  304. package/src/util/useTraceUpdate.tsx +1 -0
  305. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  306. package/dist/components/VirtualTable/common.d.ts +0 -2
  307. package/dist/core/Drawer.d.ts +0 -23
  308. package/dist/core/Scaffold.d.ts +0 -55
  309. package/dist/core/SideEntityView.d.ts +0 -7
  310. package/dist/form/EntityForm.d.ts +0 -77
  311. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  312. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  313. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  314. package/dist/internal/useLocaleConfig.d.ts +0 -1
  315. package/dist/types/appcheck.d.ts +0 -26
  316. package/src/components/FireCMSAppBar.tsx +0 -165
  317. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  318. package/src/core/Drawer.tsx +0 -191
  319. package/src/core/Scaffold.tsx +0 -281
  320. package/src/core/SideEntityView.tsx +0 -38
  321. package/src/form/EntityForm.tsx +0 -728
  322. package/src/form/components/FormikArrayContainer.tsx +0 -44
  323. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  324. package/src/internal/useBuildCustomizationController.tsx +0 -5
  325. package/src/internal/useLocaleConfig.tsx +0 -18
  326. package/src/types/appcheck.ts +0 -29
@@ -5,12 +5,11 @@ import {
5
5
  DeleteEntityProps,
6
6
  Entity,
7
7
  EntityCollection,
8
- EntityReference,
9
8
  EntityValues,
10
9
  FetchCollectionProps,
11
10
  FetchEntityProps,
12
11
  FilterValues,
13
- GeoPoint,
12
+ FireCMSContext,
14
13
  ListenCollectionProps,
15
14
  ListenEntityProps,
16
15
  NavigationController,
@@ -53,23 +52,25 @@ export function useBuildDataSource({
53
52
  */
54
53
  fetchCollection: useCallback(<M extends Record<string, any>>({
55
54
  path,
56
- collection: collectionProp,
55
+ collection,
57
56
  filter,
58
57
  limit,
59
58
  startAfter,
60
59
  searchString,
61
60
  orderBy,
62
- order
61
+ order,
63
62
  }: FetchCollectionProps<M>
64
63
  ): Promise<Entity<M>[]> => {
65
- return delegate.fetchCollection<M>({
64
+ const usedDelegate = collection?.overrides?.dataSourceDelegate ?? delegate;
65
+ return usedDelegate.fetchCollection<M>({
66
66
  path,
67
67
  filter,
68
68
  limit,
69
69
  startAfter,
70
70
  searchString,
71
71
  orderBy,
72
- order
72
+ order,
73
+ collection
73
74
  });
74
75
  }, [delegate]),
75
76
 
@@ -90,7 +91,6 @@ export function useBuildDataSource({
90
91
  * @group Firestore
91
92
  */
92
93
  listenCollection: delegate.listenCollection
93
- // eslint-disable-next-line react-hooks/rules-of-hooks
94
94
  ? useCallback(<M extends Record<string, any>>(
95
95
  {
96
96
  path,
@@ -107,11 +107,12 @@ export function useBuildDataSource({
107
107
  ): () => void => {
108
108
 
109
109
  const collection = collectionProp ?? navigationController.getCollection(path);
110
- const isCollectionGroup = Boolean(collection?.collectionGroup) ?? false;
111
- if (!delegate.listenCollection)
110
+ const usedDelegate = collection?.overrides?.dataSourceDelegate ?? delegate;
111
+
112
+ if (!usedDelegate.listenCollection)
112
113
  throw Error("useBuildDataSource delegate not initialised");
113
114
 
114
- return delegate.listenCollection<M>({
115
+ return usedDelegate.listenCollection<M>({
115
116
  path,
116
117
  filter,
117
118
  limit,
@@ -121,8 +122,7 @@ export function useBuildDataSource({
121
122
  order,
122
123
  onUpdate,
123
124
  onError,
124
- isCollectionGroup,
125
- collection
125
+ collection,
126
126
  });
127
127
  }, [delegate, navigationController.getCollection])
128
128
  : undefined,
@@ -136,12 +136,17 @@ export function useBuildDataSource({
136
136
  */
137
137
  fetchEntity: useCallback(<M extends Record<string, any>>({
138
138
  path,
139
- entityId
139
+ entityId,
140
+ collection
140
141
  }: FetchEntityProps<M>
141
- ): Promise<Entity<M> | undefined> => delegate.fetchEntity({
142
- path,
143
- entityId
144
- }), [delegate]),
142
+ ): Promise<Entity<M> | undefined> => {
143
+ const usedDelegate = collection?.overrides?.dataSourceDelegate ?? delegate;
144
+ return usedDelegate.fetchEntity({
145
+ path,
146
+ entityId,
147
+ collection
148
+ });
149
+ }, [delegate.fetchEntity]),
145
150
 
146
151
  /**
147
152
  *
@@ -154,7 +159,6 @@ export function useBuildDataSource({
154
159
  * @group Firestore
155
160
  */
156
161
  listenEntity: delegate.listenEntity
157
- // eslint-disable-next-line react-hooks/rules-of-hooks
158
162
  ? useCallback(<M extends Record<string, any>>(
159
163
  {
160
164
  path,
@@ -163,14 +167,17 @@ export function useBuildDataSource({
163
167
  onUpdate,
164
168
  onError
165
169
  }: ListenEntityProps<M>): () => void => {
166
- if (!delegate.listenEntity)
170
+ const usedDelegate = collection?.overrides?.dataSourceDelegate ?? delegate;
171
+
172
+ if (!usedDelegate.listenEntity)
167
173
  throw Error("useBuildDataSource delegate not initialised");
168
174
 
169
- return delegate.listenEntity<M>({
175
+ return usedDelegate.listenEntity<M>({
170
176
  path,
171
177
  entityId,
172
178
  onUpdate,
173
- onError
179
+ onError,
180
+ collection
174
181
  })
175
182
  }, [delegate.listenEntity]) : undefined,
176
183
 
@@ -195,46 +202,45 @@ export function useBuildDataSource({
195
202
  }: SaveEntityProps<M>): Promise<Entity<M>> => {
196
203
 
197
204
  const collection = collectionProp ?? navigationController.getCollection(path);
205
+ const usedDelegate = collection?.overrides?.dataSourceDelegate ?? delegate;
198
206
 
199
207
  const resolvedCollection = collection
200
208
  ? resolveCollection<M>({
201
209
  collection,
202
210
  path,
203
211
  entityId,
204
- fields: propertyConfigs
212
+ propertyConfigs: propertyConfigs
205
213
  })
206
214
  : undefined;
207
215
 
208
216
  const properties: ResolvedProperties<M> | undefined = resolvedCollection?.properties;
209
217
 
210
- const firestoreValues = cmsToDelegateModel(
218
+ const firestoreValues = usedDelegate.cmsToDelegateModel(
211
219
  values,
212
- delegate.buildReference,
213
- delegate.buildGeoPoint,
214
- delegate.buildDate,
215
- delegate.buildDeleteFieldValue
216
220
  );
217
- const updatedFirestoreValues: EntityValues<M> = properties
221
+
222
+ const updatedValues: EntityValues<M> = properties
218
223
  ? updateDateAutoValues(
219
224
  {
220
225
  inputValues: firestoreValues,
221
226
  properties,
222
227
  status,
223
- timestampNowValue: delegate.currentTime(),
224
- setDateToMidnight: delegate.setDateToMidnight
228
+ timestampNowValue: usedDelegate.currentTime?.() ?? new Date(),
229
+ setDateToMidnight: usedDelegate.setDateToMidnight
225
230
  })
226
231
  : firestoreValues;
227
232
 
228
- return delegate.saveEntity({
233
+ return usedDelegate.saveEntity({
229
234
  path,
235
+ collection,
230
236
  entityId,
231
- values: updatedFirestoreValues,
237
+ values: updatedValues,
232
238
  status
233
239
  }).then((res) => {
234
240
  return {
235
241
  id: res.id,
236
242
  path: res.path,
237
- values: delegate.delegateToCMSModel(updatedFirestoreValues)
243
+ values: usedDelegate.delegateToCMSModel(updatedValues)
238
244
  } as Entity<M>;
239
245
  });
240
246
  }, [delegate.saveEntity, navigationController.getCollection]),
@@ -247,10 +253,15 @@ export function useBuildDataSource({
247
253
  */
248
254
  deleteEntity: useCallback(<M extends Record<string, any>>(
249
255
  {
250
- entity
256
+ entity,
257
+ collection
251
258
  }: DeleteEntityProps<M>
252
259
  ): Promise<void> => {
253
- return delegate.deleteEntity({ entity });
260
+ const usedDelegate = collection?.overrides?.dataSourceDelegate ?? delegate;
261
+ return usedDelegate.deleteEntity({
262
+ entity,
263
+ collection
264
+ });
254
265
  }, [delegate.deleteEntity]),
255
266
 
256
267
  /**
@@ -267,13 +278,16 @@ export function useBuildDataSource({
267
278
  path: string,
268
279
  name: string,
269
280
  value: any,
270
- entityId?: string
281
+ entityId?: string,
282
+ collection?: EntityCollection
271
283
  ): Promise<boolean> => {
272
- return delegate.checkUniqueField(path, name, value, entityId);
284
+ const usedDelegate = collection?.overrides?.dataSourceDelegate ?? delegate;
285
+ return usedDelegate.checkUniqueField(path, name, value, entityId, collection);
273
286
  }, [delegate.checkUniqueField]),
274
287
 
275
- generateEntityId: useCallback((path: string): string => {
276
- return delegate.generateEntityId(path,);
288
+ generateEntityId: useCallback((path: string, collection: EntityCollection): string => {
289
+ const usedDelegate = collection?.overrides?.dataSourceDelegate ?? delegate;
290
+ return usedDelegate.generateEntityId(path, collection);
277
291
  }, [delegate.generateEntityId]),
278
292
 
279
293
  countEntities: delegate.countEntities ? async ({
@@ -289,21 +303,24 @@ export function useBuildDataSource({
289
303
  orderBy?: string,
290
304
  order?: "desc" | "asc",
291
305
  }): Promise<number> => {
292
- return delegate.countEntities!({
306
+ const usedDelegate = collection?.overrides?.dataSourceDelegate ?? delegate;
307
+ return usedDelegate.countEntities!({
293
308
  path,
294
309
  filter,
295
310
  orderBy,
296
311
  order,
297
- isCollectionGroup: Boolean(collection.collectionGroup) ?? false
312
+ collection
298
313
  });
299
314
  } : undefined,
300
315
 
301
316
  isFilterCombinationValid: useCallback(({
302
317
  path,
318
+ databaseId,
303
319
  filterValues,
304
320
  sortBy
305
321
  }: {
306
322
  path: string,
323
+ databaseId?: string,
307
324
  filterValues: FilterValues<any>,
308
325
  sortBy?: [string, "asc" | "desc"]
309
326
  }): boolean => {
@@ -312,52 +329,25 @@ export function useBuildDataSource({
312
329
  return delegate.isFilterCombinationValid(
313
330
  {
314
331
  path,
332
+ databaseId,
315
333
  filterValues,
316
334
  sortBy
317
335
  }
318
336
  )
319
- }, [delegate.isFilterCombinationValid])
337
+ }, [delegate.isFilterCombinationValid]),
320
338
 
321
- };
339
+ initTextSearch: useCallback(async (props: {
340
+ context: FireCMSContext,
341
+ path: string,
342
+ collection: EntityCollection,
343
+ parentCollectionIds?: string[]
344
+ }): Promise<boolean> => {
345
+ const usedDelegate = props.collection?.overrides?.dataSourceDelegate ?? delegate;
346
+ if (!usedDelegate.initTextSearch)
347
+ return false;
348
+ return usedDelegate.initTextSearch(props)
349
+ }, [delegate.initTextSearch]),
322
350
 
323
- }
351
+ };
324
352
 
325
- /**
326
- * Recursive function that converts Firestore data types into CMS or plain
327
- * JS types.
328
- * FireCMS uses Javascript dates internally instead of Firestore timestamps.
329
- * This makes it easier to interact with the rest of the libraries and
330
- * bindings.
331
- * Also, Firestore references are replaced with {@link EntityReference}
332
- * @param data
333
- * @param buildReference
334
- * @param buildGeoPoint
335
- * @param buildDate
336
- * @param buildDelete
337
- * @group Firestore
338
- */
339
- export function cmsToDelegateModel(data: any,
340
- buildReference: (reference: EntityReference) => any,
341
- buildGeoPoint: (geoPoint: GeoPoint) => any,
342
- buildDate: (date: Date) => any,
343
- buildDelete: () => any
344
- ): any {
345
- if (data === undefined) {
346
- return buildDelete();
347
- } else if (data === null) {
348
- return null;
349
- } else if (Array.isArray(data)) {
350
- return data.map(v => cmsToDelegateModel(v, buildReference, buildGeoPoint, buildDate, buildDelete));
351
- } else if (data.isEntityReference && data.isEntityReference()) {
352
- return buildReference(data);
353
- } else if (data instanceof GeoPoint) {
354
- return buildGeoPoint(data);
355
- } else if (data instanceof Date) {
356
- return buildDate(data);
357
- } else if (data && typeof data === "object") {
358
- return Object.entries(data)
359
- .map(([key, v]) => ({ [key]: cmsToDelegateModel(v, buildReference, buildGeoPoint, buildDate, buildDelete) }))
360
- .reduce((a, b) => ({ ...a, ...b }), {});
361
- }
362
- return data;
363
353
  }
@@ -118,6 +118,7 @@ export function useBuildSideDialogsController(): SideDialogsController {
118
118
 
119
119
  return {
120
120
  sidePanels,
121
+ setSidePanels: updateSidePanels,
121
122
  close,
122
123
  open,
123
124
  replace
@@ -3,13 +3,14 @@ import {
3
3
  EntityCollection,
4
4
  EntitySidePanelProps,
5
5
  NavigationController,
6
+ ResolvedProperty,
6
7
  SideDialogPanelProps,
7
8
  SideDialogsController,
8
9
  SideEntityController
9
10
  } from "../types";
10
11
  import { getNavigationEntriesFromPathInternal, NavigationViewInternal } from "../util/navigation_from_path";
11
12
  import { useLocation } from "react-router-dom";
12
- import { removeInitialAndTrailingSlashes, resolveDefaultSelectedView } from "../util";
13
+ import { removeInitialAndTrailingSlashes, resolveCollection, resolveDefaultSelectedView } from "../util";
13
14
  import { ADDITIONAL_TAB_WIDTH, CONTAINER_FULL_WIDTH, FORM_CONTAINER_WIDTH } from "./common";
14
15
  import { useLargeLayout } from "../hooks";
15
16
  import { EntitySidePanel } from "../core/EntitySidePanel";
@@ -19,8 +20,67 @@ const NEW_URL_HASH = "new";
19
20
  export function getEntityViewWidth(props: EntitySidePanelProps<any>, small: boolean): string {
20
21
  if (small) return CONTAINER_FULL_WIDTH;
21
22
  const mainViewSelected = !props.selectedSubPath;
22
- const resolvedWidth: string | undefined = typeof props.width === "number" ? `${props.width}px` : props.width;
23
- return !mainViewSelected ? `calc(${ADDITIONAL_TAB_WIDTH} + ${resolvedWidth ?? FORM_CONTAINER_WIDTH})` : resolvedWidth ?? FORM_CONTAINER_WIDTH
23
+ let resolvedWidth: string | undefined;
24
+ if (props.width) {
25
+ resolvedWidth = typeof props.width === "number" ? `${props.width}px` : props.width;
26
+ } else if (props.collection?.sideDialogWidth) {
27
+ resolvedWidth = typeof props.collection.sideDialogWidth === "number" ? `${props.collection.sideDialogWidth}px` : props.collection.sideDialogWidth;
28
+ }
29
+
30
+ if (!mainViewSelected) {
31
+ return `calc(${ADDITIONAL_TAB_WIDTH} + ${resolvedWidth ?? FORM_CONTAINER_WIDTH})`
32
+ } else {
33
+ if (resolvedWidth) {
34
+ return resolvedWidth
35
+ } else if (!props.collection) {
36
+ return FORM_CONTAINER_WIDTH;
37
+ } else {
38
+ return calculateCollectionDesiredWidth(props.collection);
39
+ }
40
+ }
41
+ }
42
+
43
+ const collectionViewWidthCache: { [key: string]: string } = {};
44
+
45
+ function calculateCollectionDesiredWidth(collection: EntityCollection<any>): string {
46
+ if (collectionViewWidthCache[collection.id]) {
47
+ return collectionViewWidthCache[collection.id];
48
+ }
49
+ const resolvedCollection = resolveCollection({
50
+ collection,
51
+ path: "__ignored",
52
+ ignoreMissingFields: true
53
+ });
54
+
55
+ let result = FORM_CONTAINER_WIDTH
56
+ if (resolvedCollection?.properties) {
57
+ const values = Object.values(resolvedCollection.properties).map((p: ResolvedProperty) => getNestedPropertiesDepth(p));
58
+ const maxDepth = Math.max(...values);
59
+ if (maxDepth < 3) {
60
+ result = FORM_CONTAINER_WIDTH;
61
+ } else {
62
+ result = 768 + 32 * (maxDepth - 2) + "px";
63
+ }
64
+ }
65
+ collectionViewWidthCache[collection.id] = result;
66
+ return result;
67
+ }
68
+
69
+ function getNestedPropertiesDepth(property: ResolvedProperty, accumulator: number = 0): number {
70
+ if (property.dataType === "map" && property.properties) {
71
+ const values = Object.values(property.properties).flatMap((property) => getNestedPropertiesDepth(property, accumulator + 1));
72
+ return Math.max(...values);
73
+ } else if (property.dataType === "array" && property.oneOf) {
74
+ return accumulator + 3;
75
+ } else if (property.dataType === "array" && property.of) {
76
+ if (Array.isArray(property.of)) {
77
+ return Math.max(...property.of.map((p) => getNestedPropertiesDepth(p, accumulator + 1)));
78
+ } else {
79
+ return getNestedPropertiesDepth(property.of, accumulator + 1);
80
+ }
81
+ } else {
82
+ return accumulator + 1;
83
+ }
24
84
  }
25
85
 
26
86
  export const useBuildSideEntityController = (navigation: NavigationController,
@@ -34,23 +94,36 @@ export const useBuildSideEntityController = (navigation: NavigationController,
34
94
  // only on initialisation, create panels from URL
35
95
  useEffect(() => {
36
96
  if (!navigation.loading && !initialised.current) {
97
+ console.debug("Initialising side entity controller");
37
98
  if (navigation.isUrlCollectionPath(location.pathname)) {
38
99
  const newFlag = location.hash === `#${NEW_URL_HASH}`;
39
100
  const entityOrCollectionPath = navigation.urlPathToDataPath(location.pathname);
40
101
  const panelsFromUrl = buildSidePanelsFromUrl(entityOrCollectionPath, navigation.collections ?? [], newFlag);
41
102
  for (let i = 0; i < panelsFromUrl.length; i++) {
42
- const panel = panelsFromUrl[i];
103
+ const props = panelsFromUrl[i];
43
104
  setTimeout(() => {
44
105
  if (i === 0)
45
- sideDialogsController.replace(propsToSidePanel(panel, navigation, smallLayout));
106
+ sideDialogsController.replace(propsToSidePanel(props, navigation.buildUrlCollectionPath, navigation.resolveAliasesFrom, smallLayout));
46
107
  else
47
- sideDialogsController.open(propsToSidePanel(panel, navigation, smallLayout))
108
+ sideDialogsController.open(propsToSidePanel(props, navigation.buildUrlCollectionPath, navigation.resolveAliasesFrom, smallLayout))
48
109
  }, 1);
49
110
  }
111
+ } else {
112
+ // console.warn("Location path is not a collection path");
50
113
  }
51
114
  initialised.current = true;
52
115
  }
53
- }, [location, navigation, sideDialogsController, smallLayout]);
116
+ }, [location, navigation.loading, navigation.isUrlCollectionPath, navigation.buildUrlCollectionPath, navigation.resolveAliasesFrom, sideDialogsController, smallLayout, navigation]);
117
+
118
+ useEffect(() => {
119
+ const updatedSidePanels = sideDialogsController.sidePanels.map(sidePanelProps => {
120
+ if (sidePanelProps.additional) {
121
+ return propsToSidePanel(sidePanelProps.additional, navigation.buildUrlCollectionPath, navigation.resolveAliasesFrom, smallLayout);
122
+ }
123
+ return sidePanelProps;
124
+ });
125
+ sideDialogsController.setSidePanels(updatedSidePanels);
126
+ }, [smallLayout]);
54
127
 
55
128
  const close = useCallback(() => {
56
129
  sideDialogsController.close();
@@ -73,9 +146,9 @@ export const useBuildSideEntityController = (navigation: NavigationController,
73
146
  sideDialogsController.open(propsToSidePanel({
74
147
  selectedSubPath: defaultSelectedView,
75
148
  ...props,
76
- }, navigation, smallLayout));
149
+ }, navigation.buildUrlCollectionPath, navigation.resolveAliasesFrom, smallLayout));
77
150
 
78
- }, [sideDialogsController, navigation, smallLayout]);
151
+ }, [sideDialogsController, navigation.buildUrlCollectionPath, navigation.resolveAliasesFrom, smallLayout]);
79
152
 
80
153
  const replace = useCallback((props: EntitySidePanelProps<any>) => {
81
154
 
@@ -83,9 +156,9 @@ export const useBuildSideEntityController = (navigation: NavigationController,
83
156
  throw Error("If you want to copy an entity you need to provide an entityId");
84
157
  }
85
158
 
86
- sideDialogsController.replace(propsToSidePanel(props, navigation, smallLayout));
159
+ sideDialogsController.replace(propsToSidePanel(props, navigation.buildUrlCollectionPath, navigation.resolveAliasesFrom, smallLayout));
87
160
 
88
- }, [navigation, sideDialogsController, smallLayout]);
161
+ }, [navigation.buildUrlCollectionPath, navigation.resolveAliasesFrom, sideDialogsController, smallLayout]);
89
162
 
90
163
  return {
91
164
  close,
@@ -116,7 +189,8 @@ export function buildSidePanelsFromUrl(path: string, collections: EntityCollecti
116
189
  sidePanels.push({
117
190
  path: navigationEntry.path,
118
191
  entityId: navigationEntry.entityId,
119
- copy: false
192
+ copy: false,
193
+ width: navigationEntry.parentCollection?.sideDialogWidth
120
194
  }
121
195
  );
122
196
  } else if (navigationEntry.type === "custom_view") {
@@ -146,27 +220,33 @@ export function buildSidePanelsFromUrl(path: string, collections: EntityCollecti
146
220
  return sidePanels;
147
221
  }
148
222
 
149
- const propsToSidePanel = (props: EntitySidePanelProps<any>, navigation: NavigationController, smallLayout: boolean): SideDialogPanelProps => {
223
+ const propsToSidePanel = (props: EntitySidePanelProps,
224
+ buildUrlCollectionPath: (path: string) => string,
225
+ resolveAliasesFrom: (pathWithAliases: string) => string,
226
+ smallLayout: boolean): SideDialogPanelProps => {
150
227
 
151
228
  const collectionPath = removeInitialAndTrailingSlashes(props.path);
152
229
 
153
230
  const newPath = props.entityId
154
- ? navigation.buildUrlCollectionPath(`${collectionPath}/${props.entityId}/${props.selectedSubPath || ""}`)
155
- : navigation.buildUrlCollectionPath(`${collectionPath}#${NEW_URL_HASH}`);
156
- const resolvedPath = navigation.resolveAliasesFrom(props.path);
231
+ ? buildUrlCollectionPath(`${collectionPath}/${props.entityId}/${props.selectedSubPath || ""}`)
232
+ : buildUrlCollectionPath(`${collectionPath}#${NEW_URL_HASH}`);
233
+ const resolvedPath = resolveAliasesFrom(props.path);
157
234
 
158
235
  const resolvedPanelProps: EntitySidePanelProps<any> = {
159
236
  ...props,
160
- path: resolvedPath
237
+ path: resolvedPath,
161
238
  };
162
239
 
163
- return ({
240
+ const entityViewWidth = getEntityViewWidth(props, smallLayout);
241
+
242
+ return {
164
243
  key: `${props.path}/${props.entityId}`,
165
244
  component: <EntitySidePanel {...resolvedPanelProps}/>,
166
245
  urlPath: newPath,
167
- parentUrlPath: navigation.buildUrlCollectionPath(collectionPath),
168
- width: getEntityViewWidth(props, smallLayout),
169
- onClose: props.onClose
170
- });
246
+ parentUrlPath: buildUrlCollectionPath(collectionPath),
247
+ width: entityViewWidth,
248
+ onClose: props.onClose,
249
+ additional: props
250
+ };
171
251
  }
172
252
  ;
@@ -84,8 +84,10 @@ export function UnsavedChangesDialog({
84
84
 
85
85
  return (
86
86
  <Dialog
87
+ onEscapeKeyDown={() => {
88
+ handleCancel();
89
+ }}
87
90
  open={open}
88
- onOpenChange={(open) => open ? handleCancel() : handleOk()}
89
91
  >
90
92
  <DialogContent>
91
93
  <Typography variant={"h6"}>{title}</Typography>
@@ -47,14 +47,13 @@ export const PropertyPreview = React.memo(function PropertyPreview<T extends CMS
47
47
  size,
48
48
  height,
49
49
  width,
50
- // entity
50
+ interactive
51
51
  } = props;
52
52
 
53
53
  const property = resolveProperty({
54
54
  propertyKey,
55
55
  propertyOrBuilder: inputProperty,
56
- propertyValue: value,
57
- fields: customizationController.propertyConfigs
56
+ propertyConfigs: customizationController.propertyConfigs
58
57
  });
59
58
 
60
59
  if (value === undefined || property === null) {
@@ -85,14 +84,17 @@ export const PropertyPreview = React.memo(function PropertyPreview<T extends CMS
85
84
  content =
86
85
  <UrlComponentPreview size={props.size}
87
86
  url={value}
87
+ interactive={interactive}
88
88
  previewType={stringProperty.url}/>;
89
+ } else if (stringProperty.markdown) {
90
+ content = <Markdown source={value} size={"small"}/>;
89
91
  } else if (stringProperty.storage) {
92
+ const filePath = stringProperty.storage.previewUrl ? stringProperty.storage.previewUrl(value) : value;
90
93
  content = <StorageThumbnail
94
+ interactive={interactive}
91
95
  storeUrl={property.storage?.storeUrl ?? false}
92
96
  size={props.size}
93
- storagePathOrDownloadUrl={value}/>;
94
- } else if (stringProperty.markdown) {
95
- content = <Markdown source={value}/>;
97
+ storagePathOrDownloadUrl={filePath}/>;
96
98
  } else {
97
99
  content = <StringPropertyPreview {...props}
98
100
  property={stringProperty}
@@ -113,17 +115,7 @@ export const PropertyPreview = React.memo(function PropertyPreview<T extends CMS
113
115
  content = <ArrayPropertyPreview {...props}
114
116
  value={value}
115
117
  property={property as ResolvedArrayProperty}/>;
116
- }
117
- // else if (arrayProperty.of.dataType === "map") {
118
- // content =
119
- // <ArrayOfMapsPreview propertyKey={propertyKey}
120
- // property={property as ResolvedArrayProperty}
121
- // value={value as Record<string, any>[]} // This might be wrong
122
- // entity={entity}
123
- // size={size}
124
- // />;
125
- // }
126
- else if (arrayProperty.of.dataType === "reference") {
118
+ } else if (arrayProperty.of.dataType === "reference") {
127
119
  content = <ArrayOfReferencesPreview {...props}
128
120
  value={value}
129
121
  property={property as ResolvedArrayProperty}/>;
@@ -182,8 +174,9 @@ export const PropertyPreview = React.memo(function PropertyPreview<T extends CMS
182
174
  content = <ReferencePreview
183
175
  disabled={!property.path}
184
176
  previewProperties={property.previewProperties}
177
+ includeId={property.includeId}
178
+ includeEntityLink={property.includeEntityLink}
185
179
  size={props.size}
186
- // onClick={props.onClick}
187
180
  reference={value as EntityReference}
188
181
  />;
189
182
  } else {
@@ -3,7 +3,7 @@ import { CMSType, Property, ResolvedProperty } from "../types";
3
3
  /**
4
4
  * @group Preview components
5
5
  */
6
- export type PreviewSize = "medium" | "small" | "tiny";
6
+ export type PreviewSize = "medium" | "small" | "smallest";
7
7
 
8
8
  /**
9
9
  * @group Preview components
@@ -46,4 +46,10 @@ export interface PropertyPreviewProps<T extends CMSType = any, CustomProps = any
46
46
  */
47
47
  customProps?: CustomProps;
48
48
 
49
+ /**
50
+ * If the preview should be interactive or not.
51
+ * This applies only to videos.
52
+ */
53
+ interactive?: boolean;
54
+
49
55
  }
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import { Checkbox, cn } from "@firecms/ui";
2
+ import { Checkbox, cls } from "@firecms/ui";
3
3
  import { PreviewSize } from "../PropertyPreviewProps";
4
4
  import { Property } from "../../types";
5
5
 
@@ -21,6 +21,6 @@ export function BooleanPreview({
21
21
  size={size}
22
22
  color={"secondary"}/>
23
23
  {property.name && <span
24
- className={cn("text-text-secondary dark:text-text-secondary-dark", size === "tiny" ? "text-sm" : "")}>{property.name}</span>}
24
+ className={cls("text-text-secondary dark:text-text-secondary-dark", size === "smallest" ? "text-sm" : "")}>{property.name}</span>}
25
25
  </div>;
26
26
  }
@@ -6,5 +6,5 @@ import React from "react";
6
6
  export function EmptyValue() {
7
7
 
8
8
  return <div
9
- className="rounded-full bg-gray-200 bg-opacity-30 dark:bg-opacity-20 w-5 h-2 inline-block"/>;
9
+ className="rounded-full bg-surface-200 bg-opacity-30 dark:bg-opacity-20 w-5 h-2 inline-block"/>;
10
10
  }
@@ -1,12 +1,12 @@
1
1
  import React from "react";
2
+ import { Chip } from "@firecms/ui";
2
3
  import { EnumValues } from "../../types";
3
4
  import { buildEnumLabel, enumToObjectEntries, getColorScheme, getLabelOrConfigFrom } from "../../util/enums";
4
- import { Chip } from "@firecms/ui";
5
5
 
6
6
  export interface EnumValuesChipProps {
7
7
  enumValues?: EnumValues;
8
8
  enumKey: string | number;
9
- size: "tiny" | "small" | "medium";
9
+ size: "smallest" | "small" | "medium";
10
10
  className?: string;
11
11
  children?: React.ReactNode;
12
12
  }