@firecms/core 3.0.0-canary.3 → 3.0.0-canary.30

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 (178) hide show
  1. package/README.md +1 -1
  2. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +1 -1
  3. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
  4. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +2 -2
  5. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +1 -2
  6. package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
  7. package/dist/components/EntityPreview.d.ts +25 -7
  8. package/dist/components/EntityView.d.ts +11 -0
  9. package/dist/components/FieldCaption.d.ts +5 -0
  10. package/dist/components/HomePage/NavigationCard.d.ts +8 -0
  11. package/dist/components/HomePage/{NavigationCollectionCard.d.ts → NavigationCardBinding.d.ts} +2 -2
  12. package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
  13. package/dist/components/HomePage/index.d.ts +3 -1
  14. package/dist/components/ReferenceWidget.d.ts +3 -3
  15. package/dist/components/VirtualTable/VirtualTableProps.d.ts +1 -1
  16. package/dist/components/index.d.ts +4 -3
  17. package/dist/contexts/AuthControllerContext.d.ts +1 -1
  18. package/dist/{internal/EntityView.d.ts → core/EntityEditView.d.ts} +2 -2
  19. package/dist/core/SideEntityView.d.ts +7 -0
  20. package/dist/core/index.d.ts +0 -2
  21. package/dist/form/EntityForm.d.ts +1 -1
  22. package/dist/form/components/StorageItemPreview.d.ts +3 -2
  23. package/dist/form/components/StorageUploadProgress.d.ts +1 -1
  24. package/dist/form/components/index.d.ts +1 -0
  25. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  26. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  27. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +4 -3
  28. package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -2
  29. package/dist/form/index.d.ts +1 -0
  30. package/dist/form/validation.d.ts +1 -1
  31. package/dist/hooks/data/delete.d.ts +2 -2
  32. package/dist/hooks/data/save.d.ts +1 -1
  33. package/dist/hooks/data/useDataSource.d.ts +2 -2
  34. package/dist/hooks/data/useEntityFetch.d.ts +3 -3
  35. package/dist/hooks/index.d.ts +3 -1
  36. package/dist/{core → hooks}/useBuildModeController.d.ts +1 -1
  37. package/dist/hooks/useBuildNavigationController.d.ts +5 -2
  38. package/dist/hooks/useProjectLog.d.ts +6 -2
  39. package/dist/hooks/useStorageSource.d.ts +2 -2
  40. package/dist/hooks/useValidateAuthenticator.d.ts +25 -0
  41. package/dist/index.es.js +8055 -7703
  42. package/dist/index.es.js.map +1 -1
  43. package/dist/index.umd.js +5 -5
  44. package/dist/index.umd.js.map +1 -1
  45. package/dist/internal/useBuildDataSource.d.ts +4 -0
  46. package/dist/preview/PropertyPreview.d.ts +1 -1
  47. package/dist/preview/PropertyPreviewProps.d.ts +1 -4
  48. package/dist/preview/components/BooleanPreview.d.ts +5 -1
  49. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  50. package/dist/preview/components/ReferencePreview.d.ts +1 -7
  51. package/dist/types/analytics.d.ts +1 -1
  52. package/dist/types/auth.d.ts +37 -1
  53. package/dist/types/collections.d.ts +17 -4
  54. package/dist/types/datasource.d.ts +1 -1
  55. package/dist/types/entities.d.ts +1 -0
  56. package/dist/types/entity_callbacks.d.ts +2 -2
  57. package/dist/types/entity_overrides.d.ts +6 -0
  58. package/dist/types/index.d.ts +2 -0
  59. package/dist/types/navigation.d.ts +14 -13
  60. package/dist/types/permissions.d.ts +5 -1
  61. package/dist/types/plugins.d.ts +17 -19
  62. package/dist/types/properties.d.ts +2 -2
  63. package/dist/types/property_config.d.ts +2 -2
  64. package/dist/types/roles.d.ts +31 -0
  65. package/dist/types/storage.d.ts +11 -3
  66. package/dist/types/user.d.ts +5 -0
  67. package/dist/util/collections.d.ts +9 -1
  68. package/dist/util/icons.d.ts +8 -2
  69. package/dist/util/permissions.d.ts +4 -4
  70. package/dist/util/references.d.ts +4 -2
  71. package/dist/util/resolutions.d.ts +1 -1
  72. package/dist/util/useTraceUpdate.d.ts +1 -0
  73. package/package.json +24 -24
  74. package/src/components/DeleteEntityDialog.tsx +4 -4
  75. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +2 -2
  76. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +273 -277
  77. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +1 -1
  78. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +13 -13
  79. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +10 -17
  80. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +3 -3
  81. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +1 -1
  82. package/src/components/EntityCollectionTable/internal/default_entity_actions.tsx +9 -5
  83. package/src/components/EntityCollectionView/EntityCollectionView.tsx +28 -49
  84. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +5 -6
  85. package/src/components/EntityCollectionView/useSelectionController.tsx +30 -0
  86. package/src/components/EntityPreview.tsx +207 -70
  87. package/src/components/EntityView.tsx +84 -0
  88. package/src/components/FieldCaption.tsx +14 -0
  89. package/src/components/FireCMSAppBar.tsx +8 -0
  90. package/src/components/HomePage/DefaultHomePage.tsx +14 -10
  91. package/src/components/HomePage/NavigationCard.tsx +69 -0
  92. package/src/components/HomePage/NavigationCardBinding.tsx +116 -0
  93. package/src/components/HomePage/SmallNavigationCard.tsx +45 -0
  94. package/src/components/HomePage/index.tsx +3 -1
  95. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +3 -4
  96. package/src/components/ReferenceWidget.tsx +8 -8
  97. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +11 -19
  98. package/src/components/VirtualTable/VirtualTableProps.tsx +1 -1
  99. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +1 -1
  100. package/src/components/index.tsx +4 -3
  101. package/src/contexts/AuthControllerContext.tsx +1 -1
  102. package/src/core/Drawer.tsx +66 -39
  103. package/src/{internal/EntityView.tsx → core/EntityEditView.tsx} +22 -39
  104. package/src/core/EntitySidePanel.tsx +2 -2
  105. package/src/core/FireCMS.tsx +18 -2
  106. package/src/core/NavigationRoutes.tsx +8 -0
  107. package/src/core/SideEntityView.tsx +38 -0
  108. package/src/core/index.tsx +0 -2
  109. package/src/form/EntityForm.tsx +20 -12
  110. package/src/form/components/StorageItemPreview.tsx +5 -3
  111. package/src/form/components/StorageUploadProgress.tsx +6 -5
  112. package/src/form/components/index.tsx +1 -0
  113. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +2 -3
  114. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +12 -15
  115. package/src/form/field_bindings/BlockFieldBinding.tsx +2 -3
  116. package/src/form/field_bindings/DateTimeFieldBinding.tsx +3 -3
  117. package/src/form/field_bindings/KeyValueFieldBinding.tsx +18 -18
  118. package/src/form/field_bindings/MapFieldBinding.tsx +17 -17
  119. package/src/form/field_bindings/MarkdownFieldBinding.tsx +1 -2
  120. package/src/form/field_bindings/MultiSelectBinding.tsx +2 -3
  121. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +3 -3
  122. package/src/form/field_bindings/ReferenceFieldBinding.tsx +6 -4
  123. package/src/form/field_bindings/RepeatFieldBinding.tsx +3 -3
  124. package/src/form/field_bindings/SelectFieldBinding.tsx +2 -3
  125. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +15 -6
  126. package/src/form/field_bindings/SwitchFieldBinding.tsx +2 -3
  127. package/src/form/field_bindings/TextFieldBinding.tsx +10 -9
  128. package/src/form/index.tsx +1 -0
  129. package/src/form/validation.ts +3 -4
  130. package/src/hooks/data/delete.ts +3 -3
  131. package/src/hooks/data/save.ts +1 -1
  132. package/src/hooks/data/useCollectionFetch.tsx +1 -1
  133. package/src/hooks/data/useDataSource.tsx +8 -3
  134. package/src/hooks/data/useEntityFetch.tsx +4 -4
  135. package/src/hooks/index.tsx +5 -1
  136. package/src/{core → hooks}/useBuildModeController.tsx +1 -1
  137. package/src/hooks/useBuildNavigationController.tsx +132 -70
  138. package/src/hooks/useProjectLog.tsx +16 -6
  139. package/src/hooks/useReferenceDialog.tsx +2 -2
  140. package/src/hooks/useStorageSource.tsx +7 -2
  141. package/src/hooks/useValidateAuthenticator.tsx +135 -0
  142. package/src/internal/useBuildDataSource.ts +7 -2
  143. package/src/internal/useBuildSideEntityController.tsx +3 -0
  144. package/src/preview/PropertyPreview.tsx +2 -2
  145. package/src/preview/PropertyPreviewProps.tsx +1 -11
  146. package/src/preview/components/BooleanPreview.tsx +19 -4
  147. package/src/preview/components/EnumValuesChip.tsx +1 -1
  148. package/src/preview/components/ReferencePreview.tsx +56 -148
  149. package/src/preview/property_previews/StringPropertyPreview.tsx +8 -7
  150. package/src/types/analytics.ts +1 -0
  151. package/src/types/auth.tsx +50 -1
  152. package/src/types/collections.ts +19 -4
  153. package/src/types/datasource.ts +1 -1
  154. package/src/types/entities.ts +4 -0
  155. package/src/types/entity_actions.tsx +4 -0
  156. package/src/types/entity_callbacks.ts +2 -2
  157. package/src/types/entity_overrides.tsx +7 -0
  158. package/src/types/firecms.tsx +0 -1
  159. package/src/types/index.ts +2 -0
  160. package/src/types/navigation.ts +17 -16
  161. package/src/types/permissions.ts +6 -1
  162. package/src/types/plugins.tsx +24 -27
  163. package/src/types/properties.ts +3 -2
  164. package/src/types/property_config.tsx +2 -2
  165. package/src/types/roles.ts +41 -0
  166. package/src/types/side_entity_controller.tsx +1 -0
  167. package/src/types/storage.ts +12 -3
  168. package/src/types/user.ts +7 -0
  169. package/src/util/collections.ts +22 -0
  170. package/src/util/icons.tsx +11 -3
  171. package/src/util/permissions.ts +11 -8
  172. package/src/util/references.ts +36 -5
  173. package/src/util/useTraceUpdate.tsx +2 -1
  174. package/src/components/HomePage/NavigationCollectionCard.tsx +0 -146
  175. /package/dist/{components → form/components}/LabelWithIcon.d.ts +0 -0
  176. /package/dist/{core → hooks}/useBuildLocalConfigurationPersistence.d.ts +0 -0
  177. /package/src/{components → form/components}/LabelWithIcon.tsx +0 -0
  178. /package/src/{core → hooks}/useBuildLocalConfigurationPersistence.tsx +0 -0
@@ -19,8 +19,9 @@ import equal from "react-fast-compare"
19
19
  import {
20
20
  canCreateEntity,
21
21
  canDeleteEntity,
22
- fullPathToCollectionSegments,
23
22
  getDefaultValuesFor,
23
+ getEntityTitlePropertyKey,
24
+ getValueInPath,
24
25
  isHidden,
25
26
  isReadOnly,
26
27
  resolveCollection
@@ -171,7 +172,7 @@ function EntityFormInternal<M extends Record<string, any>>({
171
172
  onFormContextChange,
172
173
  hideId,
173
174
  autoSave,
174
- onIdUpdateError
175
+ onIdUpdateError,
175
176
  }: EntityFormProps<M>) {
176
177
 
177
178
  const analyticsController = useAnalyticsController();
@@ -179,7 +180,7 @@ function EntityFormInternal<M extends Record<string, any>>({
179
180
  const customizationController = useCustomizationController();
180
181
 
181
182
  const context = useFireCMSContext();
182
- const dataSource = useDataSource();
183
+ const dataSource = useDataSource(inputCollection);
183
184
  const plugins = customizationController.plugins;
184
185
 
185
186
  const initialResolvedCollection = useMemo(() => resolveCollection({
@@ -344,6 +345,9 @@ function EntityFormInternal<M extends Record<string, any>>({
344
345
  fields: customizationController.propertyConfigs
345
346
  });
346
347
 
348
+ const titlePropertyKey = getEntityTitlePropertyKey(resolvedCollection, customizationController.propertyConfigs);
349
+ const title = internalValues && titlePropertyKey ? getValueInPath(internalValues, titlePropertyKey) : undefined;
350
+
347
351
  const onIdUpdate = inputCollection.callbacks?.onIdUpdate;
348
352
 
349
353
  const doOnIdUpdate = useCallback(async () => {
@@ -389,12 +393,15 @@ function EntityFormInternal<M extends Record<string, any>>({
389
393
 
390
394
  const authController = useAuthController();
391
395
 
392
- const getActionsForEntity = useCallback(({ entity, customEntityActions }: {
396
+ const getActionsForEntity = useCallback(({
397
+ entity,
398
+ customEntityActions
399
+ }: {
393
400
  entity?: Entity<M>,
394
401
  customEntityActions?: EntityAction[]
395
402
  }): EntityAction[] => {
396
- const createEnabled = canCreateEntity(inputCollection, authController, fullPathToCollectionSegments(path), null);
397
- const deleteEnabled = entity ? canDeleteEntity(inputCollection, authController, fullPathToCollectionSegments(path), entity) : true;
403
+ const createEnabled = canCreateEntity(inputCollection, authController, path, null);
404
+ const deleteEnabled = entity ? canDeleteEntity(inputCollection, authController, path, entity) : true;
398
405
  const actions: EntityAction[] = [];
399
406
  if (createEnabled)
400
407
  actions.push(copyEntityAction);
@@ -436,7 +443,7 @@ function EntityFormInternal<M extends Record<string, any>>({
436
443
  pluginActions.push(...plugins.map((plugin, i) => (
437
444
  plugin.form?.Actions
438
445
  ? <plugin.form.Actions
439
- key={`actions_${plugin.name}`} {...actionProps}/>
446
+ key={`actions_${plugin.key}`} {...actionProps}/>
440
447
  : null
441
448
  )).filter(Boolean));
442
449
  }
@@ -454,8 +461,8 @@ function EntityFormInternal<M extends Record<string, any>>({
454
461
  className={`w-full py-2 flex flex-col items-start mt-${4 + (pluginActions ? 8 : 0)} lg:mt-${8 + (pluginActions ? 8 : 0)} mb-8`}>
455
462
 
456
463
  <Typography
457
- className={"mt-4 flex-grow " + inputCollection.hideIdFromForm ? "mb-2" : "mb-0"}
458
- variant={"h4"}>{inputCollection.singularName ?? inputCollection.name}
464
+ className={"mt-4 flex-grow line-clamp-1 " + inputCollection.hideIdFromForm ? "mb-2" : "mb-0"}
465
+ variant={"h4"}>{title ?? inputCollection.singularName ?? inputCollection.name}
459
466
  </Typography>
460
467
  <Alert color={"base"} className={"w-full"} size={"small"}>
461
468
  <code className={"text-xs select-all"}>{path}/{entityId}</code>
@@ -508,7 +515,7 @@ function InnerForm<M extends Record<string, any>>(props: FormexController<M> & {
508
515
  savingError?: Error,
509
516
  closeAfterSaveRef: MutableRefObject<boolean>,
510
517
  autoSave?: boolean,
511
- entityActions: EntityAction[]
518
+ entityActions: EntityAction[],
512
519
  }) {
513
520
 
514
521
  const {
@@ -530,7 +537,7 @@ function InnerForm<M extends Record<string, any>>(props: FormexController<M> & {
530
537
  dirty,
531
538
  closeAfterSaveRef,
532
539
  autoSave,
533
- entityActions
540
+ entityActions,
534
541
  } = props;
535
542
 
536
543
  const context = useFireCMSContext();
@@ -598,6 +605,7 @@ function InnerForm<M extends Record<string, any>>(props: FormexController<M> & {
598
605
  <Tooltip title={<PropertyIdCopyTooltipContent propertyId={key}/>}
599
606
  delayDuration={800}
600
607
  side={"left"}
608
+ align={"start"}
601
609
  sideOffset={16}>
602
610
  <PropertyFieldBinding {...cmsFormFieldProps}/>
603
611
  </Tooltip>
@@ -655,7 +663,7 @@ function InnerForm<M extends Record<string, any>>(props: FormexController<M> & {
655
663
  fullPath: resolvedCollection.path,
656
664
  collection: resolvedCollection,
657
665
  context,
658
- sideEntityController
666
+ sideEntityController,
659
667
  });
660
668
  }}>
661
669
  {action.icon}
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
 
3
- import { Entity, ResolvedStringProperty } from "../../types";
3
+ import { Entity, EntityCollection, ResolvedStringProperty } from "../../types";
4
4
  import { PreviewSize, PropertyPreview } from "../../preview";
5
5
 
6
6
  import { cn, IconButton, paperMixin, RemoveIcon, Tooltip } from "@firecms/ui";
@@ -14,6 +14,7 @@ interface StorageItemPreviewProps {
14
14
  onRemove: (value: string) => void;
15
15
  size: PreviewSize;
16
16
  disabled: boolean;
17
+ collection: EntityCollection;
17
18
  }
18
19
 
19
20
  export function StorageItemPreview({
@@ -23,7 +24,8 @@ export function StorageItemPreview({
23
24
  entity,
24
25
  onRemove,
25
26
  disabled,
26
- size
27
+ size,
28
+ collection
27
29
  }: StorageItemPreviewProps) {
28
30
 
29
31
  return (
@@ -54,7 +56,7 @@ export function StorageItemPreview({
54
56
  <PropertyPreview propertyKey={name}
55
57
  value={value}
56
58
  property={property}
57
- // entity={entity}
59
+ // entity={entity}
58
60
  size={size}/>
59
61
  </ErrorBoundary>
60
62
  }
@@ -4,6 +4,7 @@ import { useSnackbarController, useStorageSource } from "../../hooks";
4
4
  import { StorageFieldItem } from "../../util/useStorageUploadController";
5
5
  import { ErrorView } from "../../components";
6
6
  import { cn, paperMixin, Skeleton } from "@firecms/ui";
7
+ import { EntityCollection, StorageSource } from "../../types";
7
8
 
8
9
  export interface StorageUploadItemProps {
9
10
  storagePath: string;
@@ -22,10 +23,10 @@ export function StorageUploadProgress({
22
23
  metadata,
23
24
  onFileUploadComplete,
24
25
  imageSize,
25
- simple
26
+ simple,
26
27
  }: StorageUploadItemProps) {
27
28
 
28
- const storage = useStorageSource();
29
+ const storageSource = useStorageSource();
29
30
 
30
31
  const snackbarController = useSnackbarController();
31
32
 
@@ -41,7 +42,7 @@ export function StorageUploadProgress({
41
42
  setError(undefined);
42
43
  setLoading(true);
43
44
 
44
- storage.uploadFile({
45
+ storageSource.uploadFile({
45
46
  file,
46
47
  fileName,
47
48
  path: storagePath,
@@ -67,7 +68,7 @@ export function StorageUploadProgress({
67
68
  .finally(() => {
68
69
  uploading.current = false;
69
70
  });
70
- }, [entry, metadata, onFileUploadComplete, storage, storagePath]);
71
+ }, [entry, metadata, onFileUploadComplete, storageSource, storagePath]);
71
72
 
72
73
  React.useEffect(() => {
73
74
  mounted.current = true;
@@ -89,7 +90,7 @@ export function StorageUploadProgress({
89
90
 
90
91
  <div className={cn(paperMixin,
91
92
  "relative m-4 border-box flex items-center justify-center",
92
- `min-w-[${imageSize}px] min-h-[${imageSize}px]`)}>
93
+ `min-w-[${imageSize}px] min-h-[${imageSize}px]`)}>
93
94
 
94
95
  {loading &&
95
96
  <Skeleton className="w-full h-full"/>}
@@ -1,2 +1,3 @@
1
1
  export * from "./FormikArrayContainer";
2
2
  export * from "./FieldHelperText";
3
+ export * from "./LabelWithIcon";
@@ -1,11 +1,10 @@
1
1
  import React from "react";
2
2
  import { FieldProps } from "../../types";
3
- import { FieldHelperText } from "../components";
3
+ import { FieldHelperText, LabelWithIcon } from "../components";
4
4
  import { PropertyFieldBinding } from "../PropertyFieldBinding";
5
- import { useClearRestoreValue } from "../../hooks";
6
5
  import { ExpandablePanel } from "@firecms/ui";
7
6
  import { getIconForProperty } from "../../util";
8
- import { LabelWithIcon } from "../../components";
7
+ import { useClearRestoreValue } from "../useClearRestoreValue";
9
8
 
10
9
  /**
11
10
  * Array field used for custom
@@ -1,12 +1,13 @@
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 } from "../components";
5
- import { ErrorView, LabelWithIcon } from "../../components";
4
+ import { FieldHelperText, FormikArrayContainer, LabelWithIcon } from "../components";
5
+ import { ErrorView } from "../../components";
6
6
  import { getIconForProperty, getReferenceFrom } from "../../util";
7
7
 
8
- import { useClearRestoreValue, useNavigationController, useReferenceDialog } from "../../hooks";
9
- import { Button, ExpandablePanel } from "@firecms/ui";
8
+ import { useNavigationController, useReferenceDialog } from "../../hooks";
9
+ import { Button, cn, ExpandablePanel, fieldBackgroundMixin } from "@firecms/ui";
10
+ import { useClearRestoreValue } from "../useClearRestoreValue";
10
11
 
11
12
  type ArrayOfReferencesFieldProps = FieldProps<EntityReference[]>;
12
13
 
@@ -37,7 +38,6 @@ export function ArrayOfReferencesFieldBinding({
37
38
  }
38
39
 
39
40
  const expanded = property.expanded === undefined ? true : property.expanded;
40
- const [onHover, setOnHover] = React.useState(false);
41
41
  const selectedEntityIds = value && Array.isArray(value) ? value.map((ref) => ref.id) : [];
42
42
 
43
43
  useClearRestoreValue({
@@ -80,21 +80,17 @@ export function ArrayOfReferencesFieldBinding({
80
80
  if (!entryValue)
81
81
  return <div>Internal ERROR</div>;
82
82
  return (
83
- <div
84
- onMouseEnter={() => setOnHover(true)}
85
- onMouseMove={() => setOnHover(true)}
86
- onMouseLeave={() => setOnHover(false)}>
87
83
  <ReferencePreview
84
+ key={internalId}
88
85
  disabled={!ofProperty.path}
89
86
  previewProperties={ofProperty.previewProperties}
90
87
  size={"medium"}
91
88
  onClick={onEntryClick}
89
+ hover={!disabled}
92
90
  reference={entryValue}
93
- onHover={onHover}
94
91
  />
95
- </div>
96
92
  );
97
- }, [ofProperty.path, ofProperty.previewProperties, onHover, value]);
93
+ }, [ofProperty.path, ofProperty.previewProperties, value]);
98
94
 
99
95
  const title = (
100
96
  <LabelWithIcon icon={getIconForProperty(property, "small")}
@@ -107,7 +103,7 @@ export function ArrayOfReferencesFieldBinding({
107
103
  {!collection && <ErrorView
108
104
  error={"The specified collection does not exist. Check console"}/>}
109
105
 
110
- {collection && <>
106
+ {collection && <div className={"group"}>
111
107
 
112
108
  <FormikArrayContainer value={value}
113
109
  addLabel={property.name ? "Add reference to " + property.name : "Add reference"}
@@ -125,7 +121,7 @@ export function ArrayOfReferencesFieldBinding({
125
121
  onClick={onEntryClick}>
126
122
  Edit {property.name}
127
123
  </Button>
128
- </>}
124
+ </div>}
129
125
  </>;
130
126
 
131
127
  return (
@@ -133,7 +129,8 @@ export function ArrayOfReferencesFieldBinding({
133
129
 
134
130
  {!tableMode &&
135
131
  <ExpandablePanel
136
- className={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2"}
132
+ titleClassName={fieldBackgroundMixin}
133
+ className={cn("px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2", fieldBackgroundMixin)}
137
134
  initiallyExpanded={expanded}
138
135
  title={title}>
139
136
  {body}
@@ -2,15 +2,14 @@ import React, { useCallback, useEffect, useState } from "react";
2
2
 
3
3
  import { Field, useFormex } from "@firecms/formex";
4
4
 
5
- import { FieldHelperText, FormikArrayContainer } from "../components";
6
- import { LabelWithIcon } from "../../components";
7
- import { useClearRestoreValue } from "../../hooks";
5
+ import { FieldHelperText, FormikArrayContainer, LabelWithIcon } from "../components";
8
6
  import { PropertyFieldBinding } from "../PropertyFieldBinding";
9
7
  import { EnumValuesChip } from "../../preview";
10
8
  import { FieldProps, FormContext, PropertyFieldBindingProps, PropertyOrBuilder } from "../../types";
11
9
  import { getDefaultValueFor, getIconForProperty, } from "../../util";
12
10
  import { DEFAULT_ONE_OF_TYPE, DEFAULT_ONE_OF_VALUE } from "../../util/common";
13
11
  import { cn, ExpandablePanel, paperMixin, Select, SelectItem, Typography } from "@firecms/ui";
12
+ import { useClearRestoreValue } from "../useClearRestoreValue";
14
13
 
15
14
  /**
16
15
  * If the `oneOf` property is specified, this fields render each array entry as
@@ -2,11 +2,11 @@ import React from "react";
2
2
 
3
3
  import { FieldProps } from "../../types";
4
4
 
5
- import { FieldHelperText } from "../components";
6
- import { LabelWithIcon } from "../../components";
7
- import { useClearRestoreValue, useCustomizationController } from "../../hooks";
5
+ import { FieldHelperText, LabelWithIcon } from "../components";
6
+ import { useCustomizationController } from "../../hooks";
8
7
  import { getIconForProperty } from "../../util";
9
8
  import { DateTimeField } from "@firecms/ui";
9
+ import { useClearRestoreValue } from "../useClearRestoreValue";
10
10
 
11
11
  type DateTimeFieldProps = FieldProps<Date>;
12
12
 
@@ -1,8 +1,8 @@
1
1
  import React, { useEffect, useState } from "react";
2
- import { DataType, EntityReference, FieldProps, GeoPoint } from "../../types";
2
+ import { DataType, FieldProps, GeoPoint } from "../../types";
3
3
 
4
- import { ArrayContainer, LabelWithIcon } from "../../components";
5
- import { FieldHelperText } from "../components";
4
+ import { ArrayContainer } from "../../components";
5
+ import { FieldHelperText, LabelWithIcon } from "../components";
6
6
  import {
7
7
  AddIcon,
8
8
  ArrowDropDownIcon,
@@ -32,20 +32,20 @@ type MapEditViewRowState = [number, {
32
32
  *
33
33
  * @group Form fields
34
34
  */
35
- export function KeyValueFieldBinding<T extends Record<string, any>>({
36
- propertyKey,
37
- value,
38
- showError,
39
- error,
40
- disabled,
41
- property,
42
- setValue,
43
- tableMode,
44
- includeDescription,
45
- underlyingValueHasChanged,
46
- autoFocus,
47
- context
48
- }: FieldProps<T>) {
35
+ export function KeyValueFieldBinding({
36
+ propertyKey,
37
+ value,
38
+ showError,
39
+ error,
40
+ disabled,
41
+ property,
42
+ setValue,
43
+ tableMode,
44
+ includeDescription,
45
+ underlyingValueHasChanged,
46
+ autoFocus,
47
+ context
48
+ }: FieldProps<Record<string, any>>) {
49
49
 
50
50
  const expanded = (property.expanded === undefined ? true : property.expanded) || autoFocus;
51
51
 
@@ -546,7 +546,7 @@ function getDataType(value: any): DataType | undefined {
546
546
  return "array";
547
547
  } else if (value instanceof Date) {
548
548
  return "date";
549
- } else if (value instanceof EntityReference) {
549
+ } else if (value?.isEntityReference && value?.isEntityReference()) {
550
550
  return "reference";
551
551
  } else if (value instanceof GeoPoint) {
552
552
  return "geopoint";
@@ -1,9 +1,9 @@
1
1
  import React from "react";
2
2
  import { FieldProps, Properties, ResolvedProperties } from "../../types";
3
3
 
4
- import { ErrorBoundary, LabelWithIcon } from "../../components";
4
+ import { ErrorBoundary } from "../../components";
5
5
  import { getIconForProperty, isHidden, pick } from "../../util";
6
- import { FieldHelperText } from "../components";
6
+ import { FieldHelperText, LabelWithIcon } from "../components";
7
7
  import { PropertyFieldBinding } from "../PropertyFieldBinding";
8
8
  import { ExpandablePanel, InputLabel, Select, SelectItem } from "@firecms/ui";
9
9
 
@@ -14,21 +14,21 @@ import { ExpandablePanel, InputLabel, Select, SelectItem } from "@firecms/ui";
14
14
  * and tables to the specified properties.
15
15
  * @group Form fields
16
16
  */
17
- export function MapFieldBinding<T extends Record<string, any>>({
18
- propertyKey,
19
- value,
20
- showError,
21
- error,
22
- disabled,
23
- property,
24
- setValue,
25
- partOfBlock,
26
- tableMode,
27
- includeDescription,
28
- underlyingValueHasChanged,
29
- autoFocus,
30
- context
31
- }: FieldProps<T>) {
17
+ export function MapFieldBinding({
18
+ propertyKey,
19
+ value,
20
+ showError,
21
+ error,
22
+ disabled,
23
+ property,
24
+ setValue,
25
+ partOfBlock,
26
+ tableMode,
27
+ includeDescription,
28
+ underlyingValueHasChanged,
29
+ autoFocus,
30
+ context
31
+ }: FieldProps<Record<string, any>>) {
32
32
 
33
33
  const pickOnlySomeKeys = property.pickOnlySomeKeys || false;
34
34
  const expanded = (property.expanded === undefined ? true : property.expanded) || autoFocus;
@@ -4,8 +4,7 @@ import React, { useDeferredValue, useEffect, useRef } from "react";
4
4
  import MarkdownIt from "markdown-it";
5
5
  import MdEditor, { Plugins } from "react-markdown-editor-lite";
6
6
 
7
- import { FieldHelperText } from "../components";
8
- import { LabelWithIcon } from "../../components";
7
+ import { FieldHelperText, LabelWithIcon } from "../components";
9
8
  import { FieldProps } from "../../types";
10
9
  import { getIconForProperty } from "../../util";
11
10
  import {
@@ -1,12 +1,11 @@
1
1
  import React, { useCallback } from "react";
2
2
 
3
3
  import { EnumType, FieldProps, ResolvedProperty } from "../../types";
4
- import { FieldHelperText } from "../components";
5
- import { LabelWithIcon } from "../../components";
6
- import { useClearRestoreValue } from "../../hooks";
4
+ import { FieldHelperText, LabelWithIcon } from "../components";
7
5
  import { EnumValuesChip } from "../../preview";
8
6
  import { enumToObjectEntries, getIconForProperty, getLabelOrConfigFrom } from "../../util";
9
7
  import { CloseIcon, MultiSelect, MultiSelectItem } from "@firecms/ui";
8
+ import { useClearRestoreValue } from "../useClearRestoreValue";
10
9
 
11
10
  /**
12
11
  * This fields renders a dropdown with multiple selection.
@@ -3,8 +3,8 @@ import React from "react";
3
3
  import { Entity, FieldProps } from "../../types";
4
4
 
5
5
  import { PropertyPreview } from "../../preview";
6
- import { FieldHelperText } from "../components";
7
- import { ErrorBoundary, LabelWithIcon } from "../../components";
6
+ import { FieldHelperText, LabelWithIcon } from "../components";
7
+ import { ErrorBoundary } from "../../components";
8
8
  import { getIconForProperty } from "../../util";
9
9
  import { cn, paperMixin } from "@firecms/ui";
10
10
 
@@ -53,7 +53,7 @@ export function ReadOnlyFieldBinding({
53
53
  <PropertyPreview propertyKey={propertyKey}
54
54
  value={value}
55
55
  property={property}
56
- // entity={entity}
56
+ // entity={entity}
57
57
  size={"medium"}/>
58
58
  </ErrorBoundary>
59
59
 
@@ -1,13 +1,14 @@
1
1
  import React, { useCallback, useMemo } from "react";
2
2
 
3
3
  import { Entity, EntityCollection, EntityReference, FieldProps } from "../../types";
4
- import { useClearRestoreValue, useNavigationController, useReferenceDialog } from "../../hooks";
4
+ import { useNavigationController, useReferenceDialog } from "../../hooks";
5
5
  import { ReadOnlyFieldBinding } from "./ReadOnlyFieldBinding";
6
- import { FieldHelperText } from "../components";
7
- import { ErrorView, LabelWithIcon } from "../../components";
6
+ import { FieldHelperText, LabelWithIcon } from "../components";
7
+ import { ErrorView } from "../../components";
8
8
  import { ReferencePreview } from "../../preview";
9
9
  import { getIconForProperty, getReferenceFrom } from "../../util";
10
10
  import { Button } from "@firecms/ui";
11
+ import { useClearRestoreValue } from "../useClearRestoreValue";
11
12
 
12
13
  /**
13
14
  * Field that opens a reference selection dialog.
@@ -49,7 +50,7 @@ function ReferenceFieldBindingInternal<M extends Record<string, any>>({
49
50
  setValue
50
51
  });
51
52
 
52
- const validValue = value && value instanceof EntityReference;
53
+ const validValue = value && value.isEntityReference && value.isEntityReference();
53
54
 
54
55
  const navigationController = useNavigationController();
55
56
  const collection: EntityCollection | undefined = useMemo(() => {
@@ -94,6 +95,7 @@ function ReferenceFieldBindingInternal<M extends Record<string, any>>({
94
95
  {value && <ReferencePreview
95
96
  disabled={!property.path}
96
97
  previewProperties={property.previewProperties}
98
+ hover={!disabled}
97
99
  size={"medium"}
98
100
  onClick={disabled || isSubmitting ? undefined : onEntryClick}
99
101
  reference={value}
@@ -1,11 +1,11 @@
1
1
  import React, { useState } from "react";
2
2
  import { CMSType, FieldProps, ResolvedProperty } from "../../types";
3
- import { FieldHelperText, FormikArrayContainer } from "../components";
4
- import { ErrorBoundary, LabelWithIcon } from "../../components";
5
- import { useClearRestoreValue } from "../../hooks";
3
+ import { FieldHelperText, FormikArrayContainer, LabelWithIcon } from "../components";
4
+ import { ErrorBoundary } from "../../components";
6
5
  import { getIconForProperty } from "../../util";
7
6
  import { PropertyFieldBinding } from "../PropertyFieldBinding";
8
7
  import { ExpandablePanel } from "@firecms/ui";
8
+ import { useClearRestoreValue } from "../useClearRestoreValue";
9
9
 
10
10
  /**
11
11
  * Generic array field that allows reordering and renders the child property
@@ -1,12 +1,11 @@
1
1
  import React, { useCallback } from "react";
2
2
 
3
3
  import { EnumType, FieldProps } from "../../types";
4
- import { FieldHelperText } from "../components";
5
- import { LabelWithIcon } from "../../components";
6
- import { useClearRestoreValue } from "../../hooks";
4
+ import { FieldHelperText, LabelWithIcon } from "../components";
7
5
  import { EnumValuesChip } from "../../preview";
8
6
  import { getIconForProperty } from "../../util";
9
7
  import { ClearIcon, cn, IconButton, Select, SelectItem } from "@firecms/ui";
8
+ import { useClearRestoreValue } from "../useClearRestoreValue";
10
9
 
11
10
  type SelectProps<T extends EnumType> = FieldProps<T>;
12
11