@firecms/core 3.0.0-canary.98 → 3.0.0-rc.1
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/Drawer.d.ts +0 -1
- package/dist/app/Scaffold.d.ts +4 -0
- package/dist/components/ArrayContainer.d.ts +31 -12
- package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +3 -1
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +17 -3
- package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +1 -1
- package/dist/components/EntityCollectionTable/index.d.ts +1 -1
- package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +6 -3
- package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +8 -0
- package/dist/components/EntityCollectionView/utils.d.ts +3 -0
- package/dist/components/EntityJsonPreview.d.ts +3 -0
- package/dist/components/EntityPreview.d.ts +8 -6
- package/dist/components/HomePage/DefaultHomePage.d.ts +2 -15
- package/dist/components/HomePage/HomePageDnD.d.ts +76 -0
- package/dist/components/HomePage/NavigationCard.d.ts +3 -1
- package/dist/components/HomePage/NavigationCardBinding.d.ts +3 -2
- package/dist/components/HomePage/NavigationGroup.d.ts +8 -1
- package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
- package/dist/components/PropertyConfigBadge.d.ts +2 -1
- package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
- package/dist/components/SelectableTable/SelectableTable.d.ts +13 -3
- package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +1 -1
- package/dist/components/UnsavedChangesDialog.d.ts +8 -0
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +11 -2
- package/dist/components/common/default_entity_actions.d.ts +0 -2
- package/dist/components/common/index.d.ts +1 -1
- package/dist/components/common/useColumnsIds.d.ts +1 -0
- package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +10 -2
- package/dist/components/common/useDebouncedCallback.d.ts +1 -0
- package/dist/components/common/useScrollRestoration.d.ts +14 -0
- package/dist/components/index.d.ts +3 -1
- package/dist/contexts/BreacrumbsContext.d.ts +8 -0
- package/dist/core/DefaultAppBar.d.ts +8 -2
- package/dist/core/DrawerNavigationItem.d.ts +2 -1
- package/dist/core/EntityEditView.d.ts +40 -22
- package/dist/core/EntityEditViewFormActions.d.ts +2 -0
- package/dist/core/FireCMS.d.ts +2 -2
- package/dist/core/FireCMSRouter.d.ts +4 -0
- package/dist/core/NavigationRoutes.d.ts +0 -1
- package/dist/core/SideDialogs.d.ts +4 -2
- package/dist/core/field_configs.d.ts +1 -1
- package/dist/core/index.d.ts +2 -1
- package/dist/form/EntityForm.d.ts +50 -0
- package/dist/form/EntityFormActions.d.ts +21 -0
- package/dist/form/PropertyFieldBinding.d.ts +1 -1
- package/dist/form/components/FormEntry.d.ts +6 -0
- package/dist/form/components/FormLayout.d.ts +5 -0
- package/dist/form/components/LabelWithIcon.d.ts +1 -1
- package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
- package/dist/form/components/index.d.ts +3 -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/ReferenceAsStringFieldBinding.d.ts +9 -0
- 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 +4 -10
- package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
- package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
- package/dist/form/index.d.ts +17 -16
- package/dist/form/useClearRestoreValue.d.ts +2 -2
- package/dist/hooks/data/delete.d.ts +4 -4
- package/dist/hooks/data/save.d.ts +3 -3
- package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
- package/dist/hooks/data/useEntityFetch.d.ts +4 -3
- package/dist/hooks/useAuthController.d.ts +1 -1
- package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
- package/dist/hooks/useBuildNavigationController.d.ts +57 -12
- package/dist/hooks/useFireCMSContext.d.ts +1 -1
- package/dist/hooks/useModeController.d.ts +1 -2
- package/dist/hooks/useProjectLog.d.ts +7 -1
- package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
- package/dist/hooks/useValidateAuthenticator.d.ts +3 -3
- package/dist/index.es.js +20108 -14471
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +20039 -14407
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +3 -2
- package/dist/internal/useBuildSideEntityController.d.ts +3 -3
- package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
- package/dist/preview/PropertyPreviewProps.d.ts +1 -1
- package/dist/preview/components/EnumValuesChip.d.ts +1 -1
- package/dist/preview/components/ReferencePreview.d.ts +2 -2
- package/dist/preview/util.d.ts +3 -3
- package/dist/routes/CustomCMSRoute.d.ts +4 -0
- package/dist/routes/FireCMSRoute.d.ts +1 -0
- package/dist/routes/HomePageRoute.d.ts +3 -0
- package/dist/types/analytics.d.ts +1 -1
- package/dist/types/auth.d.ts +7 -9
- package/dist/types/collections.d.ts +86 -25
- package/dist/types/customization_controller.d.ts +8 -0
- package/dist/types/datasource.d.ts +19 -17
- package/dist/types/dialogs_controller.d.ts +7 -3
- package/dist/types/entities.d.ts +2 -1
- package/dist/types/entity_actions.d.ts +58 -8
- package/dist/types/entity_callbacks.d.ts +16 -16
- package/dist/types/entity_overrides.d.ts +2 -2
- package/dist/types/export_import.d.ts +4 -4
- package/dist/types/fields.d.ts +43 -17
- package/dist/types/firecms.d.ts +16 -3
- package/dist/types/firecms_context.d.ts +1 -1
- package/dist/types/navigation.d.ts +60 -17
- package/dist/types/permissions.d.ts +4 -4
- package/dist/types/plugins.d.ts +42 -9
- package/dist/types/properties.d.ts +65 -22
- package/dist/types/property_config.d.ts +1 -3
- package/dist/types/roles.d.ts +3 -0
- package/dist/types/side_dialogs_controller.d.ts +10 -0
- package/dist/types/side_entity_controller.d.ts +14 -1
- package/dist/types/storage.d.ts +75 -0
- package/dist/types/user.d.ts +1 -0
- package/dist/util/builders.d.ts +3 -3
- package/dist/util/callbacks.d.ts +2 -0
- package/dist/util/createFormexStub.d.ts +2 -0
- package/dist/util/entities.d.ts +2 -2
- package/dist/util/entity_actions.d.ts +2 -0
- package/dist/util/entity_cache.d.ts +23 -0
- package/dist/util/icon_synonyms.d.ts +0 -1
- package/dist/util/icons.d.ts +5 -2
- package/dist/util/index.d.ts +3 -0
- package/dist/util/navigation_from_path.d.ts +10 -1
- package/dist/util/navigation_utils.d.ts +13 -1
- package/dist/util/objects.d.ts +2 -1
- package/dist/util/permissions.d.ts +4 -4
- package/dist/util/property_utils.d.ts +4 -4
- package/dist/util/references.d.ts +2 -2
- package/dist/util/resolutions.d.ts +30 -6
- package/dist/util/storage.d.ts +1 -1
- package/dist/util/useStorageUploadController.d.ts +2 -2
- package/package.json +133 -125
- package/src/app/Drawer.tsx +0 -1
- package/src/app/Scaffold.tsx +33 -29
- package/src/components/ArrayContainer.tsx +447 -229
- package/src/components/CircularProgressCenter.tsx +1 -1
- package/src/components/ClearFilterSortButton.tsx +1 -1
- package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +12 -11
- package/src/components/DeleteEntityDialog.tsx +13 -20
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +59 -25
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +23 -17
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +20 -3
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +35 -9
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +21 -16
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +6 -12
- package/src/components/EntityCollectionTable/index.tsx +1 -1
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +6 -6
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +35 -26
- package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +132 -101
- package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +178 -85
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +7 -4
- package/src/components/EntityCollectionView/useSelectionController.tsx +5 -4
- package/src/components/EntityCollectionView/utils.ts +19 -0
- package/src/components/EntityJsonPreview.tsx +66 -0
- package/src/components/EntityPreview.tsx +75 -57
- package/src/components/EntityView.tsx +8 -5
- package/src/components/ErrorView.tsx +3 -3
- package/src/components/FireCMSLogo.tsx +7 -51
- package/src/components/HomePage/DefaultHomePage.tsx +522 -160
- package/src/components/HomePage/FavouritesView.tsx +9 -14
- package/src/components/HomePage/HomePageDnD.tsx +642 -0
- package/src/components/HomePage/NavigationCard.tsx +47 -38
- package/src/components/HomePage/NavigationCardBinding.tsx +16 -15
- package/src/components/HomePage/NavigationGroup.tsx +144 -30
- package/src/components/HomePage/RenameGroupDialog.tsx +117 -0
- package/src/components/HomePage/SmallNavigationCard.tsx +1 -2
- package/src/components/NotFoundPage.tsx +2 -2
- package/src/components/PropertyConfigBadge.tsx +9 -3
- package/src/components/PropertyIdCopyTooltip.tsx +47 -0
- package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +22 -13
- package/src/components/SearchIconsView.tsx +2 -2
- package/src/components/SelectableTable/SelectableTable.tsx +154 -142
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +4 -2
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +10 -8
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +59 -10
- package/src/components/UnsavedChangesDialog.tsx +46 -0
- package/src/components/VirtualTable/VirtualTable.tsx +65 -44
- package/src/components/VirtualTable/VirtualTableCell.tsx +0 -8
- package/src/components/VirtualTable/VirtualTableHeader.tsx +8 -8
- package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +1 -1
- package/src/components/VirtualTable/VirtualTableProps.tsx +12 -2
- package/src/components/VirtualTable/VirtualTableRow.tsx +1 -1
- package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
- package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -2
- package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
- package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
- package/src/components/common/default_entity_actions.tsx +62 -42
- package/src/components/common/index.ts +1 -1
- package/src/components/common/useColumnsIds.tsx +1 -1
- package/src/components/common/useDataSourceTableController.tsx +420 -0
- package/src/components/common/useDebouncedCallback.tsx +20 -0
- package/src/components/common/useScrollRestoration.tsx +68 -0
- package/src/components/common/useTableSearchHelper.ts +1 -0
- package/src/components/index.tsx +4 -1
- package/src/contexts/BreacrumbsContext.tsx +38 -0
- package/src/contexts/DialogsProvider.tsx +3 -2
- package/src/contexts/ModeController.tsx +1 -3
- package/src/contexts/SnackbarProvider.tsx +2 -0
- package/src/core/DefaultAppBar.tsx +124 -85
- package/src/core/DefaultDrawer.tsx +30 -22
- package/src/core/DrawerNavigationItem.tsx +32 -28
- package/src/core/EntityEditView.tsx +388 -995
- package/src/core/EntityEditViewFormActions.tsx +329 -0
- package/src/core/EntitySidePanel.tsx +88 -20
- package/src/core/FireCMS.tsx +46 -25
- package/src/core/FireCMSRouter.tsx +17 -0
- package/src/core/NavigationRoutes.tsx +23 -32
- package/src/core/SideDialogs.tsx +22 -12
- package/src/core/field_configs.tsx +24 -10
- package/src/core/index.tsx +4 -2
- package/src/form/EntityForm.tsx +814 -0
- package/src/form/EntityFormActions.tsx +211 -0
- package/src/form/PropertyFieldBinding.tsx +55 -41
- package/src/form/components/CustomIdField.tsx +9 -3
- package/src/form/components/FieldHelperText.tsx +1 -1
- package/src/form/components/FormEntry.tsx +22 -0
- package/src/form/components/FormLayout.tsx +16 -0
- package/src/form/components/LabelWithIcon.tsx +30 -19
- package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
- package/src/form/components/StorageItemPreview.tsx +5 -4
- package/src/form/components/StorageUploadProgress.tsx +2 -3
- package/src/form/components/index.tsx +3 -1
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +30 -18
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +47 -36
- package/src/form/field_bindings/BlockFieldBinding.tsx +55 -33
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +19 -15
- package/src/form/field_bindings/MapFieldBinding.tsx +72 -62
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +159 -0
- package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +10 -8
- package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +28 -19
- package/src/form/field_bindings/RepeatFieldBinding.tsx +56 -32
- package/src/form/field_bindings/SelectFieldBinding.tsx +22 -13
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +247 -168
- package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
- package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
- package/src/form/index.tsx +17 -37
- package/src/form/useClearRestoreValue.tsx +2 -2
- package/src/form/validation.ts +12 -6
- package/src/hooks/data/delete.ts +6 -5
- package/src/hooks/data/save.ts +26 -35
- package/src/hooks/data/useCollectionFetch.tsx +3 -3
- package/src/hooks/data/useDataSource.tsx +10 -2
- package/src/hooks/data/useEntityFetch.tsx +10 -6
- package/src/hooks/useAuthController.tsx +1 -1
- package/src/hooks/useBreadcrumbsController.tsx +31 -0
- package/src/hooks/useBrowserTitleAndIcon.tsx +1 -1
- package/src/hooks/useBuildModeController.tsx +15 -28
- package/src/hooks/useBuildNavigationController.tsx +386 -124
- package/src/hooks/useFireCMSContext.tsx +3 -33
- package/src/hooks/useLargeLayout.tsx +0 -35
- package/src/hooks/useModeController.tsx +1 -2
- package/src/hooks/useProjectLog.tsx +16 -5
- package/src/hooks/useResolvedNavigationFrom.tsx +9 -11
- package/src/hooks/useValidateAuthenticator.tsx +3 -3
- package/src/internal/useBuildDataSource.ts +67 -80
- package/src/internal/useBuildSideDialogsController.tsx +4 -2
- package/src/internal/useBuildSideEntityController.tsx +149 -86
- package/src/internal/useUnsavedChangesDialog.tsx +127 -91
- package/src/preview/PropertyPreview.tsx +28 -12
- package/src/preview/PropertyPreviewProps.tsx +1 -1
- package/src/preview/components/BooleanPreview.tsx +1 -1
- package/src/preview/components/EmptyValue.tsx +1 -1
- package/src/preview/components/EnumValuesChip.tsx +1 -1
- package/src/preview/components/ImagePreview.tsx +10 -9
- package/src/preview/components/ReferencePreview.tsx +6 -16
- package/src/preview/components/UrlComponentPreview.tsx +20 -21
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -5
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +5 -4
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -3
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -3
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +6 -4
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +5 -3
- package/src/preview/property_previews/MapPropertyPreview.tsx +7 -6
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
- package/src/preview/property_previews/StringPropertyPreview.tsx +2 -2
- package/src/preview/util.ts +10 -10
- package/src/routes/CustomCMSRoute.tsx +21 -0
- package/src/routes/FireCMSRoute.tsx +246 -0
- package/src/routes/HomePageRoute.tsx +17 -0
- package/src/types/analytics.ts +3 -0
- package/src/types/auth.tsx +8 -12
- package/src/types/collections.ts +101 -28
- package/src/types/customization_controller.tsx +9 -0
- package/src/types/datasource.ts +21 -20
- package/src/types/dialogs_controller.tsx +7 -3
- package/src/types/entities.ts +3 -1
- package/src/types/entity_actions.tsx +71 -8
- package/src/types/entity_callbacks.ts +18 -18
- package/src/types/entity_overrides.tsx +2 -2
- package/src/types/export_import.ts +4 -4
- package/src/types/fields.tsx +52 -19
- package/src/types/firecms.tsx +18 -4
- package/src/types/firecms_context.tsx +1 -1
- package/src/types/navigation.ts +76 -22
- package/src/types/permissions.ts +5 -5
- package/src/types/plugins.tsx +50 -9
- package/src/types/properties.ts +74 -22
- package/src/types/property_config.tsx +1 -2
- package/src/types/roles.ts +3 -0
- package/src/types/side_dialogs_controller.tsx +15 -0
- package/src/types/side_entity_controller.tsx +16 -1
- package/src/types/storage.ts +82 -0
- package/src/types/user.ts +2 -0
- package/src/util/builders.ts +10 -8
- package/src/util/callbacks.ts +119 -0
- package/src/util/createFormexStub.tsx +62 -0
- package/src/util/entities.ts +5 -3
- package/src/util/entity_actions.ts +28 -0
- package/src/util/entity_cache.ts +204 -0
- package/src/util/icon_list.ts +1 -1
- package/src/util/icon_synonyms.ts +0 -1
- package/src/util/icons.tsx +36 -11
- package/src/util/index.ts +3 -0
- package/src/util/join_collections.ts +9 -2
- package/src/util/make_properties_editable.ts +13 -5
- package/src/util/navigation_from_path.ts +33 -12
- package/src/util/navigation_utils.ts +135 -19
- package/src/util/objects.ts +74 -14
- package/src/util/parent_references_from_path.ts +3 -3
- package/src/util/permissions.ts +8 -8
- package/src/util/property_utils.tsx +17 -6
- package/src/util/references.ts +19 -8
- package/src/util/resolutions.ts +93 -24
- package/src/util/storage.ts +6 -2
- package/src/util/useStorageUploadController.tsx +74 -29
- package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
- package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
- package/dist/form/PropertiesForm.d.ts +0 -8
- package/dist/form/components/FormikArrayContainer.d.ts +0 -18
- package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
- package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
- package/src/components/PropertyIdCopyTooltipContent.tsx +0 -27
- package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -236
- package/src/form/PropertiesForm.tsx +0 -81
- package/src/form/components/FormikArrayContainer.tsx +0 -44
- package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
- /package/src/util/{common.tsx → common.ts} +0 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import {
|
|
3
|
+
Entity,
|
|
4
|
+
EntityAction,
|
|
5
|
+
FireCMSContext,
|
|
6
|
+
FormContext,
|
|
7
|
+
ResolvedEntityCollection,
|
|
8
|
+
SideEntityController
|
|
9
|
+
} from "../types";
|
|
10
|
+
import { Button, cls, defaultBorderMixin, DialogActions, IconButton, LoadingButton, Typography } from "@firecms/ui";
|
|
11
|
+
import { FormexController } from "@firecms/formex";
|
|
12
|
+
import { useFireCMSContext, useSideEntityController } from "../hooks";
|
|
13
|
+
|
|
14
|
+
export interface EntityFormActionsProps {
|
|
15
|
+
fullPath: string;
|
|
16
|
+
fullIdPath?: string;
|
|
17
|
+
collection: ResolvedEntityCollection;
|
|
18
|
+
path: string;
|
|
19
|
+
entity?: Entity;
|
|
20
|
+
layout: "bottom" | "side";
|
|
21
|
+
savingError?: Error;
|
|
22
|
+
formex: FormexController<any>;
|
|
23
|
+
disabled: boolean;
|
|
24
|
+
status: "new" | "existing" | "copy";
|
|
25
|
+
pluginActions: React.ReactNode[];
|
|
26
|
+
openEntityMode: "side_panel" | "full_screen";
|
|
27
|
+
showDefaultActions?: boolean;
|
|
28
|
+
navigateBack: () => void;
|
|
29
|
+
formContext: FormContext
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function EntityFormActions({
|
|
33
|
+
fullPath,
|
|
34
|
+
fullIdPath,
|
|
35
|
+
collection,
|
|
36
|
+
entity,
|
|
37
|
+
layout,
|
|
38
|
+
savingError,
|
|
39
|
+
formex,
|
|
40
|
+
disabled,
|
|
41
|
+
status,
|
|
42
|
+
pluginActions,
|
|
43
|
+
openEntityMode,
|
|
44
|
+
navigateBack,
|
|
45
|
+
formContext
|
|
46
|
+
}: EntityFormActionsProps) {
|
|
47
|
+
|
|
48
|
+
const context = useFireCMSContext();
|
|
49
|
+
const sideEntityController = useSideEntityController();
|
|
50
|
+
|
|
51
|
+
return layout === "bottom"
|
|
52
|
+
? buildBottomActions({
|
|
53
|
+
fullPath,
|
|
54
|
+
fullIdPath,
|
|
55
|
+
savingError,
|
|
56
|
+
entity,
|
|
57
|
+
collection,
|
|
58
|
+
context,
|
|
59
|
+
sideEntityController,
|
|
60
|
+
isSubmitting: formex.isSubmitting,
|
|
61
|
+
disabled,
|
|
62
|
+
status,
|
|
63
|
+
pluginActions,
|
|
64
|
+
openEntityMode,
|
|
65
|
+
navigateBack,
|
|
66
|
+
formContext
|
|
67
|
+
})
|
|
68
|
+
: buildSideActions({
|
|
69
|
+
fullPath,
|
|
70
|
+
fullIdPath,
|
|
71
|
+
savingError,
|
|
72
|
+
entity,
|
|
73
|
+
collection,
|
|
74
|
+
context,
|
|
75
|
+
sideEntityController,
|
|
76
|
+
isSubmitting: formex.isSubmitting,
|
|
77
|
+
disabled,
|
|
78
|
+
status,
|
|
79
|
+
pluginActions,
|
|
80
|
+
openEntityMode,
|
|
81
|
+
navigateBack,
|
|
82
|
+
formContext
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
type ActionsViewProps<M extends object> = {
|
|
87
|
+
fullPath: string,
|
|
88
|
+
fullIdPath?: string,
|
|
89
|
+
savingError: Error | undefined,
|
|
90
|
+
entity: Entity<M> | undefined,
|
|
91
|
+
formActions?: EntityAction[],
|
|
92
|
+
collection: ResolvedEntityCollection,
|
|
93
|
+
context: FireCMSContext,
|
|
94
|
+
sideEntityController: SideEntityController,
|
|
95
|
+
isSubmitting: boolean,
|
|
96
|
+
disabled: boolean,
|
|
97
|
+
status: "new" | "existing" | "copy",
|
|
98
|
+
pluginActions?: React.ReactNode[],
|
|
99
|
+
openEntityMode: "side_panel" | "full_screen";
|
|
100
|
+
navigateBack: () => void;
|
|
101
|
+
formContext: FormContext
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
function buildBottomActions<M extends object>({
|
|
105
|
+
savingError,
|
|
106
|
+
entity,
|
|
107
|
+
fullPath,
|
|
108
|
+
fullIdPath,
|
|
109
|
+
formActions,
|
|
110
|
+
collection,
|
|
111
|
+
context,
|
|
112
|
+
sideEntityController,
|
|
113
|
+
isSubmitting,
|
|
114
|
+
disabled,
|
|
115
|
+
status,
|
|
116
|
+
pluginActions,
|
|
117
|
+
openEntityMode,
|
|
118
|
+
navigateBack,
|
|
119
|
+
formContext
|
|
120
|
+
}: ActionsViewProps<M>) {
|
|
121
|
+
|
|
122
|
+
return <DialogActions position={"absolute"}>
|
|
123
|
+
{savingError &&
|
|
124
|
+
<div className="text-right">
|
|
125
|
+
<Typography color={"error"}>{savingError.message}</Typography>
|
|
126
|
+
</div>
|
|
127
|
+
}
|
|
128
|
+
{entity && (formActions ?? []).length > 0 && <div className="flex-grow flex overflow-auto no-scrollbar">
|
|
129
|
+
{(formActions ?? []).map(action => (
|
|
130
|
+
<IconButton
|
|
131
|
+
key={action.name}
|
|
132
|
+
color="primary"
|
|
133
|
+
onClick={(event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
|
|
134
|
+
event.stopPropagation();
|
|
135
|
+
if (entity)
|
|
136
|
+
action.onClick({
|
|
137
|
+
view: "form",
|
|
138
|
+
entity,
|
|
139
|
+
fullPath: fullPath ?? collection.path,
|
|
140
|
+
fullIdPath: fullIdPath ?? collection.id,
|
|
141
|
+
collection: collection,
|
|
142
|
+
context,
|
|
143
|
+
sideEntityController,
|
|
144
|
+
openEntityMode: openEntityMode,
|
|
145
|
+
navigateBack,
|
|
146
|
+
formContext
|
|
147
|
+
});
|
|
148
|
+
}}>
|
|
149
|
+
{action.icon}
|
|
150
|
+
</IconButton>
|
|
151
|
+
))}
|
|
152
|
+
</div>}
|
|
153
|
+
{pluginActions}
|
|
154
|
+
<Button variant="text" disabled={disabled || isSubmitting}
|
|
155
|
+
color={"primary"}
|
|
156
|
+
type="reset">
|
|
157
|
+
{status === "existing" ? "Discard" : "Clear"}
|
|
158
|
+
</Button>
|
|
159
|
+
<Button variant={"filled"}
|
|
160
|
+
color="primary"
|
|
161
|
+
type="submit"
|
|
162
|
+
disabled={disabled || isSubmitting}>
|
|
163
|
+
{status === "existing" && "Save"}
|
|
164
|
+
{status === "copy" && "Create copy"}
|
|
165
|
+
{status === "new" && "Create"}
|
|
166
|
+
</Button>
|
|
167
|
+
|
|
168
|
+
</DialogActions>;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function buildSideActions<M extends object>({
|
|
172
|
+
savingError,
|
|
173
|
+
entity,
|
|
174
|
+
formActions,
|
|
175
|
+
fullPath,
|
|
176
|
+
fullIdPath,
|
|
177
|
+
openEntityMode,
|
|
178
|
+
collection,
|
|
179
|
+
context,
|
|
180
|
+
sideEntityController,
|
|
181
|
+
isSubmitting,
|
|
182
|
+
disabled,
|
|
183
|
+
status,
|
|
184
|
+
pluginActions
|
|
185
|
+
}: ActionsViewProps<M>) {
|
|
186
|
+
|
|
187
|
+
return <div
|
|
188
|
+
className={cls("overflow-auto h-full flex flex-col gap-2 w-80 2xl:w-96 px-4 py-16 sticky top-0 border-l", defaultBorderMixin)}>
|
|
189
|
+
<LoadingButton fullWidth={true}
|
|
190
|
+
variant="filled"
|
|
191
|
+
color="primary"
|
|
192
|
+
type="submit"
|
|
193
|
+
size={"large"}
|
|
194
|
+
disabled={disabled || isSubmitting}>
|
|
195
|
+
{status === "existing" && "Save"}
|
|
196
|
+
{status === "copy" && "Create copy"}
|
|
197
|
+
{status === "new" && "Create"}
|
|
198
|
+
</LoadingButton>
|
|
199
|
+
<Button fullWidth={true} variant="text" disabled={disabled || isSubmitting} type="reset">
|
|
200
|
+
{status === "existing" ? "Discard" : "Clear"}
|
|
201
|
+
</Button>
|
|
202
|
+
|
|
203
|
+
{pluginActions}
|
|
204
|
+
|
|
205
|
+
{savingError &&
|
|
206
|
+
<div className="text-right">
|
|
207
|
+
<Typography color={"error"}>{savingError.message}</Typography>
|
|
208
|
+
</div>
|
|
209
|
+
}
|
|
210
|
+
</div>;
|
|
211
|
+
}
|
|
@@ -5,19 +5,19 @@ import { Field, FieldProps as FormexFieldProps, getIn } from "@firecms/formex";
|
|
|
5
5
|
|
|
6
6
|
import {
|
|
7
7
|
CMSType,
|
|
8
|
-
EntityCollection,
|
|
9
8
|
FieldProps,
|
|
10
9
|
FireCMSPlugin,
|
|
11
10
|
PluginFieldBuilderParams,
|
|
12
11
|
Property,
|
|
13
12
|
PropertyFieldBindingProps,
|
|
14
13
|
PropertyOrBuilder,
|
|
14
|
+
ResolvedEntityCollection,
|
|
15
15
|
ResolvedProperty
|
|
16
16
|
} from "../types";
|
|
17
17
|
import { ReadOnlyFieldBinding } from "./field_bindings/ReadOnlyFieldBinding";
|
|
18
18
|
|
|
19
19
|
import { isHidden, isPropertyBuilder, isReadOnly, resolveProperty } from "../util";
|
|
20
|
-
import { useCustomizationController } from "../hooks";
|
|
20
|
+
import { useAuthController, useCustomizationController } from "../hooks";
|
|
21
21
|
import { Typography } from "@firecms/ui";
|
|
22
22
|
import { getFieldConfig, getFieldId } from "../core";
|
|
23
23
|
import { ErrorBoundary } from "../components";
|
|
@@ -54,6 +54,10 @@ export const PropertyFieldBinding = React.memo(PropertyFieldBindingInternal, (a:
|
|
|
54
54
|
if (a.index !== b.index) {
|
|
55
55
|
return false;
|
|
56
56
|
}
|
|
57
|
+
|
|
58
|
+
if (a.size !== b.size) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
57
61
|
const aIsBuilder = isPropertyBuilder(a.property) || a.property.fromBuilder;
|
|
58
62
|
const bIsBuilder = isPropertyBuilder(b.property) || b.property.fromBuilder;
|
|
59
63
|
|
|
@@ -70,21 +74,23 @@ export const PropertyFieldBinding = React.memo(PropertyFieldBindingInternal, (a:
|
|
|
70
74
|
return false;
|
|
71
75
|
}) as typeof PropertyFieldBindingInternal;
|
|
72
76
|
|
|
73
|
-
function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Record<string, any> =
|
|
77
|
+
function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Record<string, any> = any>
|
|
74
78
|
({
|
|
75
79
|
propertyKey,
|
|
76
80
|
property,
|
|
77
81
|
context,
|
|
78
82
|
includeDescription,
|
|
79
83
|
underlyingValueHasChanged,
|
|
80
|
-
disabled,
|
|
81
|
-
tableMode,
|
|
84
|
+
disabled: disabledProp,
|
|
82
85
|
partOfArray,
|
|
83
|
-
|
|
86
|
+
minimalistView,
|
|
84
87
|
autoFocus,
|
|
85
88
|
index,
|
|
89
|
+
size,
|
|
90
|
+
onPropertyChange,
|
|
86
91
|
}: PropertyFieldBindingProps<T, M>): ReactElement<PropertyFieldBindingProps<T, M>> {
|
|
87
92
|
|
|
93
|
+
const authController = useAuthController();
|
|
88
94
|
const customizationController = useCustomizationController();
|
|
89
95
|
|
|
90
96
|
return (
|
|
@@ -101,10 +107,13 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
|
|
|
101
107
|
values: fieldProps.form.values,
|
|
102
108
|
path: context.path,
|
|
103
109
|
entityId: context.entityId,
|
|
104
|
-
|
|
105
|
-
index
|
|
110
|
+
propertyConfigs: customizationController.propertyConfigs,
|
|
111
|
+
index,
|
|
112
|
+
authController
|
|
106
113
|
});
|
|
107
114
|
|
|
115
|
+
const disabled = disabledProp || isReadOnly(resolvedProperty) || Boolean(resolvedProperty?.disabled) || context.disabled;
|
|
116
|
+
|
|
108
117
|
if (resolvedProperty === null || isHidden(resolvedProperty)) {
|
|
109
118
|
return <></>;
|
|
110
119
|
} else if (isReadOnly(resolvedProperty)) {
|
|
@@ -118,6 +127,7 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
|
|
|
118
127
|
if (!propertyConfig) {
|
|
119
128
|
console.log("INTERNAL: Could not find field config for property", {
|
|
120
129
|
propertyKey,
|
|
130
|
+
property,
|
|
121
131
|
resolvedProperty,
|
|
122
132
|
fields: customizationController.propertyConfigs,
|
|
123
133
|
propertyConfig
|
|
@@ -130,8 +140,9 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
|
|
|
130
140
|
values: fieldProps.form.values,
|
|
131
141
|
path: context.path,
|
|
132
142
|
entityId: context.entityId,
|
|
133
|
-
|
|
134
|
-
index
|
|
143
|
+
propertyConfigs: customizationController.propertyConfigs,
|
|
144
|
+
index,
|
|
145
|
+
authController
|
|
135
146
|
});
|
|
136
147
|
Component = configProperty.Field as ComponentType<FieldProps<T>>;
|
|
137
148
|
}
|
|
@@ -139,7 +150,9 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
|
|
|
139
150
|
console.warn(`No field component found for property ${propertyKey}`);
|
|
140
151
|
console.warn("Property:", property);
|
|
141
152
|
return (
|
|
142
|
-
<div
|
|
153
|
+
<div className={"w-full"}>
|
|
154
|
+
{`Currently the field ${resolvedProperty.dataType} is not supported`}
|
|
155
|
+
</div>
|
|
143
156
|
);
|
|
144
157
|
}
|
|
145
158
|
|
|
@@ -150,23 +163,24 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
|
|
|
150
163
|
underlyingValueHasChanged,
|
|
151
164
|
context,
|
|
152
165
|
disabled,
|
|
153
|
-
tableMode,
|
|
154
166
|
partOfArray,
|
|
155
|
-
|
|
156
|
-
autoFocus
|
|
167
|
+
minimalistView,
|
|
168
|
+
autoFocus,
|
|
169
|
+
size,
|
|
170
|
+
onPropertyChange
|
|
157
171
|
};
|
|
158
172
|
|
|
159
173
|
return <FieldInternal
|
|
160
174
|
Component={Component as ComponentType<FieldProps>}
|
|
161
175
|
componentProps={componentProps}
|
|
162
|
-
|
|
176
|
+
formexFieldProps={fieldProps}/>;
|
|
163
177
|
}}
|
|
164
178
|
</Field>
|
|
165
179
|
);
|
|
166
180
|
|
|
167
181
|
}
|
|
168
182
|
|
|
169
|
-
type ResolvedPropertyFieldBindingProps<T extends CMSType = CMSType, M extends Record<string, any> =
|
|
183
|
+
type ResolvedPropertyFieldBindingProps<T extends CMSType = CMSType, M extends Record<string, any> = any> =
|
|
170
184
|
Omit<PropertyFieldBindingProps<T, M>, "property">
|
|
171
185
|
& {
|
|
172
186
|
property: ResolvedProperty<T>
|
|
@@ -180,31 +194,31 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
|
|
|
180
194
|
property,
|
|
181
195
|
includeDescription,
|
|
182
196
|
underlyingValueHasChanged,
|
|
183
|
-
tableMode,
|
|
184
197
|
partOfArray,
|
|
185
|
-
|
|
198
|
+
minimalistView,
|
|
186
199
|
autoFocus,
|
|
187
200
|
context,
|
|
188
|
-
disabled
|
|
201
|
+
disabled,
|
|
202
|
+
size,
|
|
203
|
+
onPropertyChange
|
|
189
204
|
},
|
|
190
|
-
|
|
205
|
+
formexFieldProps
|
|
191
206
|
}:
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
207
|
+
{
|
|
208
|
+
Component: ComponentType<FieldProps<T, any, M>>,
|
|
209
|
+
componentProps: ResolvedPropertyFieldBindingProps<T, M>,
|
|
210
|
+
formexFieldProps: FormexFieldProps<T, any>
|
|
211
|
+
}) {
|
|
197
212
|
|
|
198
213
|
const { plugins } = useCustomizationController();
|
|
199
214
|
|
|
200
215
|
const customFieldProps: any = property.customProps;
|
|
201
|
-
const value =
|
|
202
|
-
|
|
203
|
-
const
|
|
204
|
-
const touched = getIn(fieldProps.form.touched, propertyKey);
|
|
216
|
+
const value = formexFieldProps.field.value;
|
|
217
|
+
const error = getIn(formexFieldProps.form.errors, propertyKey);
|
|
218
|
+
const touched = getIn(formexFieldProps.form.touched, propertyKey);
|
|
205
219
|
|
|
206
220
|
const showError: boolean = error &&
|
|
207
|
-
(
|
|
221
|
+
(formexFieldProps.form.submitCount > 0 || property.validation?.unique) &&
|
|
208
222
|
(!Array.isArray(error) || !!error.filter((e: any) => !!e).length);
|
|
209
223
|
|
|
210
224
|
const WrappedComponent: ComponentType<FieldProps<T, any, M>> | null = useWrappedComponent({
|
|
@@ -217,22 +231,21 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
|
|
|
217
231
|
});
|
|
218
232
|
const UsedComponent: ComponentType<FieldProps<T>> = WrappedComponent ?? Component;
|
|
219
233
|
|
|
220
|
-
const isSubmitting =
|
|
234
|
+
const isSubmitting = formexFieldProps.form.isSubmitting;
|
|
221
235
|
|
|
222
236
|
const setValue = useCallback((value: T | null, shouldValidate?: boolean) => {
|
|
223
|
-
|
|
224
|
-
|
|
237
|
+
formexFieldProps.form.setFieldTouched(propertyKey, true, false);
|
|
238
|
+
formexFieldProps.form.setFieldValue(propertyKey, value, shouldValidate);
|
|
225
239
|
}, []);
|
|
226
240
|
|
|
227
241
|
const setFieldValue = useCallback((otherPropertyKey: string, value: CMSType | null, shouldValidate?: boolean) => {
|
|
228
|
-
|
|
229
|
-
|
|
242
|
+
formexFieldProps.form.setFieldTouched(propertyKey, true, false);
|
|
243
|
+
formexFieldProps.form.setFieldValue(otherPropertyKey, value, shouldValidate);
|
|
230
244
|
}, []);
|
|
231
245
|
|
|
232
246
|
const cmsFieldProps: FieldProps<T, CustomProps, M> = {
|
|
233
247
|
propertyKey,
|
|
234
248
|
value: value as T,
|
|
235
|
-
// initialValue,
|
|
236
249
|
setValue,
|
|
237
250
|
setFieldValue,
|
|
238
251
|
error,
|
|
@@ -243,12 +256,13 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
|
|
|
243
256
|
property: property as ResolvedProperty<T>,
|
|
244
257
|
disabled: disabled ?? false,
|
|
245
258
|
underlyingValueHasChanged: underlyingValueHasChanged ?? false,
|
|
246
|
-
tableMode: tableMode ?? false,
|
|
247
259
|
partOfArray: partOfArray ?? false,
|
|
248
|
-
|
|
260
|
+
minimalistView: minimalistView ?? false,
|
|
249
261
|
autoFocus: autoFocus ?? false,
|
|
250
262
|
customProps: customFieldProps,
|
|
251
|
-
context
|
|
263
|
+
context,
|
|
264
|
+
size,
|
|
265
|
+
onPropertyChange
|
|
252
266
|
};
|
|
253
267
|
|
|
254
268
|
return (
|
|
@@ -286,7 +300,7 @@ const shouldPropertyReRender = (property: PropertyOrBuilder | ResolvedProperty,
|
|
|
286
300
|
|
|
287
301
|
interface UseWrappedComponentParams<T extends CMSType = CMSType, M extends Record<string, any> = any> {
|
|
288
302
|
path?: string,
|
|
289
|
-
collection?:
|
|
303
|
+
collection?: ResolvedEntityCollection<M>,
|
|
290
304
|
propertyKey: string,
|
|
291
305
|
property: ResolvedProperty<T>,
|
|
292
306
|
Component: ComponentType<FieldProps<T, any, M>>,
|
|
@@ -317,7 +331,7 @@ function useWrappedComponent<T extends CMSType = CMSType, M extends Record<strin
|
|
|
317
331
|
Field: Component,
|
|
318
332
|
plugin,
|
|
319
333
|
path,
|
|
320
|
-
collection
|
|
334
|
+
collection,
|
|
321
335
|
};
|
|
322
336
|
const enabled = plugin.form?.fieldBuilderEnabled?.(params);
|
|
323
337
|
if (enabled === undefined || enabled)
|
|
@@ -68,7 +68,8 @@ export function CustomIdField<M extends Record<string, any>>({
|
|
|
68
68
|
? (
|
|
69
69
|
<>
|
|
70
70
|
|
|
71
|
-
<Tooltip title={"Copy"}
|
|
71
|
+
<Tooltip title={"Copy"}
|
|
72
|
+
asChild={true}>
|
|
72
73
|
<IconButton onClick={(e) => copy(entity.id)}
|
|
73
74
|
aria-label="copy-id">
|
|
74
75
|
<ContentCopyIcon size={"small"}/>
|
|
@@ -76,7 +77,8 @@ export function CustomIdField<M extends Record<string, any>>({
|
|
|
76
77
|
</Tooltip>
|
|
77
78
|
|
|
78
79
|
{customizationController?.entityLinkBuilder &&
|
|
79
|
-
<Tooltip title={"Open in the console"}
|
|
80
|
+
<Tooltip title={"Open in the console"}
|
|
81
|
+
asChild={true}>
|
|
80
82
|
<IconButton component={"a"}
|
|
81
83
|
href={customizationController.entityLinkBuilder({ entity })}
|
|
82
84
|
rel="noopener noreferrer"
|
|
@@ -98,8 +100,12 @@ export function CustomIdField<M extends Record<string, any>>({
|
|
|
98
100
|
|
|
99
101
|
{enumValues &&
|
|
100
102
|
<Select
|
|
103
|
+
size={"large"}
|
|
101
104
|
error={error}
|
|
102
|
-
|
|
105
|
+
fullWidth={true}
|
|
106
|
+
onValueChange={(v) => {
|
|
107
|
+
onChange(v as string);
|
|
108
|
+
}}
|
|
103
109
|
{...fieldProps}
|
|
104
110
|
renderValue={(option) => {
|
|
105
111
|
const enumConfig = enumValues.find(e => e.id === option);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { ErrorBoundary } from "../../components";
|
|
3
|
+
|
|
4
|
+
export function FormEntry({
|
|
5
|
+
propertyKey,
|
|
6
|
+
widthPercentage = 100,
|
|
7
|
+
children
|
|
8
|
+
}: {
|
|
9
|
+
propertyKey: string;
|
|
10
|
+
widthPercentage?: number;
|
|
11
|
+
children: React.ReactNode;
|
|
12
|
+
}) {
|
|
13
|
+
return (
|
|
14
|
+
<div id={`form_field_${propertyKey}`}
|
|
15
|
+
className={"relative"}
|
|
16
|
+
style={{ width: widthPercentage === 100 ? "100%" : `calc(${widthPercentage}% - 8px)` }}>
|
|
17
|
+
<ErrorBoundary>
|
|
18
|
+
{children}
|
|
19
|
+
</ErrorBoundary>
|
|
20
|
+
</div>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { cls } from "@firecms/ui";
|
|
3
|
+
|
|
4
|
+
export function FormLayout({
|
|
5
|
+
children,
|
|
6
|
+
className
|
|
7
|
+
}: {
|
|
8
|
+
children: React.ReactNode;
|
|
9
|
+
className?: string;
|
|
10
|
+
}) {
|
|
11
|
+
return (
|
|
12
|
+
<div className={cls("flex flex-wrap gap-x-4 w-full space-y-8", className)}>
|
|
13
|
+
{children}
|
|
14
|
+
</div>
|
|
15
|
+
);
|
|
16
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import React from "react";
|
|
1
|
+
import React, { forwardRef } from "react";
|
|
2
|
+
import { cls } from "@firecms/ui";
|
|
2
3
|
|
|
3
4
|
interface LabelWithIconProps {
|
|
4
5
|
icon: React.ReactNode;
|
|
@@ -12,22 +13,32 @@ interface LabelWithIconProps {
|
|
|
12
13
|
* Render the label of with an icon and the title of a property
|
|
13
14
|
* @group Form custom fields
|
|
14
15
|
*/
|
|
15
|
-
export
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
16
|
+
export const LabelWithIcon = forwardRef<HTMLDivElement, LabelWithIconProps>(
|
|
17
|
+
({
|
|
18
|
+
icon,
|
|
19
|
+
title,
|
|
20
|
+
small,
|
|
21
|
+
className,
|
|
22
|
+
required
|
|
23
|
+
}, ref) => {
|
|
24
|
+
return (
|
|
25
|
+
<div
|
|
26
|
+
ref={ref}
|
|
27
|
+
className={cls("align-middle inline-flex items-center my-0.5",
|
|
28
|
+
small ? "gap-1" : "gap-2",
|
|
29
|
+
className)}
|
|
30
|
+
>
|
|
31
|
+
{icon}
|
|
32
|
+
<span
|
|
33
|
+
className={`text-start font-medium text-${small ? "base" : "sm"} origin-top-left transform ${
|
|
34
|
+
small ? "translate-x-2 scale-75" : ""
|
|
35
|
+
}`}
|
|
36
|
+
>
|
|
37
|
+
{(title ?? "") + (required ? " *" : "")}
|
|
31
38
|
</span>
|
|
32
|
-
|
|
33
|
-
|
|
39
|
+
</div>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
LabelWithIcon.displayName = "LabelWithIcon";
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { LabelWithIcon } from "./LabelWithIcon";
|
|
3
|
+
import { PropertyIdCopyTooltip } from "../../components/PropertyIdCopyTooltip";
|
|
4
|
+
|
|
5
|
+
interface LabelWithIconAndTooltip {
|
|
6
|
+
icon: React.ReactNode;
|
|
7
|
+
title?: string;
|
|
8
|
+
small?: boolean;
|
|
9
|
+
className?: string;
|
|
10
|
+
required?: boolean;
|
|
11
|
+
propertyKey: string
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Render the label of with an icon and the title of a property
|
|
16
|
+
* @group Form custom fields
|
|
17
|
+
*/
|
|
18
|
+
export function LabelWithIconAndTooltip({
|
|
19
|
+
propertyKey,
|
|
20
|
+
className,
|
|
21
|
+
...props
|
|
22
|
+
}: LabelWithIconAndTooltip) {
|
|
23
|
+
return (
|
|
24
|
+
<PropertyIdCopyTooltip propertyKey={propertyKey} className={className}>
|
|
25
|
+
<LabelWithIcon {...props}/>
|
|
26
|
+
</PropertyIdCopyTooltip>
|
|
27
|
+
);
|
|
28
|
+
}
|
|
@@ -30,15 +30,16 @@ export function StorageItemPreview({
|
|
|
30
30
|
|
|
31
31
|
return (
|
|
32
32
|
<div className={cls(paperMixin,
|
|
33
|
-
"relative
|
|
34
|
-
size === "
|
|
33
|
+
"relative border-box flex items-center justify-center",
|
|
34
|
+
size === "large" ? "min-w-[220px] min-h-[220px] max-w-[220px]" : "min-w-[118px] min-h-[118px] max-w-[118px]",
|
|
35
35
|
className)}>
|
|
36
36
|
|
|
37
37
|
{!placeholder && !disabled &&
|
|
38
38
|
<div
|
|
39
|
-
className="absolute rounded-full -top-2 -right-2 z-10 bg-white dark:bg-
|
|
39
|
+
className="absolute rounded-full -top-2 -right-2 z-10 bg-white dark:bg-surface-900">
|
|
40
40
|
|
|
41
41
|
<Tooltip
|
|
42
|
+
asChild={true}
|
|
42
43
|
title="Remove">
|
|
43
44
|
<IconButton
|
|
44
45
|
size={"small"}
|
|
@@ -66,7 +67,7 @@ export function StorageItemPreview({
|
|
|
66
67
|
<div
|
|
67
68
|
onClick={(e) => e.stopPropagation()}
|
|
68
69
|
className="flex flex-col items-center justify-center w-full h-full">
|
|
69
|
-
<DescriptionIcon className="text-
|
|
70
|
+
<DescriptionIcon className="text-surface-700 dark:text-surface-300"/>
|
|
70
71
|
</div>
|
|
71
72
|
}
|
|
72
73
|
|