@firecms/core 3.0.0-canary.14 → 3.0.0-canary.141
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 +3 -3
- package/dist/app/AppBar.d.ts +12 -0
- package/dist/app/Drawer.d.ts +16 -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/ArrayContainer.d.ts +16 -5
- package/dist/components/CircularProgressCenter.d.ts +1 -1
- package/dist/components/ClearFilterSortButton.d.ts +5 -0
- package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +11 -12
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +5 -3
- package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
- package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
- package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
- 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 +7 -4
- package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +12 -2
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
- package/dist/components/EntityCollectionView/utils.d.ts +3 -0
- package/dist/components/EntityPreview.d.ts +7 -6
- package/dist/components/ErrorView.d.ts +1 -1
- package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
- package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
- package/dist/components/PropertyConfigBadge.d.ts +2 -1
- package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
- package/dist/components/ReferenceWidget.d.ts +3 -1
- 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 +15 -12
- 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 +4 -2
- 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 +10 -0
- package/dist/core/EntityEditView.d.ts +18 -4
- package/dist/core/FireCMS.d.ts +1 -1
- package/dist/core/NavigationRoutes.d.ts +3 -3
- package/dist/core/index.d.ts +3 -4
- 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/LabelWithIcon.d.ts +1 -1
- package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
- package/dist/form/components/StorageItemPreview.d.ts +4 -4
- package/dist/form/components/index.d.ts +1 -1
- package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
- 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/MarkdownEditorFieldBinding.d.ts +11 -0
- package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
- package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
- package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
- package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
- package/dist/form/index.d.ts +3 -5
- package/dist/form/useClearRestoreValue.d.ts +2 -2
- package/dist/hooks/data/save.d.ts +1 -2
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/useBuildNavigationController.d.ts +1 -2
- package/dist/hooks/useProjectLog.d.ts +8 -2
- package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +16760 -13321
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +20120 -587
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +1 -16
- package/dist/preview/PropertyPreviewProps.d.ts +6 -1
- package/dist/preview/components/EnumValuesChip.d.ts +1 -1
- package/dist/preview/components/ReferencePreview.d.ts +3 -2
- package/dist/preview/components/StorageThumbnail.d.ts +2 -1
- package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
- package/dist/types/auth.d.ts +3 -3
- package/dist/types/collections.d.ts +41 -6
- package/dist/types/datasource.d.ts +55 -35
- package/dist/types/entities.d.ts +6 -1
- package/dist/types/entity_actions.d.ts +14 -0
- package/dist/types/entity_overrides.d.ts +2 -2
- package/dist/types/fields.d.ts +63 -41
- package/dist/types/firecms.d.ts +4 -0
- package/dist/types/index.d.ts +0 -1
- package/dist/types/navigation.d.ts +6 -5
- package/dist/types/plugins.d.ts +14 -4
- package/dist/types/properties.d.ts +34 -21
- package/dist/types/property_config.d.ts +0 -2
- package/dist/types/side_dialogs_controller.d.ts +10 -0
- package/dist/types/storage.d.ts +86 -3
- package/dist/util/entities.d.ts +2 -2
- package/dist/util/icon_list.d.ts +5 -1
- package/dist/util/icon_synonyms.d.ts +1 -97
- package/dist/util/icons.d.ts +3 -2
- package/dist/util/index.d.ts +1 -0
- package/dist/util/navigation_utils.d.ts +2 -2
- package/dist/util/objects.d.ts +2 -1
- package/dist/util/plurals.d.ts +0 -2
- package/dist/util/property_utils.d.ts +3 -3
- package/dist/util/resolutions.d.ts +30 -16
- package/dist/util/storage.d.ts +23 -2
- package/dist/util/useStorageUploadController.d.ts +3 -3
- package/package.json +128 -119
- package/src/app/AppBar.tsx +18 -0
- package/src/app/Drawer.tsx +24 -0
- package/src/app/Scaffold.tsx +243 -0
- package/src/app/index.ts +4 -0
- package/src/app/useApp.tsx +32 -0
- package/src/components/ArrayContainer.tsx +51 -24
- package/src/components/CircularProgressCenter.tsx +1 -1
- package/src/components/ClearFilterSortButton.tsx +41 -0
- package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +1 -1
- package/src/components/DeleteEntityDialog.tsx +1 -1
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +12 -19
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +21 -20
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +10 -6
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -39
- package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +31 -16
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +14 -6
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +29 -34
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +32 -30
- package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +19 -7
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +72 -67
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +138 -86
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
- package/src/components/EntityCollectionView/useSelectionController.tsx +19 -7
- package/src/components/EntityCollectionView/utils.ts +19 -0
- package/src/components/EntityPreview.tsx +43 -39
- package/src/components/EntityView.tsx +6 -6
- package/src/components/ErrorView.tsx +1 -1
- package/src/components/HomePage/DefaultHomePage.tsx +25 -19
- package/src/components/HomePage/NavigationCard.tsx +3 -3
- package/src/components/HomePage/NavigationCardBinding.tsx +1 -1
- package/src/components/HomePage/NavigationGroup.tsx +1 -1
- package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
- package/src/components/PropertyConfigBadge.tsx +9 -3
- package/src/components/PropertyIdCopyTooltip.tsx +48 -0
- package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +8 -7
- package/src/components/ReferenceWidget.tsx +22 -12
- package/src/components/SearchIconsView.tsx +10 -7
- 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 +28 -6
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +88 -21
- package/src/components/VirtualTable/VirtualTable.tsx +77 -46
- package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
- package/src/components/VirtualTable/VirtualTableHeader.tsx +4 -4
- package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
- package/src/components/VirtualTable/VirtualTableProps.tsx +18 -14
- package/src/components/VirtualTable/VirtualTableRow.tsx +4 -5
- package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
- package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -1
- package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
- package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +14 -28
- package/src/components/VirtualTable/types.tsx +2 -3
- package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +8 -4
- 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 +23 -12
- package/src/components/common/useTableSearchHelper.ts +53 -12
- package/src/components/index.tsx +4 -2
- package/src/contexts/DialogsProvider.tsx +2 -2
- package/src/core/DefaultAppBar.tsx +176 -0
- package/src/core/DefaultDrawer.tsx +183 -0
- package/src/core/DrawerNavigationItem.tsx +66 -0
- package/src/core/EntityEditView.tsx +716 -153
- package/src/core/EntitySidePanel.tsx +1 -2
- package/src/core/FireCMS.tsx +53 -52
- package/src/core/NavigationRoutes.tsx +7 -8
- package/src/core/SideDialogs.tsx +1 -0
- package/src/core/field_configs.tsx +7 -8
- package/src/core/index.tsx +3 -4
- package/src/form/PropertyFieldBinding.tsx +74 -35
- package/src/form/components/CustomIdField.tsx +4 -2
- package/src/form/components/FieldHelperText.tsx +4 -4
- package/src/form/components/LabelWithIcon.tsx +27 -19
- package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
- package/src/form/components/StorageItemPreview.tsx +21 -11
- package/src/form/components/StorageUploadProgress.tsx +3 -4
- package/src/form/components/index.tsx +1 -1
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +29 -17
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +45 -35
- package/src/form/field_bindings/BlockFieldBinding.tsx +51 -32
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +17 -14
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +54 -45
- package/src/form/field_bindings/MapFieldBinding.tsx +65 -48
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +150 -0
- package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
- package/src/form/field_bindings/RepeatFieldBinding.tsx +52 -34
- package/src/form/field_bindings/SelectFieldBinding.tsx +20 -13
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +36 -46
- package/src/form/field_bindings/SwitchFieldBinding.tsx +9 -5
- package/src/form/field_bindings/TextFieldBinding.tsx +26 -23
- package/src/form/index.tsx +4 -9
- package/src/form/useClearRestoreValue.tsx +2 -2
- package/src/form/validation.ts +1 -17
- package/src/hooks/data/delete.ts +2 -1
- package/src/hooks/data/save.ts +9 -5
- package/src/hooks/data/useDataSource.tsx +11 -3
- package/src/hooks/index.tsx +1 -0
- package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
- package/src/hooks/useBuildModeController.tsx +11 -5
- package/src/hooks/useBuildNavigationController.tsx +91 -31
- package/src/hooks/useProjectLog.tsx +32 -10
- package/src/hooks/useResolvedNavigationFrom.tsx +1 -1
- package/src/hooks/useValidateAuthenticator.tsx +21 -41
- package/src/index.ts +1 -0
- package/src/internal/useBuildDataSource.ts +72 -82
- package/src/internal/useBuildSideDialogsController.tsx +1 -0
- package/src/internal/useBuildSideEntityController.tsx +102 -22
- package/src/internal/useUnsavedChangesDialog.tsx +3 -1
- package/src/preview/PropertyPreview.tsx +11 -18
- package/src/preview/PropertyPreviewProps.tsx +7 -1
- package/src/preview/components/BooleanPreview.tsx +2 -2
- package/src/preview/components/EnumValuesChip.tsx +2 -2
- package/src/preview/components/ImagePreview.tsx +25 -35
- package/src/preview/components/ReferencePreview.tsx +23 -34
- package/src/preview/components/StorageThumbnail.tsx +5 -1
- package/src/preview/components/UrlComponentPreview.tsx +44 -11
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
- package/src/preview/property_previews/MapPropertyPreview.tsx +6 -6
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +2 -2
- package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
- package/src/preview/util.ts +2 -2
- package/src/types/auth.tsx +3 -3
- package/src/types/collections.ts +50 -8
- package/src/types/customization_controller.tsx +0 -1
- package/src/types/datasource.ts +65 -43
- package/src/types/entities.ts +11 -1
- package/src/types/entity_actions.tsx +16 -3
- package/src/types/entity_overrides.tsx +2 -2
- package/src/types/fields.tsx +69 -45
- package/src/types/firecms.tsx +5 -0
- package/src/types/index.ts +0 -1
- package/src/types/navigation.ts +7 -7
- package/src/types/plugins.tsx +16 -6
- package/src/types/properties.ts +39 -22
- package/src/types/property_config.tsx +0 -2
- package/src/types/side_dialogs_controller.tsx +13 -0
- package/src/types/storage.ts +94 -3
- package/src/util/entities.ts +6 -5
- 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 +8 -2
- package/src/util/index.ts +1 -0
- package/src/util/make_properties_editable.ts +13 -5
- package/src/util/navigation_utils.ts +6 -6
- package/src/util/objects.ts +45 -28
- package/src/util/permissions.ts +1 -0
- package/src/util/plurals.ts +0 -2
- package/src/util/property_utils.tsx +11 -4
- package/src/util/references.ts +3 -0
- package/src/util/resolutions.ts +79 -46
- package/src/util/storage.ts +79 -21
- package/src/util/strings.ts +2 -2
- package/src/util/useStorageUploadController.tsx +33 -7
- package/src/util/useTraceUpdate.tsx +1 -0
- package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
- 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/core/SideEntityView.d.ts +0 -7
- package/dist/form/EntityForm.d.ts +0 -77
- package/dist/form/components/FormikArrayContainer.d.ts +0 -18
- package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
- 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/FireCMSAppBar.tsx +0 -165
- package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
- package/src/core/Drawer.tsx +0 -191
- package/src/core/Scaffold.tsx +0 -281
- package/src/core/SideEntityView.tsx +0 -38
- package/src/form/EntityForm.tsx +0 -728
- package/src/form/components/FormikArrayContainer.tsx +0 -44
- package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
- package/src/internal/useBuildCustomizationController.tsx +0 -5
- package/src/internal/useLocaleConfig.tsx +0 -18
- package/src/types/appcheck.ts +0 -29
|
@@ -2,13 +2,13 @@ import React, { useEffect, useState } from "react";
|
|
|
2
2
|
import { DataType, FieldProps, GeoPoint } from "../../types";
|
|
3
3
|
|
|
4
4
|
import { ArrayContainer } from "../../components";
|
|
5
|
-
import { FieldHelperText,
|
|
5
|
+
import { FieldHelperText, LabelWithIconAndTooltip } 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,
|
|
@@ -40,7 +41,7 @@ export function KeyValueFieldBinding({
|
|
|
40
41
|
disabled,
|
|
41
42
|
property,
|
|
42
43
|
setValue,
|
|
43
|
-
|
|
44
|
+
minimalistView,
|
|
44
45
|
includeDescription,
|
|
45
46
|
underlyingValueHasChanged,
|
|
46
47
|
autoFocus,
|
|
@@ -52,12 +53,17 @@ export function KeyValueFieldBinding({
|
|
|
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
|
-
const title = <
|
|
65
|
+
const title = <LabelWithIconAndTooltip
|
|
66
|
+
propertyKey={propertyKey}
|
|
61
67
|
icon={getIconForProperty(property, "small")}
|
|
62
68
|
required={property.validation?.required}
|
|
63
69
|
title={property.name}
|
|
@@ -66,11 +72,11 @@ export function KeyValueFieldBinding({
|
|
|
66
72
|
return (
|
|
67
73
|
<>
|
|
68
74
|
|
|
69
|
-
{!
|
|
70
|
-
|
|
71
|
-
|
|
75
|
+
{!minimalistView && <ExpandablePanel initiallyExpanded={expanded}
|
|
76
|
+
title={title}
|
|
77
|
+
innerClassName={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2"}>{mapFormView}</ExpandablePanel>}
|
|
72
78
|
|
|
73
|
-
{
|
|
79
|
+
{minimalistView && mapFormView}
|
|
74
80
|
|
|
75
81
|
<FieldHelperText includeDescription={includeDescription}
|
|
76
82
|
showError={showError}
|
|
@@ -84,6 +90,7 @@ export function KeyValueFieldBinding({
|
|
|
84
90
|
|
|
85
91
|
interface MapEditViewParams<T extends Record<string, any>> {
|
|
86
92
|
value?: T;
|
|
93
|
+
initialValue?: T;
|
|
87
94
|
setValue: (value: (T | null)) => void;
|
|
88
95
|
fieldName?: string,
|
|
89
96
|
disabled?: boolean
|
|
@@ -91,14 +98,15 @@ interface MapEditViewParams<T extends Record<string, any>> {
|
|
|
91
98
|
|
|
92
99
|
function MapEditView<T extends Record<string, any>>({
|
|
93
100
|
value,
|
|
101
|
+
initialValue,
|
|
94
102
|
setValue,
|
|
95
103
|
fieldName,
|
|
96
104
|
disabled
|
|
97
105
|
}: MapEditViewParams<T>) {
|
|
98
106
|
const [internalState, setInternalState] = React.useState<MapEditViewRowState[]>(
|
|
99
|
-
Object.keys(
|
|
107
|
+
Object.keys(initialValue ?? {}).map((key) => [getRandomId(), {
|
|
100
108
|
key,
|
|
101
|
-
dataType: getDataType(
|
|
109
|
+
dataType: getDataType(initialValue?.[key]) ?? "string"
|
|
102
110
|
}])
|
|
103
111
|
);
|
|
104
112
|
|
|
@@ -121,8 +129,6 @@ function MapEditView<T extends Record<string, any>>({
|
|
|
121
129
|
setInternalState(newRowIds);
|
|
122
130
|
}, [value]);
|
|
123
131
|
|
|
124
|
-
const originalValue = React.useRef<T>(value ?? {} as T);
|
|
125
|
-
|
|
126
132
|
const updateDataType = (rowId: number, dataType: DataType) => {
|
|
127
133
|
if (!rowId) {
|
|
128
134
|
console.warn("No key selected for data type update");
|
|
@@ -168,7 +174,7 @@ function MapEditView<T extends Record<string, any>>({
|
|
|
168
174
|
}
|
|
169
175
|
|
|
170
176
|
const newValue = { ...(value ?? {}) } as T;
|
|
171
|
-
if (typeof
|
|
177
|
+
if (typeof initialValue === "object" && fieldKey in initialValue) {
|
|
172
178
|
// @ts-ignore
|
|
173
179
|
newValue[fieldKey] = undefined; // set to undefined to remove from the object, the datasource will remove it from the backend
|
|
174
180
|
} else {
|
|
@@ -186,7 +192,7 @@ function MapEditView<T extends Record<string, any>>({
|
|
|
186
192
|
value={value ?? {} as T}
|
|
187
193
|
onDeleteClick={() => {
|
|
188
194
|
const newValue = { ...(value ?? {}) as T };
|
|
189
|
-
if (
|
|
195
|
+
if (initialValue && fieldKey in initialValue) {
|
|
190
196
|
// @ts-ignore
|
|
191
197
|
newValue[fieldKey] = undefined;
|
|
192
198
|
} else {
|
|
@@ -316,7 +322,7 @@ function MapKeyValueRow<T extends Record<string, any>>({
|
|
|
316
322
|
}}/>;
|
|
317
323
|
} else if (dataType === "array") {
|
|
318
324
|
return <div
|
|
319
|
-
className={
|
|
325
|
+
className={cls(defaultBorderMixin, "ml-2 pl-2 border-l border-solid")}>
|
|
320
326
|
<ArrayContainer value={entryValue}
|
|
321
327
|
newDefaultEntry={""}
|
|
322
328
|
droppableId={rowId.toString()}
|
|
@@ -330,7 +336,10 @@ function MapKeyValueRow<T extends Record<string, any>>({
|
|
|
330
336
|
[fieldKey]: newValue
|
|
331
337
|
});
|
|
332
338
|
}}
|
|
333
|
-
buildEntry={(
|
|
339
|
+
buildEntry={({
|
|
340
|
+
index,
|
|
341
|
+
internalId
|
|
342
|
+
}) => {
|
|
334
343
|
return <ArrayKeyValueRow
|
|
335
344
|
index={index}
|
|
336
345
|
id={internalId}
|
|
@@ -349,7 +358,7 @@ function MapKeyValueRow<T extends Record<string, any>>({
|
|
|
349
358
|
</div>;
|
|
350
359
|
} else if (dataType === "map") {
|
|
351
360
|
return <div
|
|
352
|
-
className={
|
|
361
|
+
className={cls(defaultBorderMixin, "ml-2 pl-2 border-l border-solid")}>
|
|
353
362
|
<MapEditView value={entryValue}
|
|
354
363
|
fieldName={fieldKey}
|
|
355
364
|
setValue={(updatedValue) => {
|
|
@@ -375,7 +384,7 @@ function MapKeyValueRow<T extends Record<string, any>>({
|
|
|
375
384
|
<Typography key={rowId.toString()}
|
|
376
385
|
component={"div"}
|
|
377
386
|
className="font-mono flex flex-row gap-1">
|
|
378
|
-
<div className="w-[
|
|
387
|
+
<div className="w-[300px] max-w-[30%]">
|
|
379
388
|
<TextField
|
|
380
389
|
value={fieldKey}
|
|
381
390
|
placeholder={"key"}
|
|
@@ -389,32 +398,32 @@ function MapKeyValueRow<T extends Record<string, any>>({
|
|
|
389
398
|
<div className="flex-grow">
|
|
390
399
|
{(dataType !== "map" && dataType !== "array") && buildInput(entryValue, fieldKey, dataType)}
|
|
391
400
|
</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
|
-
</
|
|
401
|
+
<div className={"flex flex-col"}>
|
|
402
|
+
<Menu
|
|
403
|
+
trigger={<IconButton size={"smallest"}>
|
|
404
|
+
<ArrowDropDownIcon size={"small"}/>
|
|
405
|
+
</IconButton>}
|
|
406
|
+
>
|
|
407
|
+
<MenuItem dense
|
|
408
|
+
onClick={() => doUpdateDataType("string")}>string</MenuItem>
|
|
409
|
+
<MenuItem dense
|
|
410
|
+
onClick={() => doUpdateDataType("number")}>number</MenuItem>
|
|
411
|
+
<MenuItem dense
|
|
412
|
+
onClick={() => doUpdateDataType("boolean")}>boolean</MenuItem>
|
|
413
|
+
<MenuItem dense
|
|
414
|
+
onClick={() => doUpdateDataType("date")}>date</MenuItem>
|
|
415
|
+
<MenuItem dense
|
|
416
|
+
onClick={() => doUpdateDataType("map")}>map</MenuItem>
|
|
417
|
+
<MenuItem dense
|
|
418
|
+
onClick={() => doUpdateDataType("array")}>array</MenuItem>
|
|
419
|
+
</Menu>
|
|
420
|
+
|
|
421
|
+
<IconButton aria-label="delete"
|
|
422
|
+
size={"smallest"}
|
|
423
|
+
onClick={onDeleteClick}>
|
|
424
|
+
<RemoveIcon size={"smallest"}/>
|
|
425
|
+
</IconButton>
|
|
426
|
+
</div>
|
|
418
427
|
</Typography>
|
|
419
428
|
|
|
420
429
|
{(dataType === "map" || dataType === "array") && buildInput(entryValue, fieldKey, dataType)}
|
|
@@ -482,7 +491,7 @@ function ArrayKeyValueRow<T>({
|
|
|
482
491
|
Arrays of arrays are not supported.
|
|
483
492
|
</Typography>;
|
|
484
493
|
} else if (dataType === "map") {
|
|
485
|
-
return <div className={
|
|
494
|
+
return <div className={cls(defaultBorderMixin, "ml-2 pl-2 border-l border-solid")}>
|
|
486
495
|
<MapEditView value={entryValue}
|
|
487
496
|
setValue={(updatedValue) => {
|
|
488
497
|
setValue(updatedValue);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { FieldProps, Properties, ResolvedProperties } from "../../types";
|
|
2
|
+
import { FieldProps, MapProperty, Properties, PropertyFieldBindingProps, ResolvedProperties } from "../../types";
|
|
3
3
|
|
|
4
4
|
import { ErrorBoundary } from "../../components";
|
|
5
|
-
import { getIconForProperty, isHidden, pick } from "../../util";
|
|
6
|
-
import { FieldHelperText,
|
|
5
|
+
import { getIconForProperty, isHidden, isReadOnly, pick } from "../../util";
|
|
6
|
+
import { FieldHelperText, LabelWithIconAndTooltip } from "../components";
|
|
7
7
|
import { PropertyFieldBinding } from "../PropertyFieldBinding";
|
|
8
8
|
import { ExpandablePanel, InputLabel, Select, SelectItem } from "@firecms/ui";
|
|
9
9
|
|
|
@@ -21,17 +21,16 @@ export function MapFieldBinding({
|
|
|
21
21
|
error,
|
|
22
22
|
disabled,
|
|
23
23
|
property,
|
|
24
|
-
|
|
25
|
-
partOfBlock,
|
|
26
|
-
tableMode,
|
|
24
|
+
minimalistView,
|
|
27
25
|
includeDescription,
|
|
28
26
|
underlyingValueHasChanged,
|
|
29
27
|
autoFocus,
|
|
30
|
-
context
|
|
28
|
+
context,
|
|
29
|
+
onPropertyChange
|
|
31
30
|
}: FieldProps<Record<string, any>>) {
|
|
32
31
|
|
|
33
32
|
const pickOnlySomeKeys = property.pickOnlySomeKeys || false;
|
|
34
|
-
const expanded =
|
|
33
|
+
const expanded = property.expanded === undefined ? true : property.expanded;
|
|
35
34
|
|
|
36
35
|
if (!property.properties) {
|
|
37
36
|
throw Error(`You need to specify a 'properties' prop (or specify a custom field) in your map property ${propertyKey}`);
|
|
@@ -52,56 +51,74 @@ export function MapFieldBinding({
|
|
|
52
51
|
}
|
|
53
52
|
|
|
54
53
|
const mapFormView = <>
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
54
|
+
<div className="py-1 flex flex-col space-y-2">
|
|
55
|
+
{Object.entries(mapProperties)
|
|
56
|
+
.filter(([_, property]) => !isHidden(property))
|
|
57
|
+
.map(([entryKey, childProperty], index) => {
|
|
58
|
+
const thisDisabled = isReadOnly(childProperty) || Boolean(childProperty.disabled);
|
|
59
|
+
const fieldBindingProps: PropertyFieldBindingProps<any> = {
|
|
60
|
+
propertyKey: `${propertyKey}.${entryKey}`,
|
|
61
|
+
disabled: disabled || thisDisabled,
|
|
62
|
+
property: childProperty,
|
|
63
|
+
includeDescription,
|
|
64
|
+
underlyingValueHasChanged,
|
|
65
|
+
context,
|
|
66
|
+
partOfArray: false,
|
|
67
|
+
minimalistView: false,
|
|
68
|
+
autoFocus: autoFocus && index === 0,
|
|
69
|
+
onPropertyChange: function (updatedProperty) {
|
|
70
|
+
onPropertyChange?.({
|
|
71
|
+
properties: {
|
|
72
|
+
[entryKey]: updatedProperty
|
|
73
|
+
}
|
|
74
|
+
} as Partial<MapProperty>);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
return (
|
|
79
|
+
<div key={`map-${propertyKey}-${index}`}>
|
|
80
|
+
<ErrorBoundary>
|
|
81
|
+
<PropertyFieldBinding
|
|
82
|
+
{...fieldBindingProps}/>
|
|
83
|
+
</ErrorBoundary>
|
|
84
|
+
</div>
|
|
85
|
+
)
|
|
86
|
+
;
|
|
87
|
+
}
|
|
88
|
+
)
|
|
89
|
+
}
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
{/*{pickOnlySomeKeys && buildPickKeysSelect(disabled, property.properties, setValue, value)}*/}
|
|
93
|
+
|
|
94
|
+
</>
|
|
95
|
+
;
|
|
86
96
|
|
|
87
97
|
const title = (
|
|
88
|
-
<
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
98
|
+
<LabelWithIconAndTooltip
|
|
99
|
+
propertyKey={propertyKey}
|
|
100
|
+
icon={getIconForProperty(property, "small")}
|
|
101
|
+
required={property.validation?.required}
|
|
102
|
+
title={property.name}
|
|
103
|
+
className={"text-text-secondary dark:text-text-secondary-dark"}/>
|
|
92
104
|
);
|
|
93
105
|
|
|
94
106
|
return (
|
|
95
107
|
<ErrorBoundary>
|
|
96
108
|
|
|
97
|
-
{!
|
|
98
|
-
|
|
99
|
-
|
|
109
|
+
{!minimalistView && <ExpandablePanel initiallyExpanded={expanded}
|
|
110
|
+
onExpandedChange={(expanded) => {
|
|
111
|
+
onPropertyChange?.({
|
|
112
|
+
expanded
|
|
113
|
+
});
|
|
114
|
+
}}
|
|
115
|
+
innerClassName={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2 bg-white dark:bg-gray-900"}
|
|
116
|
+
title={title}>{mapFormView}</ExpandablePanel>}
|
|
100
117
|
|
|
101
|
-
{
|
|
118
|
+
{minimalistView && mapFormView}
|
|
102
119
|
|
|
103
120
|
<FieldHelperText includeDescription={includeDescription}
|
|
104
|
-
showError={showError}
|
|
121
|
+
showError={showError ?? false}
|
|
105
122
|
error={error ? (typeof error === "string" ? error : "A property of this map has an error") : undefined}
|
|
106
123
|
disabled={disabled}
|
|
107
124
|
property={property}/>
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import React, { useCallback, useEffect, useRef, useState } from "react";
|
|
2
|
+
import {
|
|
3
|
+
FieldHelperText,
|
|
4
|
+
FieldProps,
|
|
5
|
+
getIconForProperty,
|
|
6
|
+
LabelWithIconAndTooltip, PropertyOrBuilder,
|
|
7
|
+
randomString,
|
|
8
|
+
ResolvedArrayProperty,
|
|
9
|
+
ResolvedStringProperty,
|
|
10
|
+
useStorageSource
|
|
11
|
+
} from "../../index";
|
|
12
|
+
import { cls, fieldBackgroundHoverMixin, fieldBackgroundMixin } from "@firecms/ui";
|
|
13
|
+
import { FireCMSEditor, FireCMSEditorProps } from "@firecms/editor";
|
|
14
|
+
import { resolveProperty, resolveStorageFilenameString, resolveStoragePathString } from "../../util";
|
|
15
|
+
|
|
16
|
+
interface MarkdownEditorFieldProps {
|
|
17
|
+
highlight?: { from: number, to: number };
|
|
18
|
+
editorProps?: Partial<FireCMSEditorProps>
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function MarkdownEditorFieldBinding({
|
|
22
|
+
property,
|
|
23
|
+
propertyKey,
|
|
24
|
+
value,
|
|
25
|
+
setValue,
|
|
26
|
+
includeDescription,
|
|
27
|
+
showError,
|
|
28
|
+
error,
|
|
29
|
+
minimalistView,
|
|
30
|
+
isSubmitting,
|
|
31
|
+
context,
|
|
32
|
+
customProps,
|
|
33
|
+
}: FieldProps<string, MarkdownEditorFieldProps>) {
|
|
34
|
+
|
|
35
|
+
const highlight = customProps?.highlight;
|
|
36
|
+
const editorProps = customProps?.editorProps;
|
|
37
|
+
const storageSource = useStorageSource();
|
|
38
|
+
const storage = property.storage;
|
|
39
|
+
|
|
40
|
+
const entityValues = context.values;
|
|
41
|
+
const entityId = context.entityId;
|
|
42
|
+
const path = context.path;
|
|
43
|
+
|
|
44
|
+
// const fieldVersion = useRef(0);
|
|
45
|
+
const [fieldVersion, setFieldVersion] = useState(0);
|
|
46
|
+
const internalValue = useRef(value);
|
|
47
|
+
|
|
48
|
+
const onContentChange = useCallback((content: string) => {
|
|
49
|
+
internalValue.current = content;
|
|
50
|
+
setValue(content);
|
|
51
|
+
}, [setValue]);
|
|
52
|
+
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
if (internalValue.current !== value) {
|
|
55
|
+
internalValue.current = value;
|
|
56
|
+
setFieldVersion(fieldVersion + 1);
|
|
57
|
+
// fieldVersion.current = fieldVersion.current + 1;
|
|
58
|
+
}
|
|
59
|
+
}, [value]);
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
const resolvedProperty = resolveProperty({
|
|
63
|
+
propertyOrBuilder: property as PropertyOrBuilder,
|
|
64
|
+
values: entityValues
|
|
65
|
+
}) as ResolvedStringProperty | ResolvedArrayProperty<string[]>;
|
|
66
|
+
|
|
67
|
+
const fileNameBuilder = useCallback(async (file: File) => {
|
|
68
|
+
if (storage?.fileName) {
|
|
69
|
+
const fileName = await resolveStorageFilenameString({
|
|
70
|
+
input: storage.fileName,
|
|
71
|
+
storage,
|
|
72
|
+
values: entityValues,
|
|
73
|
+
entityId,
|
|
74
|
+
path,
|
|
75
|
+
property: resolvedProperty,
|
|
76
|
+
file,
|
|
77
|
+
propertyKey
|
|
78
|
+
});
|
|
79
|
+
if (!fileName || fileName.length === 0) {
|
|
80
|
+
throw Error("You need to return a valid filename");
|
|
81
|
+
}
|
|
82
|
+
return fileName;
|
|
83
|
+
}
|
|
84
|
+
return randomString() + "_" + file.name;
|
|
85
|
+
}, [entityId, entityValues, path, resolvedProperty, propertyKey, storage]);
|
|
86
|
+
|
|
87
|
+
const storagePathBuilder = useCallback((file: File) => {
|
|
88
|
+
if (!storage) return "/";
|
|
89
|
+
const resolvedProperty = resolveProperty({
|
|
90
|
+
propertyOrBuilder: property,
|
|
91
|
+
values: entityValues
|
|
92
|
+
}) as ResolvedStringProperty | ResolvedArrayProperty<string[]>;
|
|
93
|
+
return resolveStoragePathString({
|
|
94
|
+
input: storage.storagePath,
|
|
95
|
+
storage,
|
|
96
|
+
values: entityValues,
|
|
97
|
+
entityId,
|
|
98
|
+
path,
|
|
99
|
+
property: resolvedProperty,
|
|
100
|
+
file,
|
|
101
|
+
propertyKey
|
|
102
|
+
}) ?? "/";
|
|
103
|
+
}, [entityId, entityValues, path, property, propertyKey, storage]);
|
|
104
|
+
|
|
105
|
+
const editor = <FireCMSEditor
|
|
106
|
+
content={value}
|
|
107
|
+
onMarkdownContentChange={onContentChange}
|
|
108
|
+
version={context.formex.version + fieldVersion}
|
|
109
|
+
highlight={highlight}
|
|
110
|
+
handleImageUpload={async (file: File) => {
|
|
111
|
+
const storagePath = storagePathBuilder(file);
|
|
112
|
+
const fileName = await fileNameBuilder(file);
|
|
113
|
+
const result = await storageSource.uploadFile({
|
|
114
|
+
file,
|
|
115
|
+
fileName,
|
|
116
|
+
path: storagePath,
|
|
117
|
+
});
|
|
118
|
+
const downloadConfig = await storageSource.getDownloadURL(result.path);
|
|
119
|
+
const url = downloadConfig.url;
|
|
120
|
+
if (!url) {
|
|
121
|
+
throw new Error("Error uploading image");
|
|
122
|
+
}
|
|
123
|
+
return url;
|
|
124
|
+
}}
|
|
125
|
+
{...editorProps}
|
|
126
|
+
/>;
|
|
127
|
+
|
|
128
|
+
if (minimalistView)
|
|
129
|
+
return editor;
|
|
130
|
+
|
|
131
|
+
return (
|
|
132
|
+
<>
|
|
133
|
+
<LabelWithIconAndTooltip
|
|
134
|
+
propertyKey={propertyKey}
|
|
135
|
+
icon={getIconForProperty(property, "small")}
|
|
136
|
+
required={property.validation?.required}
|
|
137
|
+
title={property.name}
|
|
138
|
+
className={"text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>
|
|
139
|
+
<div className={cls("rounded-md", fieldBackgroundMixin, fieldBackgroundHoverMixin)}>
|
|
140
|
+
{editor}
|
|
141
|
+
</div>
|
|
142
|
+
<FieldHelperText includeDescription={includeDescription}
|
|
143
|
+
showError={showError}
|
|
144
|
+
error={error}
|
|
145
|
+
property={property}/>
|
|
146
|
+
</>
|
|
147
|
+
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useCallback } from "react";
|
|
2
2
|
|
|
3
3
|
import { EnumType, FieldProps, ResolvedProperty } from "../../types";
|
|
4
|
-
import { FieldHelperText,
|
|
4
|
+
import { FieldHelperText, LabelWithIconAndTooltip } from "../components";
|
|
5
5
|
import { EnumValuesChip } from "../../preview";
|
|
6
6
|
import { enumToObjectEntries, getIconForProperty, getLabelOrConfigFrom } from "../../util";
|
|
7
7
|
import { CloseIcon, MultiSelect, MultiSelectItem } from "@firecms/ui";
|
|
@@ -14,17 +14,18 @@ import { useClearRestoreValue } from "../useClearRestoreValue";
|
|
|
14
14
|
* and tables to the specified properties.
|
|
15
15
|
* @group Form fields
|
|
16
16
|
*/
|
|
17
|
-
export function
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
17
|
+
export function MultiSelectFieldBinding({
|
|
18
|
+
propertyKey,
|
|
19
|
+
value,
|
|
20
|
+
setValue,
|
|
21
|
+
error,
|
|
22
|
+
showError,
|
|
23
|
+
disabled,
|
|
24
|
+
property,
|
|
25
|
+
includeDescription,
|
|
26
|
+
size = "medium",
|
|
27
|
+
autoFocus
|
|
28
|
+
}: FieldProps<EnumType[], any, any>) {
|
|
28
29
|
|
|
29
30
|
const of: ResolvedProperty<any> | ResolvedProperty<any>[] = property.of;
|
|
30
31
|
if (!of) {
|
|
@@ -79,16 +80,20 @@ export function MultiSelectBinding({
|
|
|
79
80
|
}, [enumValues, setValue, value]);
|
|
80
81
|
|
|
81
82
|
return (
|
|
82
|
-
|
|
83
|
+
<>
|
|
83
84
|
<MultiSelect
|
|
85
|
+
className={"w-full mt-2"}
|
|
86
|
+
size={size === "medium" ? "medium" : "small"}
|
|
84
87
|
value={validValue ? value.map((v) => v.toString()) : []}
|
|
85
88
|
disabled={disabled}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
modalPopover={true}
|
|
90
|
+
label={<LabelWithIconAndTooltip
|
|
91
|
+
propertyKey={propertyKey}
|
|
92
|
+
icon={getIconForProperty(property, "small")}
|
|
93
|
+
required={property.validation?.required}
|
|
94
|
+
title={property.name}
|
|
95
|
+
className={"text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>}
|
|
96
|
+
onValueChange={(updatedValue: string[]) => {
|
|
92
97
|
let newValue: EnumType[] | null;
|
|
93
98
|
if (of && (of as ResolvedProperty)?.dataType === "number") {
|
|
94
99
|
newValue = updatedValue ? (updatedValue as string[]).map((e) => parseFloat(e)) : [];
|
|
@@ -109,6 +114,6 @@ export function MultiSelectBinding({
|
|
|
109
114
|
disabled={disabled}
|
|
110
115
|
property={property}/>
|
|
111
116
|
|
|
112
|
-
|
|
117
|
+
</>
|
|
113
118
|
);
|
|
114
119
|
}
|