@firecms/core 3.0.0-canary.14 → 3.0.0-canary.140

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 (300) 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 +5 -4
  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 +5 -3
  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 +2 -2
  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 +3 -0
  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 +1 -1
  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/FormikArrayContainer.d.ts +2 -1
  52. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  53. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  54. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  55. package/dist/form/components/index.d.ts +1 -0
  56. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  57. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  58. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  59. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  60. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  61. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  62. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  63. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  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/save.d.ts +1 -2
  71. package/dist/hooks/index.d.ts +1 -0
  72. package/dist/hooks/useBuildNavigationController.d.ts +1 -2
  73. package/dist/hooks/useProjectLog.d.ts +8 -2
  74. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  75. package/dist/index.d.ts +1 -0
  76. package/dist/index.es.js +15817 -12453
  77. package/dist/index.es.js.map +1 -1
  78. package/dist/index.umd.js +20045 -587
  79. package/dist/index.umd.js.map +1 -1
  80. package/dist/internal/useBuildDataSource.d.ts +1 -16
  81. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  82. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  83. package/dist/preview/components/ReferencePreview.d.ts +3 -2
  84. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  85. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  86. package/dist/types/auth.d.ts +3 -3
  87. package/dist/types/collections.d.ts +39 -5
  88. package/dist/types/datasource.d.ts +55 -35
  89. package/dist/types/entities.d.ts +6 -1
  90. package/dist/types/entity_actions.d.ts +14 -0
  91. package/dist/types/entity_overrides.d.ts +2 -2
  92. package/dist/types/fields.d.ts +47 -41
  93. package/dist/types/firecms.d.ts +4 -0
  94. package/dist/types/index.d.ts +0 -1
  95. package/dist/types/navigation.d.ts +6 -5
  96. package/dist/types/plugins.d.ts +14 -4
  97. package/dist/types/properties.d.ts +34 -21
  98. package/dist/types/property_config.d.ts +0 -2
  99. package/dist/types/side_dialogs_controller.d.ts +10 -0
  100. package/dist/types/storage.d.ts +86 -3
  101. package/dist/util/entities.d.ts +2 -2
  102. package/dist/util/icon_list.d.ts +5 -1
  103. package/dist/util/icon_synonyms.d.ts +1 -97
  104. package/dist/util/icons.d.ts +3 -2
  105. package/dist/util/index.d.ts +1 -0
  106. package/dist/util/navigation_utils.d.ts +2 -2
  107. package/dist/util/objects.d.ts +1 -1
  108. package/dist/util/plurals.d.ts +0 -2
  109. package/dist/util/property_utils.d.ts +1 -1
  110. package/dist/util/resolutions.d.ts +30 -16
  111. package/dist/util/storage.d.ts +23 -2
  112. package/dist/util/useStorageUploadController.d.ts +3 -3
  113. package/package.json +128 -119
  114. package/src/app/AppBar.tsx +18 -0
  115. package/src/app/Drawer.tsx +24 -0
  116. package/src/app/Scaffold.tsx +243 -0
  117. package/src/app/index.ts +4 -0
  118. package/src/app/useApp.tsx +32 -0
  119. package/src/components/ArrayContainer.tsx +19 -15
  120. package/src/components/CircularProgressCenter.tsx +1 -1
  121. package/src/components/ClearFilterSortButton.tsx +41 -0
  122. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +1 -1
  123. package/src/components/DeleteEntityDialog.tsx +1 -1
  124. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +12 -19
  125. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +21 -20
  126. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +10 -6
  127. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +41 -35
  128. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  129. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +31 -16
  130. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +14 -6
  131. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +29 -34
  132. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +32 -30
  133. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +19 -7
  134. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +8 -11
  135. package/src/components/EntityCollectionView/EntityCollectionView.tsx +138 -85
  136. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  137. package/src/components/EntityCollectionView/useSelectionController.tsx +19 -7
  138. package/src/components/EntityCollectionView/utils.ts +19 -0
  139. package/src/components/EntityPreview.tsx +43 -39
  140. package/src/components/EntityView.tsx +6 -6
  141. package/src/components/ErrorView.tsx +1 -1
  142. package/src/components/HomePage/DefaultHomePage.tsx +25 -19
  143. package/src/components/HomePage/NavigationCard.tsx +3 -3
  144. package/src/components/HomePage/NavigationCardBinding.tsx +1 -1
  145. package/src/components/HomePage/NavigationGroup.tsx +1 -1
  146. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  147. package/src/components/PropertyConfigBadge.tsx +9 -3
  148. package/src/components/PropertyIdCopyTooltip.tsx +48 -0
  149. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +8 -7
  150. package/src/components/ReferenceWidget.tsx +22 -12
  151. package/src/components/SearchIconsView.tsx +10 -7
  152. package/src/components/SelectableTable/SelectableTable.tsx +7 -7
  153. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  154. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +22 -7
  155. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +28 -6
  156. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +88 -21
  157. package/src/components/VirtualTable/VirtualTable.tsx +77 -46
  158. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  159. package/src/components/VirtualTable/VirtualTableHeader.tsx +4 -4
  160. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  161. package/src/components/VirtualTable/VirtualTableProps.tsx +18 -14
  162. package/src/components/VirtualTable/VirtualTableRow.tsx +4 -5
  163. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
  164. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -1
  165. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  166. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +14 -28
  167. package/src/components/VirtualTable/types.tsx +2 -3
  168. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +8 -4
  169. package/src/components/common/index.ts +1 -0
  170. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  171. package/src/components/common/types.tsx +4 -6
  172. package/src/components/common/useColumnsIds.tsx +23 -2
  173. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +23 -12
  174. package/src/components/common/useTableSearchHelper.ts +53 -12
  175. package/src/components/index.tsx +4 -2
  176. package/src/contexts/DialogsProvider.tsx +2 -2
  177. package/src/core/DefaultAppBar.tsx +176 -0
  178. package/src/core/DefaultDrawer.tsx +183 -0
  179. package/src/core/DrawerNavigationItem.tsx +66 -0
  180. package/src/core/EntityEditView.tsx +716 -153
  181. package/src/core/EntitySidePanel.tsx +1 -2
  182. package/src/core/FireCMS.tsx +53 -52
  183. package/src/core/NavigationRoutes.tsx +7 -8
  184. package/src/core/SideDialogs.tsx +1 -0
  185. package/src/core/field_configs.tsx +7 -8
  186. package/src/core/index.tsx +3 -4
  187. package/src/form/PropertyFieldBinding.tsx +56 -22
  188. package/src/form/components/CustomIdField.tsx +4 -2
  189. package/src/form/components/FieldHelperText.tsx +4 -4
  190. package/src/form/components/FormikArrayContainer.tsx +4 -1
  191. package/src/form/components/LabelWithIcon.tsx +27 -19
  192. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  193. package/src/form/components/StorageItemPreview.tsx +21 -11
  194. package/src/form/components/StorageUploadProgress.tsx +3 -4
  195. package/src/form/components/index.tsx +1 -0
  196. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +29 -17
  197. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +29 -25
  198. package/src/form/field_bindings/BlockFieldBinding.tsx +30 -27
  199. package/src/form/field_bindings/DateTimeFieldBinding.tsx +17 -14
  200. package/src/form/field_bindings/KeyValueFieldBinding.tsx +50 -44
  201. package/src/form/field_bindings/MapFieldBinding.tsx +20 -19
  202. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +150 -0
  203. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
  204. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  205. package/src/form/field_bindings/ReferenceFieldBinding.tsx +41 -30
  206. package/src/form/field_bindings/RepeatFieldBinding.tsx +32 -19
  207. package/src/form/field_bindings/SelectFieldBinding.tsx +20 -13
  208. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +36 -46
  209. package/src/form/field_bindings/SwitchFieldBinding.tsx +9 -5
  210. package/src/form/field_bindings/TextFieldBinding.tsx +26 -23
  211. package/src/form/index.tsx +4 -9
  212. package/src/form/useClearRestoreValue.tsx +2 -2
  213. package/src/form/validation.ts +1 -17
  214. package/src/hooks/data/delete.ts +2 -1
  215. package/src/hooks/data/save.ts +9 -4
  216. package/src/hooks/data/useDataSource.tsx +11 -3
  217. package/src/hooks/index.tsx +1 -0
  218. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  219. package/src/hooks/useBuildModeController.tsx +11 -5
  220. package/src/hooks/useBuildNavigationController.tsx +91 -31
  221. package/src/hooks/useProjectLog.tsx +32 -10
  222. package/src/hooks/useResolvedNavigationFrom.tsx +1 -1
  223. package/src/hooks/useValidateAuthenticator.tsx +21 -41
  224. package/src/index.ts +1 -0
  225. package/src/internal/useBuildDataSource.ts +72 -82
  226. package/src/internal/useBuildSideDialogsController.tsx +1 -0
  227. package/src/internal/useBuildSideEntityController.tsx +102 -22
  228. package/src/internal/useUnsavedChangesDialog.tsx +3 -1
  229. package/src/preview/PropertyPreview.tsx +11 -18
  230. package/src/preview/PropertyPreviewProps.tsx +7 -1
  231. package/src/preview/components/BooleanPreview.tsx +2 -2
  232. package/src/preview/components/EnumValuesChip.tsx +2 -2
  233. package/src/preview/components/ImagePreview.tsx +25 -35
  234. package/src/preview/components/ReferencePreview.tsx +23 -34
  235. package/src/preview/components/StorageThumbnail.tsx +5 -1
  236. package/src/preview/components/UrlComponentPreview.tsx +44 -11
  237. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
  238. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
  239. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
  240. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
  241. package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
  242. package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
  243. package/src/preview/property_previews/MapPropertyPreview.tsx +6 -6
  244. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +2 -2
  245. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  246. package/src/preview/util.ts +2 -2
  247. package/src/types/auth.tsx +3 -3
  248. package/src/types/collections.ts +48 -7
  249. package/src/types/customization_controller.tsx +0 -1
  250. package/src/types/datasource.ts +65 -43
  251. package/src/types/entities.ts +11 -1
  252. package/src/types/entity_actions.tsx +16 -3
  253. package/src/types/entity_overrides.tsx +2 -2
  254. package/src/types/fields.tsx +51 -45
  255. package/src/types/firecms.tsx +5 -0
  256. package/src/types/index.ts +0 -1
  257. package/src/types/navigation.ts +7 -7
  258. package/src/types/plugins.tsx +16 -6
  259. package/src/types/properties.ts +39 -22
  260. package/src/types/property_config.tsx +0 -2
  261. package/src/types/side_dialogs_controller.tsx +13 -0
  262. package/src/types/storage.ts +94 -3
  263. package/src/util/entities.ts +6 -5
  264. package/src/util/enums.ts +1 -1
  265. package/src/util/icon_list.ts +15 -10
  266. package/src/util/icon_synonyms.ts +3 -99
  267. package/src/util/icons.tsx +8 -2
  268. package/src/util/index.ts +1 -0
  269. package/src/util/make_properties_editable.ts +13 -5
  270. package/src/util/navigation_utils.ts +6 -6
  271. package/src/util/objects.ts +25 -28
  272. package/src/util/permissions.ts +1 -0
  273. package/src/util/plurals.ts +0 -2
  274. package/src/util/property_utils.tsx +2 -2
  275. package/src/util/references.ts +3 -0
  276. package/src/util/resolutions.ts +79 -46
  277. package/src/util/storage.ts +79 -21
  278. package/src/util/strings.ts +2 -2
  279. package/src/util/useStorageUploadController.tsx +33 -7
  280. package/src/util/useTraceUpdate.tsx +1 -0
  281. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  282. package/dist/components/VirtualTable/common.d.ts +0 -2
  283. package/dist/core/Drawer.d.ts +0 -23
  284. package/dist/core/Scaffold.d.ts +0 -55
  285. package/dist/core/SideEntityView.d.ts +0 -7
  286. package/dist/form/EntityForm.d.ts +0 -77
  287. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  288. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  289. package/dist/internal/useLocaleConfig.d.ts +0 -1
  290. package/dist/types/appcheck.d.ts +0 -26
  291. package/src/components/FireCMSAppBar.tsx +0 -165
  292. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  293. package/src/core/Drawer.tsx +0 -191
  294. package/src/core/Scaffold.tsx +0 -281
  295. package/src/core/SideEntityView.tsx +0 -38
  296. package/src/form/EntityForm.tsx +0 -728
  297. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  298. package/src/internal/useBuildCustomizationController.tsx +0 -5
  299. package/src/internal/useLocaleConfig.tsx +0 -18
  300. package/src/types/appcheck.ts +0 -29
@@ -1,43 +1,45 @@
1
1
  import React from "react";
2
2
 
3
- import { Entity, EntityCollection, ResolvedStringProperty } from "../../types";
3
+ import { ResolvedStringProperty } from "../../types";
4
4
  import { PreviewSize, PropertyPreview } from "../../preview";
5
5
 
6
- import { cn, IconButton, paperMixin, RemoveIcon, Tooltip } from "@firecms/ui";
6
+ import { cls, DescriptionIcon, IconButton, paperMixin, RemoveIcon, Tooltip } from "@firecms/ui";
7
7
  import { ErrorBoundary } from "../../components";
8
8
 
9
9
  interface StorageItemPreviewProps {
10
10
  name: string;
11
11
  property: ResolvedStringProperty;
12
12
  value: string,
13
- entity: Entity<any>,
14
13
  onRemove: (value: string) => void;
15
14
  size: PreviewSize;
16
15
  disabled: boolean;
17
- collection: EntityCollection;
16
+ placeholder?: boolean;
17
+ className?: string;
18
18
  }
19
19
 
20
20
  export function StorageItemPreview({
21
21
  name,
22
22
  property,
23
23
  value,
24
- entity,
25
24
  onRemove,
26
25
  disabled,
27
26
  size,
28
- collection
27
+ placeholder,
28
+ className
29
29
  }: StorageItemPreviewProps) {
30
30
 
31
31
  return (
32
- <div className={cn(paperMixin,
32
+ <div className={cls(paperMixin,
33
33
  "relative m-4 border-box flex items-center justify-center",
34
- size === "medium" ? "min-w-[220px] min-h-[220px] max-w-[220px]" : "min-w-[118px] min-h-[118px] max-w-[118px]")}>
34
+ size === "medium" ? "min-w-[220px] min-h-[220px] max-w-[220px]" : "min-w-[118px] min-h-[118px] max-w-[118px]",
35
+ className)}>
35
36
 
36
- {!disabled &&
37
+ {!placeholder && !disabled &&
37
38
  <div
38
39
  className="absolute rounded-full -top-2 -right-2 z-10 bg-white dark:bg-gray-900">
39
40
 
40
41
  <Tooltip
42
+ asChild={true}
41
43
  title="Remove">
42
44
  <IconButton
43
45
  size={"small"}
@@ -51,16 +53,24 @@ export function StorageItemPreview({
51
53
  </div>
52
54
  }
53
55
 
54
- {value &&
56
+ {!placeholder && value &&
55
57
  <ErrorBoundary>
56
58
  <PropertyPreview propertyKey={name}
57
59
  value={value}
58
60
  property={property}
59
- // entity={entity}
61
+ interactive={false}
60
62
  size={size}/>
61
63
  </ErrorBoundary>
62
64
  }
63
65
 
66
+ {placeholder &&
67
+ <div
68
+ onClick={(e) => e.stopPropagation()}
69
+ className="flex flex-col items-center justify-center w-full h-full">
70
+ <DescriptionIcon className="text-gray-700 dark:text-gray-300"/>
71
+ </div>
72
+ }
73
+
64
74
 
65
75
  </div>
66
76
  );
@@ -3,8 +3,7 @@ import React, { useCallback } from "react";
3
3
  import { useSnackbarController, useStorageSource } from "../../hooks";
4
4
  import { StorageFieldItem } from "../../util/useStorageUploadController";
5
5
  import { ErrorView } from "../../components";
6
- import { cn, paperMixin, Skeleton } from "@firecms/ui";
7
- import { EntityCollection, StorageSource } from "../../types";
6
+ import { cls, paperMixin, Skeleton } from "@firecms/ui";
8
7
 
9
8
  export interface StorageUploadItemProps {
10
9
  storagePath: string;
@@ -49,7 +48,7 @@ export function StorageUploadProgress({
49
48
  metadata
50
49
  })
51
50
  .then(async ({ path }) => {
52
- console.debug("Upload successful");
51
+ console.debug("Upload successful", path);
53
52
  await onFileUploadComplete(path, entry, metadata);
54
53
  if (mounted.current)
55
54
  setLoading(false);
@@ -88,7 +87,7 @@ export function StorageUploadProgress({
88
87
  }
89
88
  return (
90
89
 
91
- <div className={cn(paperMixin,
90
+ <div className={cls(paperMixin,
92
91
  "relative m-4 border-box flex items-center justify-center",
93
92
  `min-w-[${imageSize}px] min-h-[${imageSize}px]`)}>
94
93
 
@@ -1,3 +1,4 @@
1
1
  export * from "./FormikArrayContainer";
2
2
  export * from "./FieldHelperText";
3
3
  export * from "./LabelWithIcon";
4
+ export * from "./LabelWithIconAndTooltip";
@@ -1,9 +1,9 @@
1
1
  import React from "react";
2
2
  import { FieldProps } from "../../types";
3
- import { FieldHelperText, LabelWithIcon } from "../components";
3
+ import { FieldHelperText, LabelWithIconAndTooltip } from "../components";
4
4
  import { PropertyFieldBinding } from "../PropertyFieldBinding";
5
- import { ExpandablePanel } from "@firecms/ui";
6
- import { getIconForProperty } from "../../util";
5
+ import { ExpandablePanel, Typography } from "@firecms/ui";
6
+ import { getArrayResolvedProperties, getIconForProperty, isReadOnly } from "../../util";
7
7
  import { useClearRestoreValue } from "../useClearRestoreValue";
8
8
 
9
9
  /**
@@ -20,7 +20,7 @@ export function ArrayCustomShapedFieldBinding<T extends Array<any>>({
20
20
  showError,
21
21
  isSubmitting,
22
22
  setValue,
23
- tableMode,
23
+ minimalistView,
24
24
  property,
25
25
  includeDescription,
26
26
  underlyingValueHasChanged,
@@ -28,8 +28,15 @@ export function ArrayCustomShapedFieldBinding<T extends Array<any>>({
28
28
  disabled
29
29
  }: FieldProps<T, any, any>) {
30
30
 
31
- if (!Array.isArray(property.resolvedProperties))
32
- throw Error("ArrayCustomShapedFieldBinding misconfiguration. Property `of` not set");
31
+ let resolvedProperties = "resolvedProperties" in property ? property.resolvedProperties : undefined;
32
+ if (!resolvedProperties) {
33
+ resolvedProperties = getArrayResolvedProperties({
34
+ propertyValue: value,
35
+ propertyKey,
36
+ property,
37
+ ignoreMissingFields: false
38
+ })
39
+ }
33
40
 
34
41
  const expanded = property.expanded === undefined ? true : property.expanded;
35
42
 
@@ -39,22 +46,27 @@ export function ArrayCustomShapedFieldBinding<T extends Array<any>>({
39
46
  setValue
40
47
  });
41
48
 
42
- const title = <LabelWithIcon icon={getIconForProperty(property, "small")}
43
- required={property.validation?.required}
44
- className={"text-text-secondary dark:text-text-secondary-dark"}
45
- title={property.name}/>;
49
+ const title = (<>
50
+ <LabelWithIconAndTooltip
51
+ propertyKey={propertyKey}
52
+ icon={getIconForProperty(property, "small")}
53
+ required={property.validation?.required}
54
+ title={property.name}
55
+ className={"flex-grow text-text-secondary dark:text-text-secondary-dark"}/>
56
+ {Array.isArray(value) && <Typography variant={"caption"} className={"px-4"}>({value.length})</Typography>}
57
+ </>);
46
58
 
47
- const body = property.resolvedProperties.map((childProperty, index) => {
59
+ const body = resolvedProperties.map((childProperty, index) => {
60
+ const thisDisabled = isReadOnly(childProperty) || Boolean(childProperty.disabled);
48
61
  const fieldProps = {
49
62
  propertyKey: `${propertyKey}[${index}]`,
50
- disabled,
63
+ disabled: disabled || thisDisabled,
51
64
  property: childProperty,
52
65
  includeDescription,
53
66
  underlyingValueHasChanged,
54
67
  context,
55
- tableMode: false,
56
68
  partOfArray: true,
57
- partOfBlock: false,
69
+ minimalistView: false,
58
70
  autoFocus: false
59
71
  };
60
72
  return <div key={`custom_shaped_array_${index}`} className="pb-4">
@@ -66,14 +78,14 @@ export function ArrayCustomShapedFieldBinding<T extends Array<any>>({
66
78
 
67
79
  <>
68
80
 
69
- {!tableMode &&
81
+ {!minimalistView &&
70
82
  <ExpandablePanel initiallyExpanded={expanded}
71
83
  title={title}
72
- className={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2"}>
84
+ innerClassName={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2"}>
73
85
  {body}
74
86
  </ExpandablePanel>}
75
87
 
76
- {tableMode && body}
88
+ {minimalistView && body}
77
89
 
78
90
  <FieldHelperText includeDescription={includeDescription}
79
91
  showError={showError}
@@ -1,12 +1,12 @@
1
1
  import React, { useCallback, useMemo } from "react";
2
2
  import { Entity, EntityCollection, EntityReference, FieldProps, ResolvedProperty } from "../../types";
3
3
  import { ReferencePreview } from "../../preview";
4
- import { FieldHelperText, FormikArrayContainer, LabelWithIcon } from "../components";
4
+ import { FieldHelperText, FormikArrayContainer, LabelWithIconAndTooltip } from "../components";
5
5
  import { ErrorView } from "../../components";
6
6
  import { getIconForProperty, getReferenceFrom } from "../../util";
7
7
 
8
8
  import { useNavigationController, useReferenceDialog } from "../../hooks";
9
- import { Button, cn, ExpandablePanel, fieldBackgroundMixin } from "@firecms/ui";
9
+ import { Button, cls, ExpandablePanel, fieldBackgroundMixin, Typography } from "@firecms/ui";
10
10
  import { useClearRestoreValue } from "../useClearRestoreValue";
11
11
 
12
12
  type ArrayOfReferencesFieldProps = FieldProps<EntityReference[]>;
@@ -25,7 +25,7 @@ export function ArrayOfReferencesFieldBinding({
25
25
  showError,
26
26
  disabled,
27
27
  isSubmitting,
28
- tableMode,
28
+ minimalistView,
29
29
  property,
30
30
  includeDescription,
31
31
  setValue,
@@ -56,7 +56,6 @@ export function ArrayOfReferencesFieldBinding({
56
56
  }
57
57
 
58
58
  const onMultipleEntitiesSelected = useCallback((entities: Entity<any>[]) => {
59
- console.debug("onMultipleEntitiesSelected", entities);
60
59
  setValue(entities.map(e => getReferenceFrom(e)));
61
60
  }, [setValue]);
62
61
 
@@ -70,34 +69,39 @@ export function ArrayOfReferencesFieldBinding({
70
69
  }
71
70
  );
72
71
 
73
- const onEntryClick = useCallback((e: React.SyntheticEvent) => {
72
+ const onEntryClick = (e: React.SyntheticEvent) => {
74
73
  e.preventDefault();
75
74
  referenceDialogController.open();
76
- }, [referenceDialogController]);
75
+ };
77
76
 
78
77
  const buildEntry = useCallback((index: number, internalId: number) => {
79
78
  const entryValue = value && value.length > index ? value[index] : undefined;
80
79
  if (!entryValue)
81
80
  return <div>Internal ERROR</div>;
82
81
  return (
83
- <ReferencePreview
84
- key={internalId}
85
- disabled={!ofProperty.path}
86
- previewProperties={ofProperty.previewProperties}
87
- size={"medium"}
88
- onClick={onEntryClick}
89
- hover={!disabled}
90
- reference={entryValue}
91
- />
82
+ <ReferencePreview
83
+ key={internalId}
84
+ disabled={!ofProperty.path}
85
+ previewProperties={ofProperty.previewProperties}
86
+ size={"medium"}
87
+ onClick={onEntryClick}
88
+ hover={!disabled}
89
+ reference={entryValue}
90
+ includeId={ofProperty.includeId}
91
+ includeEntityLink={ofProperty.includeEntityLink}
92
+ />
92
93
  );
93
94
  }, [ofProperty.path, ofProperty.previewProperties, value]);
94
95
 
95
- const title = (
96
- <LabelWithIcon icon={getIconForProperty(property, "small")}
97
- required={property.validation?.required}
98
- title={property.name}
99
- className={"text-text-secondary dark:text-text-secondary-dark"}/>
100
- );
96
+ const title = (<>
97
+ <LabelWithIconAndTooltip
98
+ propertyKey={propertyKey}
99
+ icon={getIconForProperty(property, "small")}
100
+ required={property.validation?.required}
101
+ title={property.name}
102
+ className={"flex flex-grow text-text-secondary dark:text-text-secondary-dark"}/>
103
+ {Array.isArray(value) && <Typography variant={"caption"} className={"px-4"}>({value.length})</Typography>}
104
+ </>);
101
105
 
102
106
  const body = <>
103
107
  {!collection && <ErrorView
@@ -115,7 +119,7 @@ export function ArrayOfReferencesFieldBinding({
115
119
 
116
120
  <Button
117
121
  className="my-4 justify-center text-left"
118
- variant="outlined"
122
+ variant="text"
119
123
  color="primary"
120
124
  disabled={isSubmitting}
121
125
  onClick={onEntryClick}>
@@ -127,16 +131,16 @@ export function ArrayOfReferencesFieldBinding({
127
131
  return (
128
132
  <>
129
133
 
130
- {!tableMode &&
134
+ {!minimalistView &&
131
135
  <ExpandablePanel
132
136
  titleClassName={fieldBackgroundMixin}
133
- className={cn("px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2", fieldBackgroundMixin)}
137
+ innerClassName={cls("px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2", fieldBackgroundMixin)}
134
138
  initiallyExpanded={expanded}
135
139
  title={title}>
136
140
  {body}
137
141
  </ExpandablePanel>}
138
142
 
139
- {tableMode && body}
143
+ {minimalistView && body}
140
144
 
141
145
  <FieldHelperText includeDescription={includeDescription}
142
146
  showError={showError}
@@ -2,14 +2,15 @@ import React, { useCallback, useEffect, useState } from "react";
2
2
 
3
3
  import { Field, useFormex } from "@firecms/formex";
4
4
 
5
- import { FieldHelperText, FormikArrayContainer, LabelWithIcon } from "../components";
5
+ import { FieldHelperText, LabelWithIconAndTooltip } from "../components";
6
6
  import { PropertyFieldBinding } from "../PropertyFieldBinding";
7
7
  import { EnumValuesChip } from "../../preview";
8
8
  import { FieldProps, FormContext, PropertyFieldBindingProps, PropertyOrBuilder } from "../../types";
9
9
  import { getDefaultValueFor, getIconForProperty, } from "../../util";
10
10
  import { DEFAULT_ONE_OF_TYPE, DEFAULT_ONE_OF_VALUE } from "../../util/common";
11
- import { cn, ExpandablePanel, paperMixin, Select, SelectItem, Typography } from "@firecms/ui";
11
+ import { cls, ExpandablePanel, paperMixin, Select, SelectItem, Typography } from "@firecms/ui";
12
12
  import { useClearRestoreValue } from "../useClearRestoreValue";
13
+ import { ArrayContainer } from "../../components";
13
14
 
14
15
  /**
15
16
  * If the `oneOf` property is specified, this fields render each array entry as
@@ -27,7 +28,7 @@ export function BlockFieldBinding<T extends Array<any>>({
27
28
  isSubmitting,
28
29
  setValue,
29
30
  setFieldValue,
30
- tableMode,
31
+ minimalistView,
31
32
  property,
32
33
  includeDescription,
33
34
  underlyingValueHasChanged,
@@ -47,9 +48,9 @@ export function BlockFieldBinding<T extends Array<any>>({
47
48
 
48
49
  const [lastAddedId, setLastAddedId] = useState<number | undefined>();
49
50
 
50
- const buildEntry = useCallback((index: number, internalId: number) => {
51
+ const buildEntry = useCallback((index: number, internalId: number, isDragging:boolean) => {
51
52
  return <BlockEntry
52
- key={`array_one_of_${index}`}
53
+ key={`array_one_of_${internalId}`}
53
54
  name={`${propertyKey}.${index}`}
54
55
  index={index}
55
56
  value={value[index]}
@@ -61,38 +62,41 @@ export function BlockFieldBinding<T extends Array<any>>({
61
62
  }, [context, lastAddedId, property.oneOf, propertyKey, value]);
62
63
 
63
64
  const title = (
64
- <LabelWithIcon icon={getIconForProperty(property, "small")}
65
- required={property.validation?.required}
66
- title={property.name}
67
- className={"text-text-secondary dark:text-text-secondary-dark"}/>
65
+ <LabelWithIconAndTooltip
66
+ propertyKey={propertyKey}
67
+ icon={getIconForProperty(property, "small")}
68
+ required={property.validation?.required}
69
+ title={property.name}
70
+ className={"text-text-secondary dark:text-text-secondary-dark"}/>
68
71
  );
69
72
 
70
73
  const firstOneOfKey = Object.keys(property.oneOf.properties)[0];
71
- const body = <FormikArrayContainer value={value}
72
- name={propertyKey}
73
- addLabel={property.name ? "Add entry to " + property.name : "Add entry"}
74
- buildEntry={buildEntry}
75
- onInternalIdAdded={setLastAddedId}
76
- disabled={isSubmitting || Boolean(property.disabled)}
77
- includeAddButton={!property.disabled}
78
- setFieldValue={setFieldValue}
79
- newDefaultEntry={{
80
- [property.oneOf!.typeField ?? DEFAULT_ONE_OF_TYPE]: firstOneOfKey,
81
- [property.oneOf!.valueField ?? DEFAULT_ONE_OF_VALUE]: getDefaultValueFor(property.oneOf.properties[firstOneOfKey])
82
- }}/>;
74
+ const body = <ArrayContainer value={value}
75
+ className={"flex flex-col gap-3"}
76
+ droppableId={propertyKey}
77
+ addLabel={property.name ? "Add entry to " + property.name : "Add entry"}
78
+ buildEntry={buildEntry}
79
+ onInternalIdAdded={setLastAddedId}
80
+ disabled={isSubmitting || Boolean(property.disabled)}
81
+ includeAddButton={!property.disabled}
82
+ onValueChange={(value) => setFieldValue(propertyKey, value)}
83
+ newDefaultEntry={{
84
+ [property.oneOf!.typeField ?? DEFAULT_ONE_OF_TYPE]: firstOneOfKey,
85
+ [property.oneOf!.valueField ?? DEFAULT_ONE_OF_VALUE]: getDefaultValueFor(property.oneOf.properties[firstOneOfKey])
86
+ }}/>;
83
87
  return (
84
88
 
85
89
  <>
86
90
 
87
- {!tableMode &&
91
+ {!minimalistView &&
88
92
  <ExpandablePanel
89
- className={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2"}
93
+ innerClassName={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2"}
90
94
  initiallyExpanded={expanded}
91
95
  title={title}>
92
96
  {body}
93
97
  </ExpandablePanel>}
94
98
 
95
- {tableMode && body}
99
+ {minimalistView && body}
96
100
 
97
101
  <FieldHelperText includeDescription={includeDescription}
98
102
  showError={showError}
@@ -179,8 +183,7 @@ function BlockEntry({
179
183
  context,
180
184
  autoFocus,
181
185
  partOfArray: false,
182
- partOfBlock: true,
183
- tableMode: false
186
+ minimalistView: true
184
187
  }
185
188
  : undefined;
186
189
 
@@ -193,7 +196,7 @@ function BlockEntry({
193
196
  };
194
197
 
195
198
  return (
196
- <div className={cn(paperMixin, "bg-transparent p-4 my-4 py-8")}>
199
+ <div className={cls(paperMixin, "bg-transparent p-2")}>
197
200
 
198
201
  <Field
199
202
  name={typeFieldName}
@@ -7,6 +7,7 @@ import { useCustomizationController } from "../../hooks";
7
7
  import { getIconForProperty } from "../../util";
8
8
  import { DateTimeField } from "@firecms/ui";
9
9
  import { useClearRestoreValue } from "../useClearRestoreValue";
10
+ import { PropertyIdCopyTooltip } from "../../components";
10
11
 
11
12
  type DateTimeFieldProps = FieldProps<Date>;
12
13
 
@@ -41,20 +42,22 @@ export function DateTimeFieldBinding({
41
42
 
42
43
  return (
43
44
  <>
44
- <DateTimeField
45
- value={internalValue}
46
- onChange={(dateValue) => setValue(dateValue)}
47
- size={"medium"}
48
- mode={property.mode}
49
- clearable={property.clearable}
50
- locale={locale}
51
- error={showError}
52
- label={<LabelWithIcon
53
- icon={getIconForProperty(property, "small")}
54
- required={property.validation?.required}
55
- className={showError ? "text-red-500 dark:text-red-500" : "text-text-secondary dark:text-text-secondary-dark"}
56
- title={property.name}/>}
57
- />
45
+ <PropertyIdCopyTooltip propertyKey={propertyKey}>
46
+ <DateTimeField
47
+ value={internalValue}
48
+ onChange={(dateValue) => setValue(dateValue)}
49
+ size={"medium"}
50
+ mode={property.mode}
51
+ clearable={property.clearable}
52
+ locale={locale}
53
+ error={showError}
54
+ label={<LabelWithIcon
55
+ icon={getIconForProperty(property, "small")}
56
+ required={property.validation?.required}
57
+ className={showError ? "text-red-500 dark:text-red-500" : "text-text-secondary dark:text-text-secondary-dark"}
58
+ title={property.name}/>}
59
+ />
60
+ </PropertyIdCopyTooltip>
58
61
 
59
62
  <FieldHelperText includeDescription={includeDescription}
60
63
  showError={showError}