@firecms/core 3.0.0-canary.99 → 3.0.0-rc.2

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 (371) hide show
  1. package/README.md +2 -2
  2. package/dist/app/Drawer.d.ts +0 -1
  3. package/dist/app/Scaffold.d.ts +4 -0
  4. package/dist/components/ArrayContainer.d.ts +31 -12
  5. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  6. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +3 -1
  7. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
  8. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +17 -3
  9. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +1 -1
  10. package/dist/components/EntityCollectionTable/index.d.ts +1 -1
  11. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +6 -3
  12. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +8 -0
  13. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  14. package/dist/components/EntityJsonPreview.d.ts +3 -0
  15. package/dist/components/EntityPreview.d.ts +8 -6
  16. package/dist/components/HomePage/DefaultHomePage.d.ts +2 -15
  17. package/dist/components/HomePage/HomePageDnD.d.ts +76 -0
  18. package/dist/components/HomePage/NavigationCard.d.ts +3 -1
  19. package/dist/components/HomePage/NavigationCardBinding.d.ts +3 -2
  20. package/dist/components/HomePage/NavigationGroup.d.ts +8 -1
  21. package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
  22. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  23. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  24. package/dist/components/SelectableTable/SelectableTable.d.ts +13 -3
  25. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +1 -1
  26. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  27. package/dist/components/UserDisplay.d.ts +7 -0
  28. package/dist/components/VirtualTable/VirtualTableProps.d.ts +11 -2
  29. package/dist/components/VirtualTable/fields/VirtualTableUserSelect.d.ts +12 -0
  30. package/dist/components/common/default_entity_actions.d.ts +0 -2
  31. package/dist/components/common/index.d.ts +1 -1
  32. package/dist/components/common/useColumnsIds.d.ts +1 -0
  33. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +10 -2
  34. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  35. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  36. package/dist/components/index.d.ts +3 -1
  37. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  38. package/dist/contexts/InternalUserManagementContext.d.ts +3 -0
  39. package/dist/core/DefaultAppBar.d.ts +8 -2
  40. package/dist/core/DrawerNavigationItem.d.ts +2 -1
  41. package/dist/core/EntityEditView.d.ts +40 -22
  42. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  43. package/dist/core/FireCMS.d.ts +2 -3
  44. package/dist/core/FireCMSRouter.d.ts +4 -0
  45. package/dist/core/NavigationRoutes.d.ts +0 -1
  46. package/dist/core/SideDialogs.d.ts +4 -2
  47. package/dist/core/field_configs.d.ts +1 -1
  48. package/dist/core/index.d.ts +2 -1
  49. package/dist/form/EntityForm.d.ts +50 -0
  50. package/dist/form/EntityFormActions.d.ts +21 -0
  51. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  52. package/dist/form/components/FormEntry.d.ts +6 -0
  53. package/dist/form/components/FormLayout.d.ts +5 -0
  54. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  55. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  56. package/dist/form/components/index.d.ts +3 -1
  57. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  58. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  59. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  60. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  61. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  62. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  63. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  64. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  65. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +9 -0
  66. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  67. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  68. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  69. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +4 -10
  70. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  71. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  72. package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +12 -0
  73. package/dist/form/index.d.ts +17 -16
  74. package/dist/form/useClearRestoreValue.d.ts +2 -2
  75. package/dist/hooks/data/delete.d.ts +4 -4
  76. package/dist/hooks/data/save.d.ts +3 -3
  77. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  78. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  79. package/dist/hooks/index.d.ts +2 -0
  80. package/dist/hooks/useAuthController.d.ts +1 -1
  81. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  82. package/dist/hooks/useBuildNavigationController.d.ts +57 -12
  83. package/dist/hooks/useCollapsedGroups.d.ts +9 -0
  84. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  85. package/dist/hooks/useInternalUserManagementController.d.ts +12 -0
  86. package/dist/hooks/useModeController.d.ts +1 -2
  87. package/dist/hooks/useProjectLog.d.ts +7 -1
  88. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  89. package/dist/hooks/useValidateAuthenticator.d.ts +3 -3
  90. package/dist/index.es.js +20480 -14434
  91. package/dist/index.es.js.map +1 -1
  92. package/dist/index.umd.js +20250 -14209
  93. package/dist/index.umd.js.map +1 -1
  94. package/dist/internal/useBuildDataSource.d.ts +3 -2
  95. package/dist/internal/useBuildSideEntityController.d.ts +3 -3
  96. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  97. package/dist/preview/PropertyPreviewProps.d.ts +1 -1
  98. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  99. package/dist/preview/components/ReferencePreview.d.ts +2 -2
  100. package/dist/preview/components/UserPreview.d.ts +8 -0
  101. package/dist/preview/index.d.ts +1 -0
  102. package/dist/preview/util.d.ts +3 -3
  103. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  104. package/dist/routes/FireCMSRoute.d.ts +1 -0
  105. package/dist/routes/HomePageRoute.d.ts +3 -0
  106. package/dist/types/analytics.d.ts +1 -1
  107. package/dist/types/auth.d.ts +7 -9
  108. package/dist/types/collections.d.ts +88 -25
  109. package/dist/types/customization_controller.d.ts +8 -0
  110. package/dist/types/datasource.d.ts +19 -17
  111. package/dist/types/dialogs_controller.d.ts +7 -3
  112. package/dist/types/entities.d.ts +7 -2
  113. package/dist/types/entity_actions.d.ts +58 -8
  114. package/dist/types/entity_callbacks.d.ts +16 -16
  115. package/dist/types/entity_overrides.d.ts +2 -2
  116. package/dist/types/export_import.d.ts +4 -4
  117. package/dist/types/fields.d.ts +43 -17
  118. package/dist/types/firecms.d.ts +31 -3
  119. package/dist/types/firecms_context.d.ts +17 -1
  120. package/dist/types/index.d.ts +1 -0
  121. package/dist/types/internal_user_management.d.ts +20 -0
  122. package/dist/types/navigation.d.ts +60 -17
  123. package/dist/types/permissions.d.ts +4 -4
  124. package/dist/types/plugins.d.ts +44 -9
  125. package/dist/types/properties.d.ts +74 -22
  126. package/dist/types/property_config.d.ts +1 -3
  127. package/dist/types/roles.d.ts +3 -0
  128. package/dist/types/side_dialogs_controller.d.ts +10 -0
  129. package/dist/types/side_entity_controller.d.ts +14 -1
  130. package/dist/types/storage.d.ts +75 -0
  131. package/dist/types/user.d.ts +2 -1
  132. package/dist/util/builders.d.ts +3 -3
  133. package/dist/util/callbacks.d.ts +2 -0
  134. package/dist/util/createFormexStub.d.ts +2 -0
  135. package/dist/util/entities.d.ts +2 -2
  136. package/dist/util/entity_actions.d.ts +2 -0
  137. package/dist/util/entity_cache.d.ts +23 -0
  138. package/dist/util/icon_synonyms.d.ts +0 -1
  139. package/dist/util/icons.d.ts +5 -2
  140. package/dist/util/index.d.ts +3 -0
  141. package/dist/util/navigation_from_path.d.ts +10 -1
  142. package/dist/util/navigation_utils.d.ts +13 -1
  143. package/dist/util/objects.d.ts +2 -1
  144. package/dist/util/permissions.d.ts +4 -4
  145. package/dist/util/property_utils.d.ts +4 -4
  146. package/dist/util/references.d.ts +2 -2
  147. package/dist/util/resolutions.d.ts +30 -6
  148. package/dist/util/storage.d.ts +1 -1
  149. package/dist/util/useStorageUploadController.d.ts +2 -2
  150. package/package.json +133 -125
  151. package/src/app/Drawer.tsx +0 -1
  152. package/src/app/Scaffold.tsx +33 -29
  153. package/src/components/ArrayContainer.tsx +447 -229
  154. package/src/components/CircularProgressCenter.tsx +1 -1
  155. package/src/components/ClearFilterSortButton.tsx +1 -1
  156. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +12 -11
  157. package/src/components/DeleteEntityDialog.tsx +13 -20
  158. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +59 -25
  159. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +23 -17
  160. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +20 -3
  161. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -9
  162. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +21 -16
  163. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +6 -12
  164. package/src/components/EntityCollectionTable/index.tsx +1 -1
  165. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +6 -6
  166. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +35 -26
  167. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  168. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +132 -101
  169. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
  170. package/src/components/EntityCollectionView/EntityCollectionView.tsx +178 -85
  171. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +7 -4
  172. package/src/components/EntityCollectionView/useSelectionController.tsx +5 -4
  173. package/src/components/EntityCollectionView/utils.ts +19 -0
  174. package/src/components/EntityJsonPreview.tsx +66 -0
  175. package/src/components/EntityPreview.tsx +75 -57
  176. package/src/components/EntityView.tsx +8 -5
  177. package/src/components/ErrorView.tsx +3 -3
  178. package/src/components/FireCMSLogo.tsx +7 -51
  179. package/src/components/HomePage/DefaultHomePage.tsx +506 -161
  180. package/src/components/HomePage/FavouritesView.tsx +9 -14
  181. package/src/components/HomePage/HomePageDnD.tsx +600 -0
  182. package/src/components/HomePage/NavigationCard.tsx +47 -38
  183. package/src/components/HomePage/NavigationCardBinding.tsx +16 -15
  184. package/src/components/HomePage/NavigationGroup.tsx +144 -30
  185. package/src/components/HomePage/RenameGroupDialog.tsx +123 -0
  186. package/src/components/HomePage/SmallNavigationCard.tsx +1 -2
  187. package/src/components/NotFoundPage.tsx +2 -2
  188. package/src/components/PropertyConfigBadge.tsx +10 -4
  189. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  190. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +22 -13
  191. package/src/components/SearchIconsView.tsx +2 -2
  192. package/src/components/SelectableTable/SelectableTable.tsx +154 -142
  193. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +4 -2
  194. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +10 -8
  195. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +60 -11
  196. package/src/components/UnsavedChangesDialog.tsx +46 -0
  197. package/src/components/UserDisplay.tsx +55 -0
  198. package/src/components/VirtualTable/VirtualTable.tsx +65 -44
  199. package/src/components/VirtualTable/VirtualTableCell.tsx +0 -8
  200. package/src/components/VirtualTable/VirtualTableHeader.tsx +8 -8
  201. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +1 -1
  202. package/src/components/VirtualTable/VirtualTableProps.tsx +12 -2
  203. package/src/components/VirtualTable/VirtualTableRow.tsx +1 -1
  204. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
  205. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -2
  206. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  207. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  208. package/src/components/VirtualTable/fields/VirtualTableUserSelect.tsx +99 -0
  209. package/src/components/common/default_entity_actions.tsx +62 -42
  210. package/src/components/common/index.ts +1 -1
  211. package/src/components/common/useColumnsIds.tsx +2 -9
  212. package/src/components/common/useDataSourceTableController.tsx +420 -0
  213. package/src/components/common/useDebouncedCallback.tsx +20 -0
  214. package/src/components/common/useScrollRestoration.tsx +68 -0
  215. package/src/components/common/useTableSearchHelper.ts +1 -0
  216. package/src/components/index.tsx +4 -1
  217. package/src/contexts/BreacrumbsContext.tsx +38 -0
  218. package/src/contexts/DialogsProvider.tsx +3 -2
  219. package/src/contexts/InternalUserManagementContext.tsx +4 -0
  220. package/src/contexts/ModeController.tsx +1 -3
  221. package/src/contexts/SnackbarProvider.tsx +2 -0
  222. package/src/core/DefaultAppBar.tsx +124 -85
  223. package/src/core/DefaultDrawer.tsx +30 -22
  224. package/src/core/DrawerNavigationItem.tsx +32 -28
  225. package/src/core/EntityEditView.tsx +388 -995
  226. package/src/core/EntityEditViewFormActions.tsx +329 -0
  227. package/src/core/EntitySidePanel.tsx +88 -20
  228. package/src/core/FireCMS.tsx +58 -28
  229. package/src/core/FireCMSRouter.tsx +17 -0
  230. package/src/core/NavigationRoutes.tsx +23 -32
  231. package/src/core/SideDialogs.tsx +22 -12
  232. package/src/core/field_configs.tsx +39 -11
  233. package/src/core/index.tsx +4 -2
  234. package/src/form/EntityForm.tsx +814 -0
  235. package/src/form/EntityFormActions.tsx +211 -0
  236. package/src/form/PropertyFieldBinding.tsx +59 -41
  237. package/src/form/components/CustomIdField.tsx +9 -3
  238. package/src/form/components/FieldHelperText.tsx +1 -1
  239. package/src/form/components/FormEntry.tsx +22 -0
  240. package/src/form/components/FormLayout.tsx +16 -0
  241. package/src/form/components/LabelWithIcon.tsx +30 -19
  242. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  243. package/src/form/components/StorageItemPreview.tsx +5 -4
  244. package/src/form/components/StorageUploadProgress.tsx +2 -3
  245. package/src/form/components/index.tsx +3 -1
  246. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +30 -18
  247. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +47 -36
  248. package/src/form/field_bindings/BlockFieldBinding.tsx +55 -33
  249. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  250. package/src/form/field_bindings/KeyValueFieldBinding.tsx +19 -15
  251. package/src/form/field_bindings/MapFieldBinding.tsx +72 -62
  252. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +159 -0
  253. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
  254. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +10 -8
  255. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
  256. package/src/form/field_bindings/ReferenceFieldBinding.tsx +28 -19
  257. package/src/form/field_bindings/RepeatFieldBinding.tsx +56 -32
  258. package/src/form/field_bindings/SelectFieldBinding.tsx +22 -13
  259. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +247 -168
  260. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  261. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  262. package/src/form/field_bindings/UserSelectFieldBinding.tsx +94 -0
  263. package/src/form/index.tsx +17 -37
  264. package/src/form/useClearRestoreValue.tsx +2 -2
  265. package/src/form/validation.ts +12 -6
  266. package/src/hooks/data/delete.ts +6 -5
  267. package/src/hooks/data/save.ts +26 -35
  268. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  269. package/src/hooks/data/useDataSource.tsx +10 -2
  270. package/src/hooks/data/useEntityFetch.tsx +10 -6
  271. package/src/hooks/index.tsx +3 -0
  272. package/src/hooks/useAuthController.tsx +1 -1
  273. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  274. package/src/hooks/useBrowserTitleAndIcon.tsx +1 -1
  275. package/src/hooks/useBuildModeController.tsx +15 -28
  276. package/src/hooks/useBuildNavigationController.tsx +386 -124
  277. package/src/hooks/useCollapsedGroups.ts +64 -0
  278. package/src/hooks/useFireCMSContext.tsx +9 -35
  279. package/src/hooks/useInternalUserManagementController.tsx +16 -0
  280. package/src/hooks/useLargeLayout.tsx +0 -35
  281. package/src/hooks/useModeController.tsx +1 -2
  282. package/src/hooks/useProjectLog.tsx +16 -5
  283. package/src/hooks/useResolvedNavigationFrom.tsx +9 -11
  284. package/src/hooks/useValidateAuthenticator.tsx +3 -3
  285. package/src/internal/useBuildDataSource.ts +67 -80
  286. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  287. package/src/internal/useBuildSideEntityController.tsx +149 -86
  288. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  289. package/src/preview/PropertyPreview.tsx +36 -12
  290. package/src/preview/PropertyPreviewProps.tsx +1 -1
  291. package/src/preview/components/BooleanPreview.tsx +1 -1
  292. package/src/preview/components/EmptyValue.tsx +1 -1
  293. package/src/preview/components/EnumValuesChip.tsx +1 -1
  294. package/src/preview/components/ImagePreview.tsx +10 -9
  295. package/src/preview/components/ReferencePreview.tsx +10 -18
  296. package/src/preview/components/UrlComponentPreview.tsx +20 -21
  297. package/src/preview/components/UserPreview.tsx +27 -0
  298. package/src/preview/index.ts +1 -0
  299. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -5
  300. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +5 -4
  301. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -3
  302. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -3
  303. package/src/preview/property_previews/ArrayOneOfPreview.tsx +6 -4
  304. package/src/preview/property_previews/ArrayPropertyPreview.tsx +6 -4
  305. package/src/preview/property_previews/MapPropertyPreview.tsx +7 -6
  306. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
  307. package/src/preview/property_previews/StringPropertyPreview.tsx +2 -2
  308. package/src/preview/util.ts +10 -10
  309. package/src/routes/CustomCMSRoute.tsx +21 -0
  310. package/src/routes/FireCMSRoute.tsx +246 -0
  311. package/src/routes/HomePageRoute.tsx +17 -0
  312. package/src/types/analytics.ts +3 -0
  313. package/src/types/auth.tsx +8 -12
  314. package/src/types/collections.ts +103 -28
  315. package/src/types/customization_controller.tsx +9 -0
  316. package/src/types/datasource.ts +21 -20
  317. package/src/types/dialogs_controller.tsx +7 -3
  318. package/src/types/entities.ts +10 -2
  319. package/src/types/entity_actions.tsx +71 -8
  320. package/src/types/entity_callbacks.ts +18 -18
  321. package/src/types/entity_overrides.tsx +2 -2
  322. package/src/types/export_import.ts +4 -4
  323. package/src/types/fields.tsx +52 -19
  324. package/src/types/firecms.tsx +34 -4
  325. package/src/types/firecms_context.tsx +18 -1
  326. package/src/types/index.ts +1 -0
  327. package/src/types/internal_user_management.ts +24 -0
  328. package/src/types/navigation.ts +76 -22
  329. package/src/types/permissions.ts +5 -5
  330. package/src/types/plugins.tsx +53 -9
  331. package/src/types/properties.ts +84 -22
  332. package/src/types/property_config.tsx +2 -2
  333. package/src/types/roles.ts +3 -0
  334. package/src/types/side_dialogs_controller.tsx +15 -0
  335. package/src/types/side_entity_controller.tsx +16 -1
  336. package/src/types/storage.ts +82 -0
  337. package/src/types/user.ts +3 -1
  338. package/src/util/builders.ts +10 -8
  339. package/src/util/callbacks.ts +119 -0
  340. package/src/util/createFormexStub.tsx +62 -0
  341. package/src/util/entities.ts +6 -4
  342. package/src/util/entity_actions.ts +28 -0
  343. package/src/util/entity_cache.ts +204 -0
  344. package/src/util/icon_list.ts +1 -1
  345. package/src/util/icon_synonyms.ts +0 -1
  346. package/src/util/icons.tsx +36 -11
  347. package/src/util/index.ts +3 -0
  348. package/src/util/join_collections.ts +9 -2
  349. package/src/util/make_properties_editable.ts +13 -5
  350. package/src/util/navigation_from_path.ts +33 -12
  351. package/src/util/navigation_utils.ts +135 -19
  352. package/src/util/objects.ts +74 -14
  353. package/src/util/parent_references_from_path.ts +3 -3
  354. package/src/util/permissions.ts +8 -8
  355. package/src/util/property_utils.tsx +17 -6
  356. package/src/util/references.ts +19 -8
  357. package/src/util/resolutions.ts +93 -24
  358. package/src/util/storage.ts +6 -2
  359. package/src/util/useStorageUploadController.tsx +74 -29
  360. package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
  361. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  362. package/dist/form/PropertiesForm.d.ts +0 -8
  363. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  364. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  365. package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
  366. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -27
  367. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -236
  368. package/src/form/PropertiesForm.tsx +0 -81
  369. package/src/form/components/FormikArrayContainer.tsx +0 -44
  370. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  371. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -13,7 +13,7 @@ import {
13
13
  import { resolveProperty } from "../util";
14
14
 
15
15
  import { PropertyPreviewProps } from "./PropertyPreviewProps";
16
- import { useCustomizationController } from "../hooks";
16
+ import { useAuthController, useCustomizationController } from "../hooks";
17
17
  import { EmptyValue } from "./components/EmptyValue";
18
18
  import { UrlComponentPreview } from "./components/UrlComponentPreview";
19
19
  import { StorageThumbnail } from "./components/StorageThumbnail";
@@ -31,12 +31,14 @@ import { DatePreview } from "./components/DatePreview";
31
31
  import { BooleanPreview } from "./components/BooleanPreview";
32
32
  import { NumberPropertyPreview } from "./property_previews/NumberPropertyPreview";
33
33
  import { ErrorView } from "../components";
34
+ import { UserPreview } from "./components/UserPreview";
34
35
 
35
36
  /**
36
37
  * @group Preview components
37
38
  */
38
39
  export const PropertyPreview = React.memo(function PropertyPreview<T extends CMSType>(props: PropertyPreviewProps<T>) {
39
40
 
41
+ const authController = useAuthController();
40
42
  const customizationController = useCustomizationController();
41
43
 
42
44
  let content: React.ReactNode | any;
@@ -53,10 +55,11 @@ export const PropertyPreview = React.memo(function PropertyPreview<T extends CMS
53
55
  const property = resolveProperty({
54
56
  propertyKey,
55
57
  propertyOrBuilder: inputProperty,
56
- fields: customizationController.propertyConfigs
58
+ propertyConfigs: customizationController.propertyConfigs,
59
+ authController
57
60
  });
58
61
 
59
- if (value === undefined || property === null) {
62
+ if (property === null) {
60
63
  content = <EmptyValue/>;
61
64
  } else if (property.Preview) {
62
65
  content = createElement(property.Preview as React.ComponentType<PropertyPreviewProps>,
@@ -70,12 +73,19 @@ export const PropertyPreview = React.memo(function PropertyPreview<T extends CMS
70
73
  // entity,
71
74
  customProps: property.customProps
72
75
  });
73
- } else if (value === null) {
76
+ } else if (value === undefined || value === null) {
74
77
  content = <EmptyValue/>;
75
78
  } else if (property.dataType === "string") {
76
79
  const stringProperty = property as ResolvedStringProperty;
77
80
  if (typeof value === "string") {
78
- if (stringProperty.url) {
81
+ if (stringProperty.storage) {
82
+ const filePath = stringProperty.storage.previewUrl ? stringProperty.storage.previewUrl(value) : value;
83
+ content = <StorageThumbnail
84
+ interactive={interactive}
85
+ storeUrl={property.storage?.storeUrl ?? false}
86
+ size={props.size}
87
+ storagePathOrDownloadUrl={filePath}/>;
88
+ } else if (stringProperty.url) {
79
89
  if (typeof stringProperty.url === "boolean")
80
90
  content =
81
91
  <UrlComponentPreview size={props.size}
@@ -86,15 +96,29 @@ export const PropertyPreview = React.memo(function PropertyPreview<T extends CMS
86
96
  url={value}
87
97
  interactive={interactive}
88
98
  previewType={stringProperty.url}/>;
89
- } else if (stringProperty.storage) {
90
- const filePath = stringProperty.storage.previewUrl ? stringProperty.storage.previewUrl(value) : value;
91
- content = <StorageThumbnail
92
- interactive={interactive}
93
- storeUrl={property.storage?.storeUrl ?? false}
94
- size={props.size}
95
- storagePathOrDownloadUrl={filePath}/>;
96
99
  } else if (stringProperty.markdown) {
97
100
  content = <Markdown source={value} size={"small"}/>;
101
+ } else if (stringProperty.userSelect) {
102
+ content = <UserPreview
103
+ value={value}
104
+ property={stringProperty}
105
+ propertyKey={propertyKey}
106
+ size={props.size}
107
+ />;
108
+ } else if (stringProperty.reference) {
109
+ if (typeof stringProperty.reference.path === "string") {
110
+ content = <ReferencePreview
111
+ disabled={!stringProperty.reference.path}
112
+ previewProperties={stringProperty.reference.previewProperties}
113
+ includeId={stringProperty.reference.includeId}
114
+ includeEntityLink={stringProperty.reference.includeEntityLink}
115
+ size={props.size}
116
+ reference={new EntityReference(value, stringProperty.reference.path)}
117
+ />;
118
+ } else {
119
+ content = <EmptyValue/>;
120
+ }
121
+
98
122
  } else {
99
123
  content = <StringPropertyPreview {...props}
100
124
  property={stringProperty}
@@ -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 = "small" | "medium" | "large";
7
7
 
8
8
  /**
9
9
  * @group Preview components
@@ -21,6 +21,6 @@ export function BooleanPreview({
21
21
  size={size}
22
22
  color={"secondary"}/>
23
23
  {property.name && <span
24
- className={cls("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 === "small" ? "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
  }
@@ -6,7 +6,7 @@ import { buildEnumLabel, enumToObjectEntries, getColorScheme, getLabelOrConfigFr
6
6
  export interface EnumValuesChipProps {
7
7
  enumValues?: EnumValues;
8
8
  enumKey: string | number;
9
- size: "tiny" | "small" | "medium";
9
+ size: "small" | "medium" | "large";
10
10
  className?: string;
11
11
  children?: React.ReactNode;
12
12
  }
@@ -22,7 +22,7 @@ export function ImagePreview({
22
22
 
23
23
  const imageSize = useMemo(() => getThumbnailMeasure(size), [size]);
24
24
 
25
- if (size === "tiny") {
25
+ if (size === "small") {
26
26
  return (
27
27
  <img src={url}
28
28
  className={"rounded-md"}
@@ -56,19 +56,20 @@ export function ImagePreview({
56
56
  className={"rounded-md"}
57
57
  style={imageStyle}/>
58
58
 
59
-
60
59
  <div className={"flex flex-row gap-2 absolute bottom-[-4px] right-[-4px] invisible group-hover:visible"}>
61
- {navigator && <Tooltip title="Copy url to clipboard" side={"bottom"}>
60
+ {navigator && <Tooltip
61
+ asChild={true}
62
+ title="Copy url to clipboard" side={"bottom"}>
62
63
  <IconButton
63
64
  variant={"filled"}
64
- size={"small"}
65
+ size={"smallest"}
65
66
  onClick={(e) => {
66
67
  e.stopPropagation();
67
68
  e.preventDefault();
68
69
  return navigator.clipboard.writeText(url);
69
70
  }}>
70
- <ContentCopyIcon className={"text-gray-700 dark:text-gray-300"}
71
- size={"small"}/>
71
+ <ContentCopyIcon className={"text-surface-700 dark:text-surface-300"}
72
+ size={"smallest"}/>
72
73
  </IconButton>
73
74
  </Tooltip>}
74
75
 
@@ -80,11 +81,11 @@ export function ImagePreview({
80
81
  href={url}
81
82
  rel="noopener noreferrer"
82
83
  target="_blank"
83
- size={"small"}
84
+ size={"smallest"}
84
85
  onClick={(e: any) => e.stopPropagation()}
85
86
  >
86
- <OpenInNewIcon className={"text-gray-700 dark:text-gray-300"}
87
- size={"small"}/>
87
+ <OpenInNewIcon className={"text-surface-700 dark:text-surface-300"}
88
+ size={"smallest"}/>
88
89
  </IconButton>
89
90
  </Tooltip>
90
91
  </div>
@@ -4,13 +4,13 @@ import { Entity, EntityCollection, EntityReference } from "../../types";
4
4
  import { useCustomizationController, useEntityFetch, useNavigationController } from "../../hooks";
5
5
  import { PreviewSize } from "../PropertyPreviewProps";
6
6
  import { Skeleton } from "@firecms/ui";
7
- import { ErrorView } from "../../components";
7
+ import { ErrorBoundary, ErrorView } from "../../components";
8
8
  import { EntityPreview, EntityPreviewContainer } from "../../components/EntityPreview";
9
9
 
10
10
  export type ReferencePreviewProps = {
11
11
  disabled?: boolean;
12
12
  reference: EntityReference,
13
- size: PreviewSize;
13
+ size?: PreviewSize;
14
14
  previewProperties?: string[];
15
15
  onClick?: (e: React.SyntheticEvent) => void;
16
16
  hover?: boolean;
@@ -21,30 +21,21 @@ export type ReferencePreviewProps = {
21
21
  /**
22
22
  * @group Preview components
23
23
  */
24
- export const ReferencePreview = React.memo<ReferencePreviewProps>(function ReferencePreview(props: ReferencePreviewProps) {
24
+ export const ReferencePreview = function ReferencePreview(props: ReferencePreviewProps) {
25
25
  const reference = props.reference;
26
26
  if (!(typeof reference === "object" && "isEntityReference" in reference && reference.isEntityReference())) {
27
27
  console.warn("Reference preview received value of type", typeof reference);
28
28
  return <EntityPreviewContainer
29
29
  onClick={props.onClick}
30
- size={props.size}>
30
+ size={props.size ?? "medium"}>
31
31
  <ErrorView error={"Unexpected value. Click to edit"}
32
32
  tooltip={JSON.stringify(reference)}/>
33
33
  </EntityPreviewContainer>;
34
34
  }
35
- return <ReferencePreviewInternal {...props} />;
36
- }, areEqual) as React.FunctionComponent<ReferencePreviewProps>;
37
-
38
- function areEqual(prevProps: ReferencePreviewProps, nextProps: ReferencePreviewProps) {
39
- return prevProps.disabled === nextProps.disabled &&
40
- prevProps.size === nextProps.size &&
41
- prevProps.hover === nextProps.hover &&
42
- prevProps.reference?.id === nextProps.reference?.id &&
43
- prevProps.reference?.path === nextProps.reference?.path &&
44
- prevProps.includeEntityLink === nextProps.includeEntityLink &&
45
- prevProps.onClick === nextProps.onClick
46
- ;
47
- }
35
+ return <ErrorBoundary>
36
+ <ReferencePreviewInternal {...props} />
37
+ </ErrorBoundary>;
38
+ };
48
39
 
49
40
  function ReferencePreviewInternal({
50
41
  disabled,
@@ -151,8 +142,9 @@ function ReferencePreviewExisting<M extends Record<string, any> = any>({
151
142
  </EntityPreviewContainer>
152
143
  );
153
144
  }
145
+
154
146
  return <EntityPreview size={size}
155
- previewProperties={previewProperties}
147
+ previewKeys={previewProperties}
156
148
  disabled={disabled}
157
149
  entity={usedEntity}
158
150
  collection={collection}
@@ -55,24 +55,23 @@ export function UrlComponentPreview({
55
55
  return <VideoPreview size={size} src={url} interactive={interactive}/>;
56
56
  } else {
57
57
  return (
58
- <a
59
- href={url}
60
- rel="noopener noreferrer"
61
- target="_blank"
62
- onClick={(e) => e.stopPropagation()}
63
- className="flex flex-col items-center justify-center"
64
- style={{
65
- width: getThumbnailMeasure(size),
66
- height: getThumbnailMeasure(size)
67
- }}>
68
- <DescriptionIcon className="text-gray-700 dark:text-gray-300"/>
69
- {hint &&
70
- <Tooltip title={hint}>
71
- <Typography
72
- className="max-w-full truncate rtl text-left"
73
- variant={"caption"}>{hint}</Typography>
74
- </Tooltip>}
75
- </a>
58
+ <Tooltip title={hint}>
59
+ <a
60
+ href={url}
61
+ rel="noopener noreferrer"
62
+ target="_blank"
63
+ onClick={(e) => e.stopPropagation()}
64
+ className="flex flex-col items-center justify-center"
65
+ style={{
66
+ width: getThumbnailMeasure(size),
67
+ height: getThumbnailMeasure(size)
68
+ }}>
69
+ <DescriptionIcon className="text-surface-700 dark:text-surface-300"/>
70
+ {hint && <Typography
71
+ className="max-w-full truncate rtl text-left"
72
+ variant={"caption"}>{hint}</Typography>}
73
+ </a>
74
+ </Tooltip>
76
75
  );
77
76
  }
78
77
  }
@@ -84,11 +83,11 @@ function VideoPreview({
84
83
  }: { size: PreviewSize, src: string, interactive: boolean }) {
85
84
 
86
85
  const imageSize = useMemo(() => {
87
- if (size === "tiny")
86
+ if (size === "small")
88
87
  return "140px";
89
- else if (size === "small")
90
- return "240px";
91
88
  else if (size === "medium")
89
+ return "240px";
90
+ else if (size === "large")
92
91
  return "100%";
93
92
  else throw new Error("Invalid size");
94
93
  }, [size]);
@@ -0,0 +1,27 @@
1
+ import React from "react";
2
+ import { PropertyPreviewProps } from "../PropertyPreviewProps";
3
+ import { useInternalUserManagementController } from "../../hooks";
4
+ import { UserDisplay } from "../../components/UserDisplay";
5
+ import { EmptyValue } from "./EmptyValue";
6
+ import { Typography } from "@firecms/ui";
7
+
8
+ /**
9
+ * Preview component for displaying user information.
10
+ * This is a simple wrapper around UserDisplay.
11
+ *
12
+ * @group Preview components
13
+ */
14
+ export function UserPreview({ value }: PropertyPreviewProps<string>) {
15
+ const { getUser } = useInternalUserManagementController();
16
+
17
+ if (!value) {
18
+ return <EmptyValue/>;
19
+ }
20
+
21
+ const user = getUser(value);
22
+ if (!user) {
23
+ return <Typography variant={"caption"} color={"secondary"}>User not found: {value}</Typography>;
24
+ }
25
+
26
+ return <UserDisplay user={user}/>;
27
+ }
@@ -25,3 +25,4 @@ export * from "./components/EnumValuesChip";
25
25
  export * from "./components/EmptyValue";
26
26
  export * from "./components/ImagePreview";
27
27
  export * from "./components/ReferencePreview";
28
+ export * from "./components/UserPreview";
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import { ErrorBoundary } from "../../components";
3
- import { useCustomizationController } from "../../hooks";
3
+ import { useAuthController, useCustomizationController } from "../../hooks";
4
4
  import { PropertyPreviewProps } from "../PropertyPreviewProps";
5
5
  import { PropertyPreview } from "../PropertyPreview";
6
6
  import { resolveArrayProperty } from "../../util";
@@ -15,12 +15,13 @@ export function ArrayOfMapsPreview({
15
15
  size,
16
16
  // entity
17
17
  }: PropertyPreviewProps<Record<string, any>[]>) {
18
-
18
+ const authController = useAuthController();
19
19
  const customizationController = useCustomizationController();
20
20
  const property = resolveArrayProperty({
21
21
  propertyKey,
22
22
  property: inputProperty,
23
- fields: customizationController.propertyConfigs
23
+ propertyConfigs: customizationController.propertyConfigs,
24
+ authController
24
25
  });
25
26
 
26
27
  if (Array.isArray(property?.of)) {
@@ -36,7 +37,7 @@ export function ArrayOfMapsPreview({
36
37
  throw Error(`You need to specify a 'properties' prop (or specify a custom field) in your map property ${propertyKey}`);
37
38
  }
38
39
  const values = value;
39
- const previewProperties: string[] | undefined = mapProperty.previewProperties;
40
+ const previewProperties: string[] | undefined = mapProperty.previewKeys;
40
41
 
41
42
  if (!values) return null;
42
43
 
@@ -54,7 +55,7 @@ export function ArrayOfMapsPreview({
54
55
  values.map((v, index) => {
55
56
  return (
56
57
  <div key={`table_${v}_${index}`}
57
- className="border-b last:border-b-0">
58
+ className="border-b last:border-b-0 py-2">
58
59
  {mapProperties && mapProperties.map(
59
60
  (key) => (
60
61
  <div
@@ -1,6 +1,6 @@
1
1
  import { ResolvedReferenceProperty } from "../../types";
2
2
  import { resolveArrayProperty } from "../../util";
3
- import { useCustomizationController } from "../../hooks";
3
+ import { useAuthController, useCustomizationController } from "../../hooks";
4
4
  import { PreviewSize, PropertyPreviewProps } from "../PropertyPreviewProps";
5
5
  import { ReferencePreview } from "../components/ReferencePreview";
6
6
 
@@ -13,12 +13,13 @@ export function ArrayOfReferencesPreview({
13
13
  property: inputProperty,
14
14
  size
15
15
  }: PropertyPreviewProps<any[]>) {
16
-
16
+ const authController = useAuthController();
17
17
  const customizationController = useCustomizationController();
18
18
  const property = resolveArrayProperty({
19
19
  propertyKey,
20
20
  property: inputProperty,
21
- fields: customizationController.propertyConfigs
21
+ propertyConfigs: customizationController.propertyConfigs,
22
+ authController
22
23
  });
23
24
 
24
25
  if (Array.isArray(property?.of)) {
@@ -28,7 +29,7 @@ export function ArrayOfReferencesPreview({
28
29
  if (property?.dataType !== "array" || !property.of || property.of.dataType !== "reference")
29
30
  throw Error("Picked wrong preview component ArrayOfReferencesPreview");
30
31
 
31
- const childSize: PreviewSize = size === "medium" ? "small" : "tiny";
32
+ const childSize: PreviewSize = size === "medium" ? "medium" : "small";
32
33
 
33
34
  return (
34
35
  <div className="flex flex-col w-full">
@@ -3,7 +3,7 @@ import React from "react";
3
3
  import { resolveArrayProperty } from "../../util";
4
4
  import { ResolvedProperty } from "../../types";
5
5
 
6
- import { useCustomizationController } from "../../hooks";
6
+ import { useAuthController, useCustomizationController } from "../../hooks";
7
7
  import { PreviewSize, PropertyPreviewProps } from "../PropertyPreviewProps";
8
8
  import { PropertyPreview } from "../PropertyPreview";
9
9
  import { ErrorBoundary } from "../../components";
@@ -19,11 +19,13 @@ export function ArrayOfStorageComponentsPreview({
19
19
  size
20
20
  }: PropertyPreviewProps<any[]>) {
21
21
 
22
+ const authController = useAuthController();
22
23
  const customizationController = useCustomizationController();
23
24
  const property = resolveArrayProperty({
24
25
  propertyKey,
25
26
  property: inputProperty,
26
- fields: customizationController.propertyConfigs
27
+ propertyConfigs: customizationController.propertyConfigs,
28
+ authController
27
29
  });
28
30
 
29
31
  if (Array.isArray(property.of)) {
@@ -33,7 +35,7 @@ export function ArrayOfStorageComponentsPreview({
33
35
  if (property.dataType !== "array" || !property.of || property.of.dataType !== "string")
34
36
  throw Error("Picked wrong preview component ArrayOfStorageComponentsPreview");
35
37
 
36
- const childSize: PreviewSize = size === "medium" ? "small" : "tiny";
38
+ const childSize: PreviewSize = size === "medium" ? "medium" : "small";
37
39
 
38
40
  return (
39
41
  <div className={"flex flex-wrap gap-2"}>
@@ -3,7 +3,7 @@ import { ResolvedStringProperty } from "../../types";
3
3
 
4
4
  import { resolveArrayProperty } from "../../util";
5
5
  import { PropertyPreviewProps, StringPropertyPreview } from "../../preview";
6
- import { useCustomizationController } from "../../hooks";
6
+ import { useAuthController, useCustomizationController } from "../../hooks";
7
7
  import { ErrorBoundary } from "../../components";
8
8
 
9
9
  /**
@@ -16,12 +16,13 @@ export function ArrayOfStringsPreview({
16
16
  // entity,
17
17
  size
18
18
  }: PropertyPreviewProps<string[]>) {
19
-
19
+ const authController = useAuthController();
20
20
  const customizationController = useCustomizationController();
21
21
  const property = resolveArrayProperty({
22
22
  propertyKey,
23
23
  property: inputProperty,
24
- fields: customizationController.propertyConfigs
24
+ propertyConfigs: customizationController.propertyConfigs,
25
+ authController
25
26
  });
26
27
 
27
28
  if (Array.isArray(property.of)) {
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  import { resolveArrayProperty } from "../../util";
3
3
  import { ResolvedProperty } from "../../types";
4
- import { useCustomizationController } from "../../hooks";
4
+ import { useAuthController, useCustomizationController } from "../../hooks";
5
5
  import { PreviewSize, PropertyPreviewProps } from "../PropertyPreviewProps";
6
6
  import { PropertyPreview } from "../PropertyPreview";
7
7
  import { cls, defaultBorderMixin } from "@firecms/ui";
@@ -19,11 +19,13 @@ export function ArrayOneOfPreview({
19
19
  // entity
20
20
  }: PropertyPreviewProps<any[]>) {
21
21
 
22
+ const authController = useAuthController();
22
23
  const customizationController = useCustomizationController();
23
24
  const property = resolveArrayProperty({
24
25
  propertyKey,
25
26
  property: inputProperty,
26
- fields: customizationController.propertyConfigs
27
+ propertyConfigs: customizationController.propertyConfigs,
28
+ authController
27
29
  });
28
30
 
29
31
  if (property?.dataType !== "array")
@@ -37,7 +39,7 @@ export function ArrayOneOfPreview({
37
39
 
38
40
  if (!values) return null;
39
41
 
40
- const childSize: PreviewSize = size === "medium" ? "small" : "tiny";
42
+ const childSize: PreviewSize = size === "medium" ? "medium" : "small";
41
43
 
42
44
  const typeField = property.oneOf.typeField ?? DEFAULT_ONE_OF_TYPE;
43
45
  const valueField = property.oneOf.valueField ?? DEFAULT_ONE_OF_VALUE;
@@ -49,7 +51,7 @@ export function ArrayOneOfPreview({
49
51
  values.map((value, index) =>
50
52
  <React.Fragment
51
53
  key={"preview_array_" + value + "_" + index}>
52
- <div className={cls(defaultBorderMixin, "m-1 border-b last:border-b-0")}>
54
+ <div className={cls(defaultBorderMixin, "m-1 border-b last:border-b-0 py-2")}>
53
55
  <ErrorBoundary>
54
56
  {value && <PropertyPreview
55
57
  propertyKey={propertyKey}
@@ -2,7 +2,7 @@ import React from "react";
2
2
 
3
3
  import { resolveArrayProperty } from "../../util";
4
4
  import { ResolvedProperty } from "../../types";
5
- import { useCustomizationController } from "../../hooks";
5
+ import { useAuthController, useCustomizationController } from "../../hooks";
6
6
  import { PreviewSize, PropertyPreviewProps } from "../PropertyPreviewProps";
7
7
  import { PropertyPreview } from "../PropertyPreview";
8
8
  import { cls, defaultBorderMixin } from "@firecms/ui";
@@ -19,11 +19,13 @@ export function ArrayPropertyPreview({
19
19
  size
20
20
  }: PropertyPreviewProps<any[]>) {
21
21
 
22
+ const authController = useAuthController();
22
23
  const customizationController = useCustomizationController();
23
24
  const property = resolveArrayProperty({
24
25
  propertyKey,
25
26
  property: inputProperty,
26
- fields: customizationController.propertyConfigs
27
+ propertyConfigs: customizationController.propertyConfigs,
28
+ authController
27
29
  });
28
30
 
29
31
  if (!property.of) {
@@ -37,10 +39,10 @@ export function ArrayPropertyPreview({
37
39
 
38
40
  if (!values) return null;
39
41
 
40
- const childSize: PreviewSize = size === "medium" ? "small" : "tiny";
42
+ const childSize: PreviewSize = size === "medium" ? "medium" : "small";
41
43
 
42
44
  return (
43
- <div className="flex flex-col gap-2">
45
+ <div className="w-full flex flex-col gap-2">
44
46
  {values &&
45
47
  values.map((value, index) => {
46
48
  const of: ResolvedProperty = property.resolvedProperties[index] ??
@@ -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 === "small")
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) => (
@@ -58,6 +58,7 @@ export function MapPropertyPreview<T extends Record<string, any> = Record<string
58
58
  {mapPropertyKeys &&
59
59
  mapPropertyKeys.map((key, index) => {
60
60
  const childProperty = mapProperty.properties![key];
61
+ const isArrayOrMap = childProperty.dataType === "map" || childProperty === "array";
61
62
  return (
62
63
  <div
63
64
  key={`map_preview_table_${key}}`}
@@ -75,7 +76,7 @@ export function MapPropertyPreview<T extends Record<string, any> = Record<string
75
76
  <div
76
77
  className="flex-grow max-w-[75%]">
77
78
  <ErrorBoundary>
78
- {!(childProperty.dataType === "map" || childProperty === "array") &&
79
+ {!isArrayOrMap &&
79
80
  <PropertyPreview
80
81
  propertyKey={key}
81
82
  value={(value)[key]}
@@ -86,7 +87,7 @@ export function MapPropertyPreview<T extends Record<string, any> = Record<string
86
87
  </div>
87
88
  </div>
88
89
 
89
- {(childProperty.dataType === "map" || childProperty === "array") &&
90
+ {isArrayOrMap &&
90
91
  <div className={cls(defaultBorderMixin, "border-l pl-4 ml-2 my-2")}>
91
92
  <PropertyPreview
92
93
  propertyKey={key}
@@ -110,7 +111,7 @@ export function KeyValuePreview({ value }: { value: any }) {
110
111
  return <div
111
112
  className="flex flex-col gap-1 w-full">
112
113
  {
113
- Object.entries(value).map(([key, childValue]) => (
114
+ Object.entries(value).map(([key, childValue]: [string, any]) => (
114
115
  <div
115
116
  key={`map_preview_table_${key}}`}
116
117
  className={cls(defaultBorderMixin, "last:border-b-0 border-b")}>
@@ -127,9 +128,9 @@ export function KeyValuePreview({ value }: { value: any }) {
127
128
  </div>
128
129
  <div
129
130
  className="flex-grow max-w-[75%]">
130
- {typeof childValue !== "object" && <Typography>
131
+ {childValue && typeof childValue !== "object" && <Typography>
131
132
  <ErrorBoundary>
132
- {childValue && childValue.toString()}
133
+ {childValue.toString()}
133
134
  </ErrorBoundary>
134
135
  </Typography>}
135
136
  </div>