@firecms/core 3.0.0-canary.99 → 3.0.0-rc.2
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/UserDisplay.d.ts +7 -0
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +11 -2
- package/dist/components/VirtualTable/fields/VirtualTableUserSelect.d.ts +12 -0
- 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/contexts/InternalUserManagementContext.d.ts +3 -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 -3
- 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/field_bindings/UserSelectFieldBinding.d.ts +12 -0
- 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/index.d.ts +2 -0
- 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/useCollapsedGroups.d.ts +9 -0
- package/dist/hooks/useFireCMSContext.d.ts +1 -1
- package/dist/hooks/useInternalUserManagementController.d.ts +12 -0
- 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 +20480 -14434
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +20250 -14209
- 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/components/UserPreview.d.ts +8 -0
- package/dist/preview/index.d.ts +1 -0
- 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 +88 -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 +7 -2
- 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 +31 -3
- package/dist/types/firecms_context.d.ts +17 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/internal_user_management.d.ts +20 -0
- package/dist/types/navigation.d.ts +60 -17
- package/dist/types/permissions.d.ts +4 -4
- package/dist/types/plugins.d.ts +44 -9
- package/dist/types/properties.d.ts +74 -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 +2 -1
- 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 +47 -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 +506 -161
- package/src/components/HomePage/FavouritesView.tsx +9 -14
- package/src/components/HomePage/HomePageDnD.tsx +600 -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 +123 -0
- package/src/components/HomePage/SmallNavigationCard.tsx +1 -2
- package/src/components/NotFoundPage.tsx +2 -2
- package/src/components/PropertyConfigBadge.tsx +10 -4
- 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 +60 -11
- package/src/components/UnsavedChangesDialog.tsx +46 -0
- package/src/components/UserDisplay.tsx +55 -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/VirtualTable/fields/VirtualTableUserSelect.tsx +99 -0
- package/src/components/common/default_entity_actions.tsx +62 -42
- package/src/components/common/index.ts +1 -1
- package/src/components/common/useColumnsIds.tsx +2 -9
- 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/InternalUserManagementContext.tsx +4 -0
- 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 +58 -28
- 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 +39 -11
- 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 +59 -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/field_bindings/UserSelectFieldBinding.tsx +94 -0
- 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/index.tsx +3 -0
- 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/useCollapsedGroups.ts +64 -0
- package/src/hooks/useFireCMSContext.tsx +9 -35
- package/src/hooks/useInternalUserManagementController.tsx +16 -0
- 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 +36 -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 +10 -18
- package/src/preview/components/UrlComponentPreview.tsx +20 -21
- package/src/preview/components/UserPreview.tsx +27 -0
- package/src/preview/index.ts +1 -0
- 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 +6 -4
- 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 +103 -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 +10 -2
- 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 +34 -4
- package/src/types/firecms_context.tsx +18 -1
- package/src/types/index.ts +1 -0
- package/src/types/internal_user_management.ts +24 -0
- package/src/types/navigation.ts +76 -22
- package/src/types/permissions.ts +5 -5
- package/src/types/plugins.tsx +53 -9
- package/src/types/properties.ts +84 -22
- package/src/types/property_config.tsx +2 -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 +3 -1
- 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 +6 -4
- 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,23 +74,29 @@ 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
|
|
|
96
|
+
if(propertyKey === "created_by"){
|
|
97
|
+
console.log("Rendering field for created_by", {propertyKey, property, context});
|
|
98
|
+
}
|
|
99
|
+
|
|
90
100
|
return (
|
|
91
101
|
<Field
|
|
92
102
|
key={propertyKey}
|
|
@@ -101,10 +111,13 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
|
|
|
101
111
|
values: fieldProps.form.values,
|
|
102
112
|
path: context.path,
|
|
103
113
|
entityId: context.entityId,
|
|
104
|
-
|
|
105
|
-
index
|
|
114
|
+
propertyConfigs: customizationController.propertyConfigs,
|
|
115
|
+
index,
|
|
116
|
+
authController
|
|
106
117
|
});
|
|
107
118
|
|
|
119
|
+
const disabled = disabledProp || isReadOnly(resolvedProperty) || Boolean(resolvedProperty?.disabled) || context.disabled;
|
|
120
|
+
|
|
108
121
|
if (resolvedProperty === null || isHidden(resolvedProperty)) {
|
|
109
122
|
return <></>;
|
|
110
123
|
} else if (isReadOnly(resolvedProperty)) {
|
|
@@ -118,6 +131,7 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
|
|
|
118
131
|
if (!propertyConfig) {
|
|
119
132
|
console.log("INTERNAL: Could not find field config for property", {
|
|
120
133
|
propertyKey,
|
|
134
|
+
property,
|
|
121
135
|
resolvedProperty,
|
|
122
136
|
fields: customizationController.propertyConfigs,
|
|
123
137
|
propertyConfig
|
|
@@ -130,8 +144,9 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
|
|
|
130
144
|
values: fieldProps.form.values,
|
|
131
145
|
path: context.path,
|
|
132
146
|
entityId: context.entityId,
|
|
133
|
-
|
|
134
|
-
index
|
|
147
|
+
propertyConfigs: customizationController.propertyConfigs,
|
|
148
|
+
index,
|
|
149
|
+
authController
|
|
135
150
|
});
|
|
136
151
|
Component = configProperty.Field as ComponentType<FieldProps<T>>;
|
|
137
152
|
}
|
|
@@ -139,7 +154,9 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
|
|
|
139
154
|
console.warn(`No field component found for property ${propertyKey}`);
|
|
140
155
|
console.warn("Property:", property);
|
|
141
156
|
return (
|
|
142
|
-
<div
|
|
157
|
+
<div className={"w-full"}>
|
|
158
|
+
{`Currently the field ${resolvedProperty.dataType} is not supported`}
|
|
159
|
+
</div>
|
|
143
160
|
);
|
|
144
161
|
}
|
|
145
162
|
|
|
@@ -150,23 +167,24 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
|
|
|
150
167
|
underlyingValueHasChanged,
|
|
151
168
|
context,
|
|
152
169
|
disabled,
|
|
153
|
-
tableMode,
|
|
154
170
|
partOfArray,
|
|
155
|
-
|
|
156
|
-
autoFocus
|
|
171
|
+
minimalistView,
|
|
172
|
+
autoFocus,
|
|
173
|
+
size,
|
|
174
|
+
onPropertyChange
|
|
157
175
|
};
|
|
158
176
|
|
|
159
177
|
return <FieldInternal
|
|
160
178
|
Component={Component as ComponentType<FieldProps>}
|
|
161
179
|
componentProps={componentProps}
|
|
162
|
-
|
|
180
|
+
formexFieldProps={fieldProps}/>;
|
|
163
181
|
}}
|
|
164
182
|
</Field>
|
|
165
183
|
);
|
|
166
184
|
|
|
167
185
|
}
|
|
168
186
|
|
|
169
|
-
type ResolvedPropertyFieldBindingProps<T extends CMSType = CMSType, M extends Record<string, any> =
|
|
187
|
+
type ResolvedPropertyFieldBindingProps<T extends CMSType = CMSType, M extends Record<string, any> = any> =
|
|
170
188
|
Omit<PropertyFieldBindingProps<T, M>, "property">
|
|
171
189
|
& {
|
|
172
190
|
property: ResolvedProperty<T>
|
|
@@ -180,31 +198,31 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
|
|
|
180
198
|
property,
|
|
181
199
|
includeDescription,
|
|
182
200
|
underlyingValueHasChanged,
|
|
183
|
-
tableMode,
|
|
184
201
|
partOfArray,
|
|
185
|
-
|
|
202
|
+
minimalistView,
|
|
186
203
|
autoFocus,
|
|
187
204
|
context,
|
|
188
|
-
disabled
|
|
205
|
+
disabled,
|
|
206
|
+
size,
|
|
207
|
+
onPropertyChange
|
|
189
208
|
},
|
|
190
|
-
|
|
209
|
+
formexFieldProps
|
|
191
210
|
}:
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
211
|
+
{
|
|
212
|
+
Component: ComponentType<FieldProps<T, any, M>>,
|
|
213
|
+
componentProps: ResolvedPropertyFieldBindingProps<T, M>,
|
|
214
|
+
formexFieldProps: FormexFieldProps<T, any>
|
|
215
|
+
}) {
|
|
197
216
|
|
|
198
217
|
const { plugins } = useCustomizationController();
|
|
199
218
|
|
|
200
219
|
const customFieldProps: any = property.customProps;
|
|
201
|
-
const value =
|
|
202
|
-
|
|
203
|
-
const
|
|
204
|
-
const touched = getIn(fieldProps.form.touched, propertyKey);
|
|
220
|
+
const value = formexFieldProps.field.value;
|
|
221
|
+
const error = getIn(formexFieldProps.form.errors, propertyKey);
|
|
222
|
+
const touched = getIn(formexFieldProps.form.touched, propertyKey);
|
|
205
223
|
|
|
206
224
|
const showError: boolean = error &&
|
|
207
|
-
(
|
|
225
|
+
(formexFieldProps.form.submitCount > 0 || property.validation?.unique) &&
|
|
208
226
|
(!Array.isArray(error) || !!error.filter((e: any) => !!e).length);
|
|
209
227
|
|
|
210
228
|
const WrappedComponent: ComponentType<FieldProps<T, any, M>> | null = useWrappedComponent({
|
|
@@ -217,22 +235,21 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
|
|
|
217
235
|
});
|
|
218
236
|
const UsedComponent: ComponentType<FieldProps<T>> = WrappedComponent ?? Component;
|
|
219
237
|
|
|
220
|
-
const isSubmitting =
|
|
238
|
+
const isSubmitting = formexFieldProps.form.isSubmitting;
|
|
221
239
|
|
|
222
240
|
const setValue = useCallback((value: T | null, shouldValidate?: boolean) => {
|
|
223
|
-
|
|
224
|
-
|
|
241
|
+
formexFieldProps.form.setFieldTouched(propertyKey, true, false);
|
|
242
|
+
formexFieldProps.form.setFieldValue(propertyKey, value, shouldValidate);
|
|
225
243
|
}, []);
|
|
226
244
|
|
|
227
245
|
const setFieldValue = useCallback((otherPropertyKey: string, value: CMSType | null, shouldValidate?: boolean) => {
|
|
228
|
-
|
|
229
|
-
|
|
246
|
+
formexFieldProps.form.setFieldTouched(propertyKey, true, false);
|
|
247
|
+
formexFieldProps.form.setFieldValue(otherPropertyKey, value, shouldValidate);
|
|
230
248
|
}, []);
|
|
231
249
|
|
|
232
250
|
const cmsFieldProps: FieldProps<T, CustomProps, M> = {
|
|
233
251
|
propertyKey,
|
|
234
252
|
value: value as T,
|
|
235
|
-
// initialValue,
|
|
236
253
|
setValue,
|
|
237
254
|
setFieldValue,
|
|
238
255
|
error,
|
|
@@ -243,12 +260,13 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
|
|
|
243
260
|
property: property as ResolvedProperty<T>,
|
|
244
261
|
disabled: disabled ?? false,
|
|
245
262
|
underlyingValueHasChanged: underlyingValueHasChanged ?? false,
|
|
246
|
-
tableMode: tableMode ?? false,
|
|
247
263
|
partOfArray: partOfArray ?? false,
|
|
248
|
-
|
|
264
|
+
minimalistView: minimalistView ?? false,
|
|
249
265
|
autoFocus: autoFocus ?? false,
|
|
250
266
|
customProps: customFieldProps,
|
|
251
|
-
context
|
|
267
|
+
context,
|
|
268
|
+
size,
|
|
269
|
+
onPropertyChange
|
|
252
270
|
};
|
|
253
271
|
|
|
254
272
|
return (
|
|
@@ -286,7 +304,7 @@ const shouldPropertyReRender = (property: PropertyOrBuilder | ResolvedProperty,
|
|
|
286
304
|
|
|
287
305
|
interface UseWrappedComponentParams<T extends CMSType = CMSType, M extends Record<string, any> = any> {
|
|
288
306
|
path?: string,
|
|
289
|
-
collection?:
|
|
307
|
+
collection?: ResolvedEntityCollection<M>,
|
|
290
308
|
propertyKey: string,
|
|
291
309
|
property: ResolvedProperty<T>,
|
|
292
310
|
Component: ComponentType<FieldProps<T, any, M>>,
|
|
@@ -317,7 +335,7 @@ function useWrappedComponent<T extends CMSType = CMSType, M extends Record<strin
|
|
|
317
335
|
Field: Component,
|
|
318
336
|
plugin,
|
|
319
337
|
path,
|
|
320
|
-
collection
|
|
338
|
+
collection,
|
|
321
339
|
};
|
|
322
340
|
const enabled = plugin.form?.fieldBuilderEnabled?.(params);
|
|
323
341
|
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
|
|