@firecms/core 3.0.0-canary.1 → 3.0.0-canary.100
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 +2 -2
- package/dist/app/AppBar.d.ts +12 -0
- package/dist/app/Drawer.d.ts +17 -0
- package/dist/app/Scaffold.d.ts +30 -0
- package/dist/app/index.d.ts +4 -0
- package/dist/app/useApp.d.ts +16 -0
- package/dist/components/CircularProgressCenter.d.ts +1 -1
- package/dist/components/ClearFilterSortButton.d.ts +5 -0
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +11 -12
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +5 -3
- package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +3 -2
- package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
- package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +2 -0
- package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
- package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
- package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +1 -1
- package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +13 -4
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
- package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
- package/dist/components/EntityPreview.d.ts +26 -7
- package/dist/components/EntityView.d.ts +11 -0
- package/dist/components/ErrorView.d.ts +1 -1
- package/dist/components/FieldCaption.d.ts +5 -0
- package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
- package/dist/components/HomePage/NavigationCard.d.ts +8 -0
- package/dist/components/HomePage/{NavigationCollectionCard.d.ts → NavigationCardBinding.d.ts} +3 -3
- package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
- package/dist/components/HomePage/index.d.ts +3 -1
- package/dist/components/ReferenceWidget.d.ts +6 -4
- package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
- package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +16 -13
- package/dist/components/VirtualTable/types.d.ts +3 -3
- package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
- package/dist/components/common/index.d.ts +1 -0
- package/dist/components/common/table_height.d.ts +5 -0
- package/dist/components/common/types.d.ts +4 -6
- package/dist/components/common/useColumnsIds.d.ts +2 -1
- package/dist/components/common/useDataSourceEntityCollectionTableController.d.ts +3 -0
- package/dist/components/index.d.ts +6 -4
- package/dist/contexts/AuthControllerContext.d.ts +1 -1
- package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
- package/dist/core/DefaultDrawer.d.ts +19 -0
- package/dist/core/DrawerNavigationItem.d.ts +9 -0
- package/dist/core/EntityEditView.d.ts +36 -0
- package/dist/core/FireCMS.d.ts +1 -1
- package/dist/core/NavigationRoutes.d.ts +3 -3
- package/dist/core/index.d.ts +3 -6
- package/dist/form/PropertiesForm.d.ts +8 -0
- package/dist/form/PropertyFieldBinding.d.ts +1 -1
- package/dist/form/components/ErrorFocus.d.ts +1 -1
- package/dist/form/components/FieldHelperText.d.ts +3 -3
- package/dist/form/components/StorageItemPreview.d.ts +4 -3
- 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 +3 -4
- package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -2
- package/dist/form/index.d.ts +1 -2
- package/dist/form/validation.d.ts +1 -1
- package/dist/hooks/data/delete.d.ts +2 -2
- package/dist/hooks/data/save.d.ts +2 -3
- package/dist/hooks/data/useDataSource.d.ts +2 -2
- package/dist/hooks/data/useEntityFetch.d.ts +3 -3
- package/dist/hooks/index.d.ts +4 -1
- package/dist/{core → hooks}/useBuildModeController.d.ts +1 -1
- package/dist/hooks/useBuildNavigationController.d.ts +6 -4
- package/dist/hooks/useProjectLog.d.ts +6 -2
- package/dist/hooks/useStorageSource.d.ts +2 -2
- package/dist/hooks/useValidateAuthenticator.d.ts +21 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +16400 -12423
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +19713 -7
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +1 -12
- package/dist/preview/PropertyPreview.d.ts +1 -1
- package/dist/preview/PropertyPreviewProps.d.ts +6 -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 +3 -8
- package/dist/preview/components/StorageThumbnail.d.ts +2 -1
- package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
- package/dist/types/analytics.d.ts +1 -1
- package/dist/types/auth.d.ts +38 -2
- package/dist/types/collections.d.ts +45 -8
- package/dist/types/datasource.d.ts +34 -20
- package/dist/types/entities.d.ts +6 -1
- package/dist/types/entity_actions.d.ts +14 -0
- package/dist/types/entity_callbacks.d.ts +2 -2
- package/dist/types/entity_overrides.d.ts +6 -0
- package/dist/types/fields.d.ts +36 -30
- package/dist/types/index.d.ts +2 -1
- package/dist/types/navigation.d.ts +15 -14
- package/dist/types/permissions.d.ts +5 -1
- package/dist/types/plugins.d.ts +31 -23
- package/dist/types/properties.d.ts +34 -21
- 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/entities.d.ts +1 -1
- package/dist/util/icon_list.d.ts +5 -1
- package/dist/util/icon_synonyms.d.ts +1 -97
- package/dist/util/icons.d.ts +9 -3
- package/dist/util/index.d.ts +1 -0
- package/dist/util/navigation_utils.d.ts +2 -2
- package/dist/util/objects.d.ts +1 -1
- package/dist/util/permissions.d.ts +4 -4
- package/dist/util/plurals.d.ts +0 -2
- package/dist/util/references.d.ts +4 -2
- package/dist/util/resolutions.d.ts +15 -14
- package/dist/util/storage.d.ts +23 -2
- package/dist/util/useStorageUploadController.d.ts +1 -1
- package/dist/util/useTraceUpdate.d.ts +1 -0
- package/package.json +128 -119
- package/src/app/AppBar.tsx +18 -0
- package/src/app/Drawer.tsx +25 -0
- package/src/app/Scaffold.tsx +251 -0
- package/src/app/index.ts +4 -0
- package/src/app/useApp.tsx +32 -0
- package/src/components/ArrayContainer.tsx +1 -1
- package/src/components/CircularProgressCenter.tsx +1 -1
- package/src/components/ClearFilterSortButton.tsx +41 -0
- package/src/components/DeleteEntityDialog.tsx +4 -4
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +11 -21
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +276 -279
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +9 -5
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +49 -45
- package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +20 -18
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +17 -9
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +29 -34
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +16 -12
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +4 -5
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +95 -92
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +5 -6
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
- package/src/components/EntityCollectionView/useSelectionController.tsx +42 -0
- package/src/components/EntityPreview.tsx +210 -70
- package/src/components/EntityView.tsx +84 -0
- package/src/components/ErrorView.tsx +1 -1
- package/src/components/FieldCaption.tsx +14 -0
- package/src/components/HomePage/DefaultHomePage.tsx +37 -24
- 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/PropertyIdCopyTooltipContent.tsx +2 -3
- package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +4 -4
- package/src/components/ReferenceWidget.tsx +26 -16
- package/src/components/SearchIconsView.tsx +9 -6
- package/src/components/SelectableTable/SelectableTable.tsx +7 -7
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +22 -7
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +38 -24
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +35 -15
- package/src/components/VirtualTable/VirtualTable.tsx +70 -37
- package/src/components/VirtualTable/VirtualTableCell.tsx +1 -1
- package/src/components/VirtualTable/VirtualTableHeader.tsx +4 -4
- package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
- package/src/components/VirtualTable/VirtualTableProps.tsx +19 -15
- package/src/components/VirtualTable/VirtualTableRow.tsx +4 -5
- package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +1 -1
- package/src/components/VirtualTable/types.tsx +2 -3
- package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +11 -7
- package/src/components/common/index.ts +1 -0
- package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
- package/src/components/common/types.tsx +4 -6
- package/src/components/common/useColumnsIds.tsx +23 -2
- package/src/components/common/useDataSourceEntityCollectionTableController.tsx +12 -1
- package/src/components/common/useTableSearchHelper.ts +52 -12
- package/src/components/index.tsx +6 -4
- package/src/contexts/AuthControllerContext.tsx +1 -1
- package/src/contexts/DialogsProvider.tsx +2 -2
- package/src/{components/FireCMSAppBar.tsx → core/DefaultAppBar.tsx} +60 -37
- package/src/core/DefaultDrawer.tsx +177 -0
- package/src/core/DrawerNavigationItem.tsx +62 -0
- package/src/core/EntityEditView.tsx +1130 -0
- package/src/core/EntitySidePanel.tsx +3 -4
- package/src/core/FireCMS.tsx +55 -44
- package/src/core/NavigationRoutes.tsx +15 -8
- package/src/core/SideDialogs.tsx +1 -0
- package/src/core/field_configs.tsx +2 -3
- package/src/core/index.tsx +3 -6
- package/src/form/PropertiesForm.tsx +81 -0
- package/src/form/PropertyFieldBinding.tsx +38 -9
- package/src/form/components/FieldHelperText.tsx +3 -3
- package/src/form/components/StorageItemPreview.tsx +21 -10
- package/src/form/components/StorageUploadProgress.tsx +9 -8
- package/src/form/components/index.tsx +1 -0
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +10 -8
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +18 -18
- package/src/form/field_bindings/BlockFieldBinding.tsx +4 -5
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +3 -3
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +62 -57
- package/src/form/field_bindings/MapFieldBinding.tsx +28 -20
- package/src/form/field_bindings/MarkdownFieldBinding.tsx +3 -4
- package/src/form/field_bindings/MultiSelectBinding.tsx +2 -3
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +4 -11
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +21 -17
- package/src/form/field_bindings/RepeatFieldBinding.tsx +14 -11
- package/src/form/field_bindings/SelectFieldBinding.tsx +5 -6
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +28 -40
- package/src/form/field_bindings/SwitchFieldBinding.tsx +3 -4
- package/src/form/field_bindings/TextFieldBinding.tsx +10 -9
- package/src/form/index.tsx +5 -4
- package/src/form/validation.ts +4 -21
- package/src/hooks/data/delete.ts +3 -3
- package/src/hooks/data/save.ts +4 -2
- package/src/hooks/data/useCollectionFetch.tsx +1 -1
- package/src/hooks/data/useDataSource.tsx +7 -2
- package/src/hooks/data/useEntityFetch.tsx +4 -4
- package/src/hooks/index.tsx +6 -1
- package/src/{core → hooks}/useBuildLocalConfigurationPersistence.tsx +8 -10
- package/src/{core → hooks}/useBuildModeController.tsx +12 -6
- package/src/hooks/useBuildNavigationController.tsx +208 -92
- package/src/hooks/useProjectLog.tsx +30 -9
- package/src/hooks/useReferenceDialog.tsx +2 -2
- package/src/hooks/useResolvedNavigationFrom.tsx +1 -1
- package/src/hooks/useStorageSource.tsx +7 -2
- package/src/hooks/useValidateAuthenticator.tsx +115 -0
- package/src/index.ts +1 -0
- package/src/internal/useBuildDataSource.ts +56 -44
- package/src/internal/useBuildSideEntityController.tsx +88 -21
- package/src/preview/PropertyPreview.tsx +11 -18
- package/src/preview/PropertyPreviewProps.tsx +4 -8
- package/src/preview/components/BooleanPreview.tsx +19 -4
- package/src/preview/components/EnumValuesChip.tsx +2 -2
- package/src/preview/components/ImagePreview.tsx +21 -33
- package/src/preview/components/ReferencePreview.tsx +74 -166
- package/src/preview/components/StorageThumbnail.tsx +5 -1
- package/src/preview/components/UrlComponentPreview.tsx +44 -11
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +0 -1
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +2 -1
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +0 -1
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +0 -1
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +2 -3
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +2 -3
- package/src/preview/property_previews/MapPropertyPreview.tsx +5 -5
- package/src/preview/property_previews/StringPropertyPreview.tsx +8 -7
- package/src/types/analytics.ts +1 -0
- package/src/types/auth.tsx +51 -2
- package/src/types/collections.ts +52 -8
- package/src/types/customization_controller.tsx +0 -1
- package/src/types/datasource.ts +41 -24
- package/src/types/entities.ts +13 -1
- package/src/types/entity_actions.tsx +17 -0
- package/src/types/entity_callbacks.ts +2 -2
- package/src/types/entity_overrides.tsx +7 -0
- package/src/types/fields.tsx +39 -33
- package/src/types/firecms.tsx +0 -1
- package/src/types/index.ts +2 -1
- package/src/types/navigation.ts +17 -17
- package/src/types/permissions.ts +6 -1
- package/src/types/plugins.tsx +38 -31
- package/src/types/properties.ts +40 -22
- 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/entities.ts +5 -4
- package/src/util/enums.ts +1 -1
- package/src/util/icon_list.ts +15 -10
- package/src/util/icon_synonyms.ts +3 -99
- package/src/util/icons.tsx +11 -3
- package/src/util/index.ts +1 -0
- package/src/util/navigation_utils.ts +6 -6
- package/src/util/objects.ts +25 -28
- package/src/util/permissions.ts +12 -8
- package/src/util/plurals.ts +0 -2
- package/src/util/references.ts +36 -5
- package/src/util/resolutions.ts +44 -39
- package/src/util/storage.ts +75 -21
- package/src/util/strings.ts +2 -2
- package/src/util/useStorageUploadController.tsx +21 -3
- package/src/util/useTraceUpdate.tsx +2 -1
- package/dist/components/VirtualTable/common.d.ts +0 -2
- package/dist/core/Drawer.d.ts +0 -23
- package/dist/core/Scaffold.d.ts +0 -55
- package/dist/form/EntityForm.d.ts +0 -77
- package/dist/internal/EntityView.d.ts +0 -22
- package/dist/internal/useBuildCustomizationController.d.ts +0 -2
- package/dist/internal/useLocaleConfig.d.ts +0 -1
- package/dist/types/appcheck.d.ts +0 -26
- package/src/components/HomePage/NavigationCollectionCard.tsx +0 -146
- package/src/core/Drawer.tsx +0 -164
- package/src/core/Scaffold.tsx +0 -281
- package/src/form/EntityForm.tsx +0 -720
- package/src/internal/EntityView.tsx +0 -578
- package/src/internal/useBuildCustomizationController.tsx +0 -5
- package/src/internal/useLocaleConfig.tsx +0 -18
- package/src/types/appcheck.ts +0 -29
- /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
|
@@ -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 {
|
|
6
|
-
import { ExpandablePanel } from "@firecms/ui";
|
|
5
|
+
import { ExpandablePanel, Typography } 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
|
|
@@ -40,10 +39,13 @@ export function ArrayCustomShapedFieldBinding<T extends Array<any>>({
|
|
|
40
39
|
setValue
|
|
41
40
|
});
|
|
42
41
|
|
|
43
|
-
const title =
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
const title = (<>
|
|
43
|
+
<LabelWithIcon icon={getIconForProperty(property, "small")}
|
|
44
|
+
required={property.validation?.required}
|
|
45
|
+
title={property.name}
|
|
46
|
+
className={"flex-grow text-text-secondary dark:text-text-secondary-dark"}/>
|
|
47
|
+
{Array.isArray(value) && <Typography variant={"caption"} className={"px-4"}>({value.length})</Typography>}
|
|
48
|
+
</>);
|
|
47
49
|
|
|
48
50
|
const body = property.resolvedProperties.map((childProperty, index) => {
|
|
49
51
|
const fieldProps = {
|
|
@@ -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, cls, ExpandablePanel, fieldBackgroundMixin, Typography } 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,34 +80,33 @@ 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
|
-
|
|
91
|
+
includeId={ofProperty.includeId}
|
|
92
|
+
includeEntityLink={ofProperty.includeEntityLink}
|
|
94
93
|
/>
|
|
95
|
-
</div>
|
|
96
94
|
);
|
|
97
|
-
}, [ofProperty.path, ofProperty.previewProperties,
|
|
95
|
+
}, [ofProperty.path, ofProperty.previewProperties, value]);
|
|
98
96
|
|
|
99
|
-
const title = (
|
|
97
|
+
const title = (<>
|
|
100
98
|
<LabelWithIcon icon={getIconForProperty(property, "small")}
|
|
101
99
|
required={property.validation?.required}
|
|
102
100
|
title={property.name}
|
|
103
|
-
className={"text-text-secondary dark:text-text-secondary-dark"}/>
|
|
104
|
-
|
|
101
|
+
className={"flex-grow text-text-secondary dark:text-text-secondary-dark"}/>
|
|
102
|
+
{Array.isArray(value) && <Typography variant={"caption"} className={"px-4"}>({value.length})</Typography>}
|
|
103
|
+
</>);
|
|
105
104
|
|
|
106
105
|
const body = <>
|
|
107
106
|
{!collection && <ErrorView
|
|
108
107
|
error={"The specified collection does not exist. Check console"}/>}
|
|
109
108
|
|
|
110
|
-
{collection &&
|
|
109
|
+
{collection && <div className={"group"}>
|
|
111
110
|
|
|
112
111
|
<FormikArrayContainer value={value}
|
|
113
112
|
addLabel={property.name ? "Add reference to " + property.name : "Add reference"}
|
|
@@ -125,7 +124,7 @@ export function ArrayOfReferencesFieldBinding({
|
|
|
125
124
|
onClick={onEntryClick}>
|
|
126
125
|
Edit {property.name}
|
|
127
126
|
</Button>
|
|
128
|
-
|
|
127
|
+
</div>}
|
|
129
128
|
</>;
|
|
130
129
|
|
|
131
130
|
return (
|
|
@@ -133,7 +132,8 @@ export function ArrayOfReferencesFieldBinding({
|
|
|
133
132
|
|
|
134
133
|
{!tableMode &&
|
|
135
134
|
<ExpandablePanel
|
|
136
|
-
|
|
135
|
+
titleClassName={fieldBackgroundMixin}
|
|
136
|
+
className={cls("px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2", fieldBackgroundMixin)}
|
|
137
137
|
initiallyExpanded={expanded}
|
|
138
138
|
title={title}>
|
|
139
139
|
{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
|
-
import {
|
|
11
|
+
import { cls, 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
|
|
@@ -194,7 +193,7 @@ function BlockEntry({
|
|
|
194
193
|
};
|
|
195
194
|
|
|
196
195
|
return (
|
|
197
|
-
<div className={
|
|
196
|
+
<div className={cls(paperMixin, "bg-transparent p-4 my-4 py-8")}>
|
|
198
197
|
|
|
199
198
|
<Field
|
|
200
199
|
name={typeFieldName}
|
|
@@ -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,14 +1,14 @@
|
|
|
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,
|
|
9
9
|
BooleanSwitchWithLabel,
|
|
10
10
|
Button,
|
|
11
|
-
|
|
11
|
+
cls,
|
|
12
12
|
DateTimeField,
|
|
13
13
|
defaultBorderMixin,
|
|
14
14
|
ExpandablePanel,
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
} from "@firecms/ui";
|
|
22
22
|
import { getDefaultValueForDataType, getIconForProperty } from "../../util";
|
|
23
23
|
import { useCustomizationController } from "../../hooks";
|
|
24
|
+
import { getIn } from "@firecms/formex";
|
|
24
25
|
|
|
25
26
|
type MapEditViewRowState = [number, {
|
|
26
27
|
key: string,
|
|
@@ -32,29 +33,33 @@ type MapEditViewRowState = [number, {
|
|
|
32
33
|
*
|
|
33
34
|
* @group Form fields
|
|
34
35
|
*/
|
|
35
|
-
export function KeyValueFieldBinding
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
36
|
+
export function KeyValueFieldBinding({
|
|
37
|
+
propertyKey,
|
|
38
|
+
value,
|
|
39
|
+
showError,
|
|
40
|
+
error,
|
|
41
|
+
disabled,
|
|
42
|
+
property,
|
|
43
|
+
setValue,
|
|
44
|
+
tableMode,
|
|
45
|
+
includeDescription,
|
|
46
|
+
underlyingValueHasChanged,
|
|
47
|
+
autoFocus,
|
|
48
|
+
context
|
|
49
|
+
}: FieldProps<Record<string, any>>) {
|
|
49
50
|
|
|
50
51
|
const expanded = (property.expanded === undefined ? true : property.expanded) || autoFocus;
|
|
51
52
|
|
|
52
53
|
if (!property.keyValue) {
|
|
53
54
|
throw Error(`Your property ${propertyKey} needs to have the 'keyValue' prop in order to use this field binding`);
|
|
54
55
|
}
|
|
56
|
+
|
|
57
|
+
const initialValues = getIn(context.formex.initialValues, propertyKey);
|
|
58
|
+
|
|
55
59
|
const mapFormView = <MapEditView value={value}
|
|
56
60
|
setValue={setValue}
|
|
57
61
|
disabled={disabled}
|
|
62
|
+
initialValue={initialValues}
|
|
58
63
|
fieldName={property.name ?? propertyKey}/>;
|
|
59
64
|
|
|
60
65
|
const title = <LabelWithIcon
|
|
@@ -84,6 +89,7 @@ export function KeyValueFieldBinding<T extends Record<string, any>>({
|
|
|
84
89
|
|
|
85
90
|
interface MapEditViewParams<T extends Record<string, any>> {
|
|
86
91
|
value?: T;
|
|
92
|
+
initialValue?: T;
|
|
87
93
|
setValue: (value: (T | null)) => void;
|
|
88
94
|
fieldName?: string,
|
|
89
95
|
disabled?: boolean
|
|
@@ -91,14 +97,15 @@ interface MapEditViewParams<T extends Record<string, any>> {
|
|
|
91
97
|
|
|
92
98
|
function MapEditView<T extends Record<string, any>>({
|
|
93
99
|
value,
|
|
100
|
+
initialValue,
|
|
94
101
|
setValue,
|
|
95
102
|
fieldName,
|
|
96
103
|
disabled
|
|
97
104
|
}: MapEditViewParams<T>) {
|
|
98
105
|
const [internalState, setInternalState] = React.useState<MapEditViewRowState[]>(
|
|
99
|
-
Object.keys(
|
|
106
|
+
Object.keys(initialValue ?? {}).map((key) => [getRandomId(), {
|
|
100
107
|
key,
|
|
101
|
-
dataType: getDataType(
|
|
108
|
+
dataType: getDataType(initialValue?.[key]) ?? "string"
|
|
102
109
|
}])
|
|
103
110
|
);
|
|
104
111
|
|
|
@@ -121,8 +128,6 @@ function MapEditView<T extends Record<string, any>>({
|
|
|
121
128
|
setInternalState(newRowIds);
|
|
122
129
|
}, [value]);
|
|
123
130
|
|
|
124
|
-
const originalValue = React.useRef<T>(value ?? {} as T);
|
|
125
|
-
|
|
126
131
|
const updateDataType = (rowId: number, dataType: DataType) => {
|
|
127
132
|
if (!rowId) {
|
|
128
133
|
console.warn("No key selected for data type update");
|
|
@@ -168,7 +173,7 @@ function MapEditView<T extends Record<string, any>>({
|
|
|
168
173
|
}
|
|
169
174
|
|
|
170
175
|
const newValue = { ...(value ?? {}) } as T;
|
|
171
|
-
if (typeof
|
|
176
|
+
if (typeof initialValue === "object" && fieldKey in initialValue) {
|
|
172
177
|
// @ts-ignore
|
|
173
178
|
newValue[fieldKey] = undefined; // set to undefined to remove from the object, the datasource will remove it from the backend
|
|
174
179
|
} else {
|
|
@@ -186,7 +191,7 @@ function MapEditView<T extends Record<string, any>>({
|
|
|
186
191
|
value={value ?? {} as T}
|
|
187
192
|
onDeleteClick={() => {
|
|
188
193
|
const newValue = { ...(value ?? {}) as T };
|
|
189
|
-
if (
|
|
194
|
+
if (initialValue && fieldKey in initialValue) {
|
|
190
195
|
// @ts-ignore
|
|
191
196
|
newValue[fieldKey] = undefined;
|
|
192
197
|
} else {
|
|
@@ -305,7 +310,7 @@ function MapKeyValueRow<T extends Record<string, any>>({
|
|
|
305
310
|
}}/>;
|
|
306
311
|
} else if (dataType === "boolean") {
|
|
307
312
|
return <BooleanSwitchWithLabel value={entryValue}
|
|
308
|
-
size={"
|
|
313
|
+
size={"medium"}
|
|
309
314
|
position={"start"}
|
|
310
315
|
disabled={disabled || !fieldKey}
|
|
311
316
|
onValueChange={(newValue) => {
|
|
@@ -316,7 +321,7 @@ function MapKeyValueRow<T extends Record<string, any>>({
|
|
|
316
321
|
}}/>;
|
|
317
322
|
} else if (dataType === "array") {
|
|
318
323
|
return <div
|
|
319
|
-
className={
|
|
324
|
+
className={cls(defaultBorderMixin, "ml-2 pl-2 border-l border-solid")}>
|
|
320
325
|
<ArrayContainer value={entryValue}
|
|
321
326
|
newDefaultEntry={""}
|
|
322
327
|
droppableId={rowId.toString()}
|
|
@@ -349,7 +354,7 @@ function MapKeyValueRow<T extends Record<string, any>>({
|
|
|
349
354
|
</div>;
|
|
350
355
|
} else if (dataType === "map") {
|
|
351
356
|
return <div
|
|
352
|
-
className={
|
|
357
|
+
className={cls(defaultBorderMixin, "ml-2 pl-2 border-l border-solid")}>
|
|
353
358
|
<MapEditView value={entryValue}
|
|
354
359
|
fieldName={fieldKey}
|
|
355
360
|
setValue={(updatedValue) => {
|
|
@@ -375,7 +380,7 @@ function MapKeyValueRow<T extends Record<string, any>>({
|
|
|
375
380
|
<Typography key={rowId.toString()}
|
|
376
381
|
component={"div"}
|
|
377
382
|
className="font-mono flex flex-row gap-1">
|
|
378
|
-
<div className="w-[
|
|
383
|
+
<div className="w-[300px] max-w-[30%]">
|
|
379
384
|
<TextField
|
|
380
385
|
value={fieldKey}
|
|
381
386
|
placeholder={"key"}
|
|
@@ -389,32 +394,32 @@ function MapKeyValueRow<T extends Record<string, any>>({
|
|
|
389
394
|
<div className="flex-grow">
|
|
390
395
|
{(dataType !== "map" && dataType !== "array") && buildInput(entryValue, fieldKey, dataType)}
|
|
391
396
|
</div>
|
|
392
|
-
<
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
</
|
|
397
|
+
<div className={"flex flex-col"}>
|
|
398
|
+
<Menu
|
|
399
|
+
trigger={<IconButton size={"smallest"}>
|
|
400
|
+
<ArrowDropDownIcon size={"small"}/>
|
|
401
|
+
</IconButton>}
|
|
402
|
+
>
|
|
403
|
+
<MenuItem dense
|
|
404
|
+
onClick={() => doUpdateDataType("string")}>string</MenuItem>
|
|
405
|
+
<MenuItem dense
|
|
406
|
+
onClick={() => doUpdateDataType("number")}>number</MenuItem>
|
|
407
|
+
<MenuItem dense
|
|
408
|
+
onClick={() => doUpdateDataType("boolean")}>boolean</MenuItem>
|
|
409
|
+
<MenuItem dense
|
|
410
|
+
onClick={() => doUpdateDataType("date")}>date</MenuItem>
|
|
411
|
+
<MenuItem dense
|
|
412
|
+
onClick={() => doUpdateDataType("map")}>map</MenuItem>
|
|
413
|
+
<MenuItem dense
|
|
414
|
+
onClick={() => doUpdateDataType("array")}>array</MenuItem>
|
|
415
|
+
</Menu>
|
|
416
|
+
|
|
417
|
+
<IconButton aria-label="delete"
|
|
418
|
+
size={"smallest"}
|
|
419
|
+
onClick={onDeleteClick}>
|
|
420
|
+
<RemoveIcon size={"smallest"}/>
|
|
421
|
+
</IconButton>
|
|
422
|
+
</div>
|
|
418
423
|
</Typography>
|
|
419
424
|
|
|
420
425
|
{(dataType === "map" || dataType === "array") && buildInput(entryValue, fieldKey, dataType)}
|
|
@@ -472,7 +477,7 @@ function ArrayKeyValueRow<T>({
|
|
|
472
477
|
}}/>;
|
|
473
478
|
} else if (dataType === "boolean") {
|
|
474
479
|
return <BooleanSwitchWithLabel value={entryValue}
|
|
475
|
-
size={"
|
|
480
|
+
size={"medium"}
|
|
476
481
|
position={"start"}
|
|
477
482
|
onValueChange={(v) => {
|
|
478
483
|
setValue(v as T);
|
|
@@ -482,7 +487,7 @@ function ArrayKeyValueRow<T>({
|
|
|
482
487
|
Arrays of arrays are not supported.
|
|
483
488
|
</Typography>;
|
|
484
489
|
} else if (dataType === "map") {
|
|
485
|
-
return <div className={
|
|
490
|
+
return <div className={cls(defaultBorderMixin, "ml-2 pl-2 border-l border-solid")}>
|
|
486
491
|
<MapEditView value={entryValue}
|
|
487
492
|
setValue={(updatedValue) => {
|
|
488
493
|
setValue(updatedValue);
|
|
@@ -546,7 +551,7 @@ function getDataType(value: any): DataType | undefined {
|
|
|
546
551
|
return "array";
|
|
547
552
|
} else if (value instanceof Date) {
|
|
548
553
|
return "date";
|
|
549
|
-
} else if (value
|
|
554
|
+
} else if (value?.isEntityReference && value?.isEntityReference()) {
|
|
550
555
|
return "reference";
|
|
551
556
|
} else if (value instanceof GeoPoint) {
|
|
552
557
|
return "geopoint";
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import {
|
|
3
|
+
CMSType,
|
|
4
|
+
FieldProps,
|
|
5
|
+
FormContext,
|
|
6
|
+
MapProperty,
|
|
7
|
+
Properties,
|
|
8
|
+
ResolvedProperties,
|
|
9
|
+
ResolvedProperty
|
|
10
|
+
} from "../../types";
|
|
11
|
+
|
|
12
|
+
import { ErrorBoundary } from "../../components";
|
|
5
13
|
import { getIconForProperty, isHidden, pick } from "../../util";
|
|
6
|
-
import { FieldHelperText } from "../components";
|
|
14
|
+
import { FieldHelperText, LabelWithIcon } from "../components";
|
|
7
15
|
import { PropertyFieldBinding } from "../PropertyFieldBinding";
|
|
8
16
|
import { ExpandablePanel, InputLabel, Select, SelectItem } from "@firecms/ui";
|
|
9
17
|
|
|
@@ -14,21 +22,20 @@ import { ExpandablePanel, InputLabel, Select, SelectItem } from "@firecms/ui";
|
|
|
14
22
|
* and tables to the specified properties.
|
|
15
23
|
* @group Form fields
|
|
16
24
|
*/
|
|
17
|
-
export function MapFieldBinding
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}: FieldProps<T>) {
|
|
25
|
+
export function MapFieldBinding({
|
|
26
|
+
propertyKey,
|
|
27
|
+
value,
|
|
28
|
+
showError,
|
|
29
|
+
error,
|
|
30
|
+
disabled,
|
|
31
|
+
property,
|
|
32
|
+
partOfBlock,
|
|
33
|
+
tableMode,
|
|
34
|
+
includeDescription,
|
|
35
|
+
underlyingValueHasChanged,
|
|
36
|
+
autoFocus,
|
|
37
|
+
context
|
|
38
|
+
}: FieldProps<Record<string, any>>) {
|
|
32
39
|
|
|
33
40
|
const pickOnlySomeKeys = property.pickOnlySomeKeys || false;
|
|
34
41
|
const expanded = (property.expanded === undefined ? true : property.expanded) || autoFocus;
|
|
@@ -68,6 +75,7 @@ export function MapFieldBinding<T extends Record<string, any>>({
|
|
|
68
75
|
partOfBlock: false,
|
|
69
76
|
autoFocus: autoFocus && index === 0
|
|
70
77
|
};
|
|
78
|
+
|
|
71
79
|
return (
|
|
72
80
|
<div key={`map-${propertyKey}-${index}`}>
|
|
73
81
|
<ErrorBoundary>
|
|
@@ -101,7 +109,7 @@ export function MapFieldBinding<T extends Record<string, any>>({
|
|
|
101
109
|
{(tableMode || partOfBlock) && mapFormView}
|
|
102
110
|
|
|
103
111
|
<FieldHelperText includeDescription={includeDescription}
|
|
104
|
-
showError={showError}
|
|
112
|
+
showError={showError ?? false}
|
|
105
113
|
error={error ? (typeof error === "string" ? error : "A property of this map has an error") : undefined}
|
|
106
114
|
disabled={disabled}
|
|
107
115
|
property={property}/>
|
|
@@ -4,12 +4,11 @@ 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 {
|
|
12
|
-
|
|
11
|
+
cls,
|
|
13
12
|
fieldBackgroundDisabledMixin,
|
|
14
13
|
fieldBackgroundHoverMixin,
|
|
15
14
|
fieldBackgroundMixin,
|
|
@@ -82,7 +81,7 @@ export function MarkdownFieldBinding({
|
|
|
82
81
|
</Typography>}
|
|
83
82
|
|
|
84
83
|
<MdEditor value={internalValue ?? ""}
|
|
85
|
-
className={
|
|
84
|
+
className={cls(fieldBackgroundMixin,
|
|
86
85
|
disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin,
|
|
87
86
|
"text-base")}
|
|
88
87
|
readOnly={disabled}
|
|
@@ -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,10 +3,10 @@ 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
|
-
import {
|
|
9
|
+
import { cls, paperMixin } from "@firecms/ui";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
*
|
|
@@ -30,12 +30,6 @@ export function ReadOnlyFieldBinding({
|
|
|
30
30
|
if (!context.entityId)
|
|
31
31
|
throw new Error("ReadOnlyFieldBinding: Entity id is null");
|
|
32
32
|
|
|
33
|
-
const entity: Entity<any> = {
|
|
34
|
-
id: context.entityId!,
|
|
35
|
-
values: context.values,
|
|
36
|
-
path: context.path
|
|
37
|
-
};
|
|
38
|
-
|
|
39
33
|
return (
|
|
40
34
|
|
|
41
35
|
<>
|
|
@@ -47,13 +41,12 @@ export function ReadOnlyFieldBinding({
|
|
|
47
41
|
}
|
|
48
42
|
|
|
49
43
|
<div
|
|
50
|
-
className={
|
|
44
|
+
className={cls(paperMixin, "min-h-14 p-4 md:p-6 overflow-x-scroll no-scrollbar")}>
|
|
51
45
|
|
|
52
46
|
<ErrorBoundary>
|
|
53
47
|
<PropertyPreview propertyKey={propertyKey}
|
|
54
48
|
value={value}
|
|
55
49
|
property={property}
|
|
56
|
-
// entity={entity}
|
|
57
50
|
size={"medium"}/>
|
|
58
51
|
</ErrorBoundary>
|
|
59
52
|
|
|
@@ -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.
|
|
@@ -26,19 +27,19 @@ export function ReferenceFieldBinding<M extends Record<string, any>>(props: Fiel
|
|
|
26
27
|
|
|
27
28
|
}
|
|
28
29
|
|
|
29
|
-
function ReferenceFieldBindingInternal
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
30
|
+
function ReferenceFieldBindingInternal({
|
|
31
|
+
value,
|
|
32
|
+
setValue,
|
|
33
|
+
error,
|
|
34
|
+
showError,
|
|
35
|
+
isSubmitting,
|
|
36
|
+
disabled,
|
|
37
|
+
touched,
|
|
38
|
+
autoFocus,
|
|
39
|
+
property,
|
|
40
|
+
includeDescription,
|
|
41
|
+
context
|
|
42
|
+
}: FieldProps<EntityReference>) {
|
|
42
43
|
if (!property.path) {
|
|
43
44
|
throw new Error("Property path is required for ReferenceFieldBinding");
|
|
44
45
|
}
|
|
@@ -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,9 +95,12 @@ 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}
|
|
102
|
+
includeEntityLink={property.includeEntityLink}
|
|
103
|
+
includeId={property.includeId}
|
|
100
104
|
/>}
|
|
101
105
|
|
|
102
106
|
{!value && <div className="justify-center text-left">
|