@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.
- package/README.md +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
- package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +2 -2
- package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +1 -2
- package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
- package/dist/components/EntityPreview.d.ts +25 -7
- package/dist/components/EntityView.d.ts +11 -0
- package/dist/components/FieldCaption.d.ts +5 -0
- package/dist/components/HomePage/NavigationCard.d.ts +8 -0
- package/dist/components/HomePage/{NavigationCollectionCard.d.ts → NavigationCardBinding.d.ts} +2 -2
- package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
- package/dist/components/HomePage/index.d.ts +3 -1
- package/dist/components/ReferenceWidget.d.ts +3 -3
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +1 -1
- package/dist/components/index.d.ts +4 -3
- package/dist/contexts/AuthControllerContext.d.ts +1 -1
- package/dist/{internal/EntityView.d.ts → core/EntityEditView.d.ts} +2 -2
- package/dist/core/SideEntityView.d.ts +7 -0
- package/dist/core/index.d.ts +0 -2
- package/dist/form/EntityForm.d.ts +1 -1
- package/dist/form/components/StorageItemPreview.d.ts +3 -2
- package/dist/form/components/StorageUploadProgress.d.ts +1 -1
- package/dist/form/components/index.d.ts +1 -0
- package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +4 -3
- package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -2
- package/dist/form/index.d.ts +1 -0
- package/dist/form/validation.d.ts +1 -1
- package/dist/hooks/data/delete.d.ts +2 -2
- package/dist/hooks/data/save.d.ts +1 -1
- package/dist/hooks/data/useDataSource.d.ts +2 -2
- package/dist/hooks/data/useEntityFetch.d.ts +3 -3
- package/dist/hooks/index.d.ts +3 -1
- package/dist/{core → hooks}/useBuildModeController.d.ts +1 -1
- package/dist/hooks/useBuildNavigationController.d.ts +5 -2
- package/dist/hooks/useProjectLog.d.ts +6 -2
- package/dist/hooks/useStorageSource.d.ts +2 -2
- package/dist/hooks/useValidateAuthenticator.d.ts +25 -0
- package/dist/index.es.js +8055 -7703
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +5 -5
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +4 -0
- package/dist/preview/PropertyPreview.d.ts +1 -1
- package/dist/preview/PropertyPreviewProps.d.ts +1 -4
- package/dist/preview/components/BooleanPreview.d.ts +5 -1
- package/dist/preview/components/EnumValuesChip.d.ts +1 -1
- package/dist/preview/components/ReferencePreview.d.ts +1 -7
- package/dist/types/analytics.d.ts +1 -1
- package/dist/types/auth.d.ts +37 -1
- package/dist/types/collections.d.ts +17 -4
- package/dist/types/datasource.d.ts +1 -1
- package/dist/types/entities.d.ts +1 -0
- package/dist/types/entity_callbacks.d.ts +2 -2
- package/dist/types/entity_overrides.d.ts +6 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/navigation.d.ts +14 -13
- package/dist/types/permissions.d.ts +5 -1
- package/dist/types/plugins.d.ts +17 -19
- package/dist/types/properties.d.ts +2 -2
- package/dist/types/property_config.d.ts +2 -2
- package/dist/types/roles.d.ts +31 -0
- package/dist/types/storage.d.ts +11 -3
- package/dist/types/user.d.ts +5 -0
- package/dist/util/collections.d.ts +9 -1
- package/dist/util/icons.d.ts +8 -2
- package/dist/util/permissions.d.ts +4 -4
- package/dist/util/references.d.ts +4 -2
- package/dist/util/resolutions.d.ts +1 -1
- package/dist/util/useTraceUpdate.d.ts +1 -0
- package/package.json +24 -24
- package/src/components/DeleteEntityDialog.tsx +4 -4
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +2 -2
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +273 -277
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +1 -1
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +13 -13
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +10 -17
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +3 -3
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +1 -1
- package/src/components/EntityCollectionTable/internal/default_entity_actions.tsx +9 -5
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +28 -49
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +5 -6
- package/src/components/EntityCollectionView/useSelectionController.tsx +30 -0
- package/src/components/EntityPreview.tsx +207 -70
- package/src/components/EntityView.tsx +84 -0
- package/src/components/FieldCaption.tsx +14 -0
- package/src/components/FireCMSAppBar.tsx +8 -0
- package/src/components/HomePage/DefaultHomePage.tsx +14 -10
- package/src/components/HomePage/NavigationCard.tsx +69 -0
- package/src/components/HomePage/NavigationCardBinding.tsx +116 -0
- package/src/components/HomePage/SmallNavigationCard.tsx +45 -0
- package/src/components/HomePage/index.tsx +3 -1
- package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +3 -4
- package/src/components/ReferenceWidget.tsx +8 -8
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +11 -19
- package/src/components/VirtualTable/VirtualTableProps.tsx +1 -1
- package/src/components/common/useDataSourceEntityCollectionTableController.tsx +1 -1
- package/src/components/index.tsx +4 -3
- package/src/contexts/AuthControllerContext.tsx +1 -1
- package/src/core/Drawer.tsx +66 -39
- package/src/{internal/EntityView.tsx → core/EntityEditView.tsx} +22 -39
- package/src/core/EntitySidePanel.tsx +2 -2
- package/src/core/FireCMS.tsx +18 -2
- package/src/core/NavigationRoutes.tsx +8 -0
- package/src/core/SideEntityView.tsx +38 -0
- package/src/core/index.tsx +0 -2
- package/src/form/EntityForm.tsx +20 -12
- package/src/form/components/StorageItemPreview.tsx +5 -3
- package/src/form/components/StorageUploadProgress.tsx +6 -5
- package/src/form/components/index.tsx +1 -0
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +2 -3
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +12 -15
- package/src/form/field_bindings/BlockFieldBinding.tsx +2 -3
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +3 -3
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +18 -18
- package/src/form/field_bindings/MapFieldBinding.tsx +17 -17
- package/src/form/field_bindings/MarkdownFieldBinding.tsx +1 -2
- package/src/form/field_bindings/MultiSelectBinding.tsx +2 -3
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +3 -3
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +6 -4
- package/src/form/field_bindings/RepeatFieldBinding.tsx +3 -3
- package/src/form/field_bindings/SelectFieldBinding.tsx +2 -3
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +15 -6
- package/src/form/field_bindings/SwitchFieldBinding.tsx +2 -3
- package/src/form/field_bindings/TextFieldBinding.tsx +10 -9
- package/src/form/index.tsx +1 -0
- package/src/form/validation.ts +3 -4
- package/src/hooks/data/delete.ts +3 -3
- package/src/hooks/data/save.ts +1 -1
- package/src/hooks/data/useCollectionFetch.tsx +1 -1
- package/src/hooks/data/useDataSource.tsx +8 -3
- package/src/hooks/data/useEntityFetch.tsx +4 -4
- package/src/hooks/index.tsx +5 -1
- package/src/{core → hooks}/useBuildModeController.tsx +1 -1
- package/src/hooks/useBuildNavigationController.tsx +132 -70
- package/src/hooks/useProjectLog.tsx +16 -6
- package/src/hooks/useReferenceDialog.tsx +2 -2
- package/src/hooks/useStorageSource.tsx +7 -2
- package/src/hooks/useValidateAuthenticator.tsx +135 -0
- package/src/internal/useBuildDataSource.ts +7 -2
- package/src/internal/useBuildSideEntityController.tsx +3 -0
- package/src/preview/PropertyPreview.tsx +2 -2
- package/src/preview/PropertyPreviewProps.tsx +1 -11
- package/src/preview/components/BooleanPreview.tsx +19 -4
- package/src/preview/components/EnumValuesChip.tsx +1 -1
- package/src/preview/components/ReferencePreview.tsx +56 -148
- package/src/preview/property_previews/StringPropertyPreview.tsx +8 -7
- package/src/types/analytics.ts +1 -0
- package/src/types/auth.tsx +50 -1
- package/src/types/collections.ts +19 -4
- package/src/types/datasource.ts +1 -1
- package/src/types/entities.ts +4 -0
- package/src/types/entity_actions.tsx +4 -0
- package/src/types/entity_callbacks.ts +2 -2
- package/src/types/entity_overrides.tsx +7 -0
- package/src/types/firecms.tsx +0 -1
- package/src/types/index.ts +2 -0
- package/src/types/navigation.ts +17 -16
- package/src/types/permissions.ts +6 -1
- package/src/types/plugins.tsx +24 -27
- package/src/types/properties.ts +3 -2
- package/src/types/property_config.tsx +2 -2
- package/src/types/roles.ts +41 -0
- package/src/types/side_entity_controller.tsx +1 -0
- package/src/types/storage.ts +12 -3
- package/src/types/user.ts +7 -0
- package/src/util/collections.ts +22 -0
- package/src/util/icons.tsx +11 -3
- package/src/util/permissions.ts +11 -8
- package/src/util/references.ts +36 -5
- package/src/util/useTraceUpdate.tsx +2 -1
- package/src/components/HomePage/NavigationCollectionCard.tsx +0 -146
- /package/dist/{components → form/components}/LabelWithIcon.d.ts +0 -0
- /package/dist/{core → hooks}/useBuildLocalConfigurationPersistence.d.ts +0 -0
- /package/src/{components → form/components}/LabelWithIcon.tsx +0 -0
- /package/src/{core → hooks}/useBuildLocalConfigurationPersistence.tsx +0 -0
package/src/form/EntityForm.tsx
CHANGED
|
@@ -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(({
|
|
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,
|
|
397
|
-
const deleteEnabled = entity ? canDeleteEntity(inputCollection, authController,
|
|
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.
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
93
|
+
`min-w-[${imageSize}px] min-h-[${imageSize}px]`)}>
|
|
93
94
|
|
|
94
95
|
{loading &&
|
|
95
96
|
<Skeleton className="w-full h-full"/>}
|
|
@@ -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 {
|
|
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
|
|
4
|
+
import { FieldHelperText, FormikArrayContainer, LabelWithIcon } from "../components";
|
|
5
|
+
import { ErrorView } from "../../components";
|
|
6
6
|
import { getIconForProperty, getReferenceFrom } from "../../util";
|
|
7
7
|
|
|
8
|
-
import {
|
|
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,
|
|
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
|
-
|
|
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 {
|
|
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,
|
|
2
|
+
import { DataType, FieldProps, GeoPoint } from "../../types";
|
|
3
3
|
|
|
4
|
-
import { ArrayContainer
|
|
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
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
|
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
|
|
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
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
|
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
|
-
|
|
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 {
|
|
4
|
+
import { useNavigationController, useReferenceDialog } from "../../hooks";
|
|
5
5
|
import { ReadOnlyFieldBinding } from "./ReadOnlyFieldBinding";
|
|
6
|
-
import { FieldHelperText } from "../components";
|
|
7
|
-
import { ErrorView
|
|
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
|
|
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
|
|
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
|
|