@firecms/core 3.0.0-canary.99 → 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
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import React, { useCallback, useEffect, useLayoutEffect, useMemo, useState } from "react";
|
|
2
|
-
import equal from "react-fast-compare"
|
|
3
2
|
|
|
4
3
|
import * as Portal from "@radix-ui/react-portal";
|
|
5
4
|
|
|
@@ -18,21 +17,19 @@ import { Formex, useCreateFormex } from "@firecms/formex";
|
|
|
18
17
|
import { useDraggable } from "./useDraggable";
|
|
19
18
|
import { CustomFieldValidator, getYupEntitySchema } from "../../../../form/validation";
|
|
20
19
|
import { useWindowSize } from "./useWindowSize";
|
|
21
|
-
import { ElementResizeListener } from "./ElementResizeListener";
|
|
22
|
-
import { ErrorView } from "../../../ErrorView";
|
|
23
20
|
import { getPropertyInPath, isReadOnly, resolveCollection } from "../../../../util";
|
|
24
|
-
import { Button,
|
|
25
|
-
import { PropertyFieldBinding } from "../../../../form";
|
|
26
|
-
import { useCustomizationController, useFireCMSContext } from "../../../../hooks";
|
|
21
|
+
import { Button, CloseIcon, DialogActions, IconButton, Typography } from "@firecms/ui";
|
|
22
|
+
import { PropertyFieldBinding, yupToFormErrors } from "../../../../form";
|
|
23
|
+
import { useAuthController, useCustomizationController, useDataSource, useFireCMSContext } from "../../../../hooks";
|
|
27
24
|
import { OnCellValueChangeParams } from "../../../common";
|
|
28
25
|
|
|
29
26
|
interface PopupFormFieldProps<M extends Record<string, any>> {
|
|
30
|
-
entity?: Entity<M>;
|
|
31
27
|
customFieldValidator?: CustomFieldValidator;
|
|
32
28
|
path: string;
|
|
29
|
+
entityId: string;
|
|
33
30
|
tableKey: string;
|
|
34
31
|
propertyKey?: Extract<keyof M, string>;
|
|
35
|
-
collection?: EntityCollection<
|
|
32
|
+
collection?: EntityCollection<any>;
|
|
36
33
|
cellRect?: DOMRect;
|
|
37
34
|
open: boolean;
|
|
38
35
|
onClose: () => void;
|
|
@@ -46,13 +43,54 @@ interface PopupFormFieldProps<M extends Record<string, any>> {
|
|
|
46
43
|
|
|
47
44
|
export function PopupFormField<M extends Record<string, any>>(props: PopupFormFieldProps<M>) {
|
|
48
45
|
if (!props.open) return null;
|
|
49
|
-
return <
|
|
46
|
+
return <PopupFormFieldLoading {...props} />;
|
|
50
47
|
|
|
51
48
|
}
|
|
52
49
|
|
|
50
|
+
export function PopupFormFieldLoading<M extends Record<string, any>>({
|
|
51
|
+
tableKey,
|
|
52
|
+
entityId,
|
|
53
|
+
customFieldValidator,
|
|
54
|
+
propertyKey,
|
|
55
|
+
collection: inputCollection,
|
|
56
|
+
path,
|
|
57
|
+
cellRect,
|
|
58
|
+
open,
|
|
59
|
+
onClose,
|
|
60
|
+
onCellValueChange,
|
|
61
|
+
container
|
|
62
|
+
}: PopupFormFieldProps<M>) {
|
|
63
|
+
const dataSource = useDataSource();
|
|
64
|
+
const [entity, setEntity] = useState<Entity<M> | undefined>(undefined);
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
if (entityId && inputCollection) {
|
|
67
|
+
dataSource.fetchEntity({
|
|
68
|
+
path,
|
|
69
|
+
entityId,
|
|
70
|
+
collection: inputCollection
|
|
71
|
+
}).then(setEntity);
|
|
72
|
+
}
|
|
73
|
+
}, [entityId, inputCollection, dataSource, path]);
|
|
74
|
+
|
|
75
|
+
if (!entity) return null;
|
|
76
|
+
return <PopupFormFieldInternal {...{
|
|
77
|
+
tableKey,
|
|
78
|
+
entityId,
|
|
79
|
+
customFieldValidator,
|
|
80
|
+
propertyKey,
|
|
81
|
+
collection: inputCollection,
|
|
82
|
+
path,
|
|
83
|
+
cellRect,
|
|
84
|
+
open,
|
|
85
|
+
onClose,
|
|
86
|
+
onCellValueChange,
|
|
87
|
+
container
|
|
88
|
+
}} entity={entity}/>;
|
|
89
|
+
}
|
|
90
|
+
|
|
53
91
|
export function PopupFormFieldInternal<M extends Record<string, any>>({
|
|
54
92
|
tableKey,
|
|
55
|
-
|
|
93
|
+
entityId,
|
|
56
94
|
customFieldValidator,
|
|
57
95
|
propertyKey,
|
|
58
96
|
collection: inputCollection,
|
|
@@ -61,11 +99,14 @@ export function PopupFormFieldInternal<M extends Record<string, any>>({
|
|
|
61
99
|
open,
|
|
62
100
|
onClose,
|
|
63
101
|
onCellValueChange,
|
|
64
|
-
container
|
|
65
|
-
|
|
102
|
+
container,
|
|
103
|
+
entity
|
|
104
|
+
}: PopupFormFieldProps<M> & {
|
|
105
|
+
entity?: Entity<M>
|
|
106
|
+
}) {
|
|
66
107
|
|
|
67
|
-
// const dataSource = useDataSource();
|
|
68
108
|
const fireCMSContext = useFireCMSContext();
|
|
109
|
+
const authController = useAuthController();
|
|
69
110
|
const customizationController = useCustomizationController();
|
|
70
111
|
|
|
71
112
|
const [savingError, setSavingError] = React.useState<any>();
|
|
@@ -74,34 +115,14 @@ export function PopupFormFieldInternal<M extends Record<string, any>>({
|
|
|
74
115
|
y: number
|
|
75
116
|
}>();
|
|
76
117
|
|
|
77
|
-
const entityId = entityProp?.id;
|
|
78
|
-
const [entity, setEntity] = useState<Entity<M> | undefined>(entityProp);
|
|
79
|
-
// useEffect(() => {
|
|
80
|
-
// if (entityId && inputCollection) {
|
|
81
|
-
// return dataSource.listenEntity?.({
|
|
82
|
-
// path,
|
|
83
|
-
// entityId,
|
|
84
|
-
// collection: inputCollection,
|
|
85
|
-
// onUpdate: (e) => {
|
|
86
|
-
// setEntity(e);
|
|
87
|
-
// setInternalValue(e?.values);
|
|
88
|
-
// }
|
|
89
|
-
// });
|
|
90
|
-
// } else {
|
|
91
|
-
// return () => {
|
|
92
|
-
// };
|
|
93
|
-
// }
|
|
94
|
-
// }, [dataSource, entityId, inputCollection, path, open]);
|
|
95
|
-
|
|
96
|
-
const [internalValue, setInternalValue] = useState<EntityValues<M> | undefined>(entity?.values);
|
|
97
|
-
|
|
98
118
|
const collection: ResolvedEntityCollection<M> | undefined = inputCollection
|
|
99
119
|
? resolveCollection<M>({
|
|
100
120
|
collection: inputCollection,
|
|
101
121
|
path,
|
|
102
|
-
values:
|
|
122
|
+
values: entity?.values,
|
|
103
123
|
entityId,
|
|
104
|
-
|
|
124
|
+
propertyConfigs: customizationController.propertyConfigs,
|
|
125
|
+
authController
|
|
105
126
|
})
|
|
106
127
|
: undefined;
|
|
107
128
|
|
|
@@ -125,33 +146,35 @@ export function PopupFormFieldInternal<M extends Record<string, any>>({
|
|
|
125
146
|
};
|
|
126
147
|
}, [cellRect, windowSize.height, windowSize.width]);
|
|
127
148
|
|
|
128
|
-
const normalizePosition = useCallback((
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
149
|
+
const normalizePosition = useCallback((
|
|
150
|
+
pos: { x: number, y: number },
|
|
151
|
+
draggableBoundingRect: DOMRect,
|
|
152
|
+
currentWindowSize: { width: number, height: number }
|
|
153
|
+
) => {
|
|
154
|
+
if (!draggableBoundingRect || draggableBoundingRect.width === 0 || draggableBoundingRect.height === 0) {
|
|
155
|
+
return pos;
|
|
156
|
+
}
|
|
137
157
|
return {
|
|
138
|
-
x: Math.max(0, Math.min(x,
|
|
139
|
-
y: Math.max(0, Math.min(y,
|
|
158
|
+
x: Math.max(0, Math.min(pos.x, currentWindowSize.width - draggableBoundingRect.width)),
|
|
159
|
+
y: Math.max(0, Math.min(pos.y, currentWindowSize.height - draggableBoundingRect.height))
|
|
140
160
|
};
|
|
141
|
-
}, [
|
|
161
|
+
}, []);
|
|
142
162
|
|
|
143
|
-
const updatePopupLocation = useCallback((
|
|
163
|
+
const updatePopupLocation = useCallback((newPositionCandidate?: {
|
|
144
164
|
x: number,
|
|
145
165
|
y: number
|
|
146
166
|
}) => {
|
|
147
|
-
|
|
148
167
|
const draggableBoundingRect = draggableRef.current?.getBoundingClientRect();
|
|
149
|
-
if (!cellRect || !draggableBoundingRect)
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
168
|
+
if (!cellRect || !draggableBoundingRect || draggableBoundingRect.width === 0 || draggableBoundingRect.height === 0) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const basePosition = newPositionCandidate ?? getInitialLocation();
|
|
172
|
+
const newNormalizedPosition = normalizePosition(basePosition, draggableBoundingRect, windowSize);
|
|
173
|
+
|
|
174
|
+
if (!popupLocation || newNormalizedPosition.x !== popupLocation.x || newNormalizedPosition.y !== popupLocation.y) {
|
|
175
|
+
setPopupLocation(newNormalizedPosition);
|
|
176
|
+
}
|
|
177
|
+
}, [cellRect, getInitialLocation, normalizePosition, popupLocation, windowSize]);
|
|
155
178
|
|
|
156
179
|
useDraggable({
|
|
157
180
|
containerRef: draggableRef,
|
|
@@ -170,19 +193,25 @@ export function PopupFormFieldInternal<M extends Record<string, any>>({
|
|
|
170
193
|
|
|
171
194
|
useLayoutEffect(
|
|
172
195
|
() => {
|
|
196
|
+
if (!cellRect || initialPositionSet.current) return;
|
|
197
|
+
// Ensure draggableRef is available and has dimensions before initial positioning
|
|
173
198
|
const draggableBoundingRect = draggableRef.current?.getBoundingClientRect();
|
|
174
|
-
if (!
|
|
199
|
+
if (!draggableBoundingRect || draggableBoundingRect.width === 0 || draggableBoundingRect.height === 0) {
|
|
200
|
+
// If not ready, perhaps wait or log. For now, just return.
|
|
201
|
+
// This might need a retry mechanism or ensure content is rendered first.
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
175
204
|
updatePopupLocation();
|
|
176
205
|
initialPositionSet.current = true;
|
|
177
206
|
},
|
|
178
|
-
[cellRect, updatePopupLocation
|
|
207
|
+
[cellRect, updatePopupLocation] // Removed initialPositionSet.current from deps as it's a ref
|
|
179
208
|
);
|
|
180
209
|
|
|
181
210
|
useLayoutEffect(
|
|
182
211
|
() => {
|
|
183
212
|
updatePopupLocation(popupLocation);
|
|
184
213
|
},
|
|
185
|
-
[windowSize, cellRect]
|
|
214
|
+
[windowSize, cellRect, updatePopupLocation, popupLocation]
|
|
186
215
|
);
|
|
187
216
|
|
|
188
217
|
const validationSchema = useMemo(() => {
|
|
@@ -196,9 +225,28 @@ export function PopupFormFieldInternal<M extends Record<string, any>>({
|
|
|
196
225
|
}, [collection, entityId, propertyKey, customFieldValidator]);
|
|
197
226
|
|
|
198
227
|
const adaptResize = useCallback(() => {
|
|
228
|
+
// When the popup resizes, we want to re-evaluate its position
|
|
229
|
+
// based on its current location and new dimensions.
|
|
199
230
|
return updatePopupLocation(popupLocation);
|
|
200
231
|
}, [popupLocation, updatePopupLocation]);
|
|
201
232
|
|
|
233
|
+
// Setup ResizeObserver
|
|
234
|
+
useEffect(() => {
|
|
235
|
+
const element = draggableRef.current;
|
|
236
|
+
if (!element) return;
|
|
237
|
+
|
|
238
|
+
const observer = new ResizeObserver(() => {
|
|
239
|
+
adaptResize();
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
observer.observe(element);
|
|
243
|
+
|
|
244
|
+
return () => {
|
|
245
|
+
observer.unobserve(element);
|
|
246
|
+
observer.disconnect();
|
|
247
|
+
};
|
|
248
|
+
}, [adaptResize, draggableRef]);
|
|
249
|
+
|
|
202
250
|
const saveValue = async (values: M) => {
|
|
203
251
|
setSavingError(null);
|
|
204
252
|
if (inputCollection && entity && onCellValueChange && propertyKey) {
|
|
@@ -214,47 +262,32 @@ export function PopupFormFieldInternal<M extends Record<string, any>>({
|
|
|
214
262
|
return Promise.resolve();
|
|
215
263
|
};
|
|
216
264
|
|
|
217
|
-
if (!entity)
|
|
218
|
-
return <></>;
|
|
219
|
-
|
|
220
|
-
// enableReinitialize={true}
|
|
221
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
222
265
|
const formex = useCreateFormex<M>({
|
|
223
266
|
initialValues: (entity?.values ?? {}) as EntityValues<M>,
|
|
224
267
|
validation: (values) => {
|
|
225
268
|
return validationSchema?.validate(values, { abortEarly: false })
|
|
226
269
|
.then(() => ({}))
|
|
227
|
-
.catch(
|
|
228
|
-
const errors: Record<string, string> = {};
|
|
229
|
-
e.inner.forEach((error: any) => {
|
|
230
|
-
errors[error.path] = error.message;
|
|
231
|
-
});
|
|
232
|
-
return errors;
|
|
233
|
-
});
|
|
270
|
+
.catch(yupToFormErrors);
|
|
234
271
|
},
|
|
235
272
|
validateOnInitialRender: true,
|
|
236
273
|
onSubmit: (values, actions) => {
|
|
237
274
|
saveValue(values)
|
|
238
|
-
.then(() =>
|
|
275
|
+
.then(() => {
|
|
276
|
+
formex.resetForm({
|
|
277
|
+
values: values
|
|
278
|
+
})
|
|
279
|
+
onClose();
|
|
280
|
+
})
|
|
239
281
|
.finally(() => actions.setSubmitting(false));
|
|
240
282
|
}
|
|
241
283
|
});
|
|
242
284
|
|
|
243
|
-
const {
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
}
|
|
250
|
-
}, [values]);
|
|
251
|
-
|
|
252
|
-
if (!entity)
|
|
253
|
-
return <ErrorView
|
|
254
|
-
error={"PopupFormField misconfiguration"}/>;
|
|
255
|
-
|
|
256
|
-
if (!collection)
|
|
257
|
-
return <></>;
|
|
285
|
+
const {
|
|
286
|
+
values,
|
|
287
|
+
isSubmitting,
|
|
288
|
+
setFieldValue,
|
|
289
|
+
handleSubmit
|
|
290
|
+
} = formex;
|
|
258
291
|
|
|
259
292
|
const disabled = isSubmitting;
|
|
260
293
|
|
|
@@ -265,10 +298,13 @@ export function PopupFormFieldInternal<M extends Record<string, any>>({
|
|
|
265
298
|
path,
|
|
266
299
|
setFieldValue,
|
|
267
300
|
save: saveValue,
|
|
268
|
-
formex
|
|
301
|
+
formex,
|
|
302
|
+
status: "existing",
|
|
303
|
+
openEntityMode: "side_panel",
|
|
304
|
+
disabled: false,
|
|
269
305
|
};
|
|
270
306
|
|
|
271
|
-
const property: ResolvedProperty<any> | undefined = propertyKey && getPropertyInPath(collection
|
|
307
|
+
const property: ResolvedProperty<any> | undefined = propertyKey && getPropertyInPath(collection?.properties ?? {} as ResolvedProperties, propertyKey as string);
|
|
272
308
|
const fieldProps: PropertyFieldBindingProps<any, M> | undefined = propertyKey && property
|
|
273
309
|
? {
|
|
274
310
|
propertyKey: propertyKey as string,
|
|
@@ -277,9 +313,8 @@ export function PopupFormFieldInternal<M extends Record<string, any>>({
|
|
|
277
313
|
includeDescription: false,
|
|
278
314
|
underlyingValueHasChanged: false,
|
|
279
315
|
context: formContext,
|
|
280
|
-
tableMode: true,
|
|
281
316
|
partOfArray: false,
|
|
282
|
-
|
|
317
|
+
minimalistView: true,
|
|
283
318
|
autoFocus: open
|
|
284
319
|
}
|
|
285
320
|
: undefined;
|
|
@@ -287,7 +322,7 @@ export function PopupFormFieldInternal<M extends Record<string, any>>({
|
|
|
287
322
|
let internalForm = <>
|
|
288
323
|
<div
|
|
289
324
|
key={`popup_form_${tableKey}_${entityId}_${propertyKey}`}
|
|
290
|
-
className="w-[
|
|
325
|
+
className="w-[700px] max-w-full max-h-[85vh]">
|
|
291
326
|
<form
|
|
292
327
|
onSubmit={handleSubmit}
|
|
293
328
|
noValidate>
|
|
@@ -322,10 +357,6 @@ export function PopupFormFieldInternal<M extends Record<string, any>>({
|
|
|
322
357
|
|
|
323
358
|
const plugins = customizationController.plugins;
|
|
324
359
|
if (plugins) {
|
|
325
|
-
// const formController: FormContext<M> = {
|
|
326
|
-
// values,
|
|
327
|
-
// setFieldValue
|
|
328
|
-
// }
|
|
329
360
|
plugins.forEach((plugin: FireCMSPlugin) => {
|
|
330
361
|
if (plugin.form?.provider) {
|
|
331
362
|
internalForm = (
|
|
@@ -345,7 +376,7 @@ export function PopupFormFieldInternal<M extends Record<string, any>>({
|
|
|
345
376
|
});
|
|
346
377
|
}
|
|
347
378
|
const form = <div
|
|
348
|
-
className={`text-
|
|
379
|
+
className={`text-surface-900 dark:text-white overflow-auto rounded rounded-md bg-white dark:bg-surface-950 ${!open ? "hidden" : ""} cursor-grab max-w-[100vw]`}>
|
|
349
380
|
|
|
350
381
|
{internalForm}
|
|
351
382
|
|
|
@@ -362,12 +393,12 @@ export function PopupFormFieldInternal<M extends Record<string, any>>({
|
|
|
362
393
|
style={{
|
|
363
394
|
boxShadow: "0 0 0 2px rgba(128,128,128,0.2)",
|
|
364
395
|
}}
|
|
365
|
-
className={`inline-block fixed z-20 shadow-outline rounded-md bg-white dark:bg-
|
|
396
|
+
className={`inline-block fixed z-20 shadow-outline rounded-md bg-white dark:bg-surface-950 ${
|
|
366
397
|
!open ? "invisible" : "visible"
|
|
367
398
|
} cursor-grab overflow-visible`}
|
|
368
399
|
ref={draggableRef}>
|
|
369
400
|
|
|
370
|
-
|
|
401
|
+
{/* ElementResizeListener removed from here */}
|
|
371
402
|
|
|
372
403
|
<div
|
|
373
404
|
className="overflow-hidden">
|
|
@@ -375,7 +406,7 @@ export function PopupFormFieldInternal<M extends Record<string, any>>({
|
|
|
375
406
|
{form}
|
|
376
407
|
|
|
377
408
|
<div
|
|
378
|
-
className="absolute -top-3.5 -right-3.5 bg-
|
|
409
|
+
className="absolute -top-3.5 -right-3.5 bg-surface-500 rounded-full"
|
|
379
410
|
style={{
|
|
380
411
|
width: "32px",
|
|
381
412
|
height: "32px"
|
|
@@ -386,7 +417,7 @@ export function PopupFormFieldInternal<M extends Record<string, any>>({
|
|
|
386
417
|
event.stopPropagation();
|
|
387
418
|
onClose();
|
|
388
419
|
}}>
|
|
389
|
-
<
|
|
420
|
+
<CloseIcon className="text-white"
|
|
390
421
|
size={"small"}/>
|
|
391
422
|
</IconButton>
|
|
392
423
|
</div>
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import React, { useEffect } from "react";
|
|
1
|
+
import React, { useCallback, useEffect } from "react";
|
|
2
2
|
|
|
3
3
|
interface DraggableProps {
|
|
4
4
|
containerRef: React.RefObject<HTMLDivElement>,
|
|
5
5
|
innerRef: React.RefObject<HTMLDivElement>,
|
|
6
|
-
// ref: React.RefObject<HTMLDivElement>,
|
|
7
6
|
x?: number;
|
|
8
7
|
y?: number;
|
|
9
8
|
onMove: (params: { x: number, y: number }) => void,
|
|
@@ -22,7 +21,7 @@ export function useDraggable({
|
|
|
22
21
|
|
|
23
22
|
const listeningRef = React.useRef(false);
|
|
24
23
|
|
|
25
|
-
const onMouseDown = (event: any) => {
|
|
24
|
+
const onMouseDown = useCallback((event: any) => {
|
|
26
25
|
if (event.button !== 0 || !containerRef.current || event.defaultPrevented || event.innerClicked) {
|
|
27
26
|
return;
|
|
28
27
|
}
|
|
@@ -39,16 +38,17 @@ export function useDraggable({
|
|
|
39
38
|
document.addEventListener("selectstart", onSelect);
|
|
40
39
|
listeningRef.current = true;
|
|
41
40
|
// event.stopPropagation();
|
|
42
|
-
};
|
|
43
|
-
|
|
41
|
+
}, [containerRef, onMove]);
|
|
42
|
+
|
|
43
|
+
const onMouseDownInner = useCallback((event: any) => {
|
|
44
44
|
// @ts-ignore
|
|
45
45
|
event.innerClicked = true;
|
|
46
|
-
}
|
|
46
|
+
}, [])
|
|
47
47
|
|
|
48
|
-
const onSelect = (event: any) => {
|
|
48
|
+
const onSelect = useCallback((event: any) => {
|
|
49
49
|
event.preventDefault()
|
|
50
50
|
event.stopPropagation();
|
|
51
|
-
}
|
|
51
|
+
}, [])
|
|
52
52
|
|
|
53
53
|
const onMouseUp = (event: any) => {
|
|
54
54
|
document.removeEventListener("mousemove", onMouseMove);
|
|
@@ -92,6 +92,6 @@ export function useDraggable({
|
|
|
92
92
|
if (innerCurrent)
|
|
93
93
|
innerCurrent.removeEventListener("mousedown", onMouseDownInner);
|
|
94
94
|
};
|
|
95
|
-
});
|
|
95
|
+
}, [containerRef, innerRef, onMouseDownInner, onMouseDown]);
|
|
96
96
|
|
|
97
97
|
}
|