@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
package/src/util/resolutions.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ArrayProperty,
|
|
3
|
+
AuthController,
|
|
3
4
|
CMSType,
|
|
5
|
+
CustomizationController,
|
|
6
|
+
EntityAction,
|
|
4
7
|
EntityCollection,
|
|
5
8
|
EntityCustomView,
|
|
6
9
|
EntityValues,
|
|
@@ -26,9 +29,7 @@ import { getDefaultValuesFor, isPropertyBuilder } from "./entities";
|
|
|
26
29
|
import { DEFAULT_ONE_OF_TYPE } from "./common";
|
|
27
30
|
import { getIn } from "@firecms/formex";
|
|
28
31
|
import { enumToObjectEntries } from "./enums";
|
|
29
|
-
import { isDefaultFieldConfigId } from "../core
|
|
30
|
-
|
|
31
|
-
// import util from "util";
|
|
32
|
+
import { isDefaultFieldConfigId } from "../core";
|
|
32
33
|
|
|
33
34
|
export const resolveCollection = <M extends Record<string, any>, >
|
|
34
35
|
({
|
|
@@ -38,8 +39,9 @@ export const resolveCollection = <M extends Record<string, any>, >
|
|
|
38
39
|
values,
|
|
39
40
|
previousValues,
|
|
40
41
|
userConfigPersistence,
|
|
41
|
-
|
|
42
|
-
ignoreMissingFields = false
|
|
42
|
+
propertyConfigs,
|
|
43
|
+
ignoreMissingFields = false,
|
|
44
|
+
authController
|
|
43
45
|
}: {
|
|
44
46
|
collection: EntityCollection<M> | ResolvedEntityCollection<M>;
|
|
45
47
|
path: string,
|
|
@@ -47,8 +49,9 @@ export const resolveCollection = <M extends Record<string, any>, >
|
|
|
47
49
|
values?: Partial<EntityValues<M>>,
|
|
48
50
|
previousValues?: Partial<EntityValues<M>>,
|
|
49
51
|
userConfigPersistence?: UserConfigurationPersistence;
|
|
50
|
-
|
|
52
|
+
propertyConfigs?: Record<string, PropertyConfig>;
|
|
51
53
|
ignoreMissingFields?: boolean;
|
|
54
|
+
authController: AuthController;
|
|
52
55
|
}): ResolvedEntityCollection<M> => {
|
|
53
56
|
|
|
54
57
|
const collectionOverride = userConfigPersistence?.getCollectionConfig<M>(path);
|
|
@@ -67,8 +70,9 @@ export const resolveCollection = <M extends Record<string, any>, >
|
|
|
67
70
|
previousValues: usedPreviousValues,
|
|
68
71
|
path,
|
|
69
72
|
entityId,
|
|
70
|
-
|
|
71
|
-
ignoreMissingFields
|
|
73
|
+
propertyConfigs: propertyConfigs,
|
|
74
|
+
ignoreMissingFields,
|
|
75
|
+
authController
|
|
72
76
|
});
|
|
73
77
|
if (!childResolvedProperty) return {};
|
|
74
78
|
return ({
|
|
@@ -111,8 +115,9 @@ export function resolveProperty<T extends CMSType = CMSType, M extends Record<st
|
|
|
111
115
|
entityId?: string,
|
|
112
116
|
index?: number,
|
|
113
117
|
fromBuilder?: boolean;
|
|
114
|
-
|
|
118
|
+
propertyConfigs?: Record<string, PropertyConfig<any>>;
|
|
115
119
|
ignoreMissingFields?: boolean;
|
|
120
|
+
authController: AuthController;
|
|
116
121
|
}): ResolvedProperty<T> | null {
|
|
117
122
|
|
|
118
123
|
if (typeof propertyOrBuilder === "object" && "resolved" in propertyOrBuilder) {
|
|
@@ -182,7 +187,7 @@ export function resolveProperty<T extends CMSType = CMSType, M extends Record<st
|
|
|
182
187
|
}
|
|
183
188
|
|
|
184
189
|
if (resolvedProperty.propertyConfig && !isDefaultFieldConfigId(resolvedProperty.propertyConfig)) {
|
|
185
|
-
const cmsFields = props.
|
|
190
|
+
const cmsFields = props.propertyConfigs;
|
|
186
191
|
if (!cmsFields && !ignoreMissingFields) {
|
|
187
192
|
throw Error(`Trying to resolve a property with key '${resolvedProperty.propertyConfig}' that inherits from a custom property config but no custom property configs were provided. Use the property 'propertyConfigs' in your app config to provide them`);
|
|
188
193
|
}
|
|
@@ -217,6 +222,39 @@ export function resolveProperty<T extends CMSType = CMSType, M extends Record<st
|
|
|
217
222
|
: null;
|
|
218
223
|
}
|
|
219
224
|
|
|
225
|
+
export function getArrayResolvedProperties<M>({
|
|
226
|
+
propertyKey,
|
|
227
|
+
propertyValue,
|
|
228
|
+
property,
|
|
229
|
+
...props
|
|
230
|
+
}: {
|
|
231
|
+
propertyValue: any,
|
|
232
|
+
propertyKey?: string,
|
|
233
|
+
property: ArrayProperty<any> | ResolvedArrayProperty<any>,
|
|
234
|
+
ignoreMissingFields: boolean,
|
|
235
|
+
values?: Partial<M>;
|
|
236
|
+
previousValues?: Partial<M>;
|
|
237
|
+
path?: string;
|
|
238
|
+
entityId?: string;
|
|
239
|
+
index?: number;
|
|
240
|
+
fromBuilder?: boolean;
|
|
241
|
+
propertyConfigs?: Record<string, PropertyConfig>;
|
|
242
|
+
authController: AuthController;
|
|
243
|
+
}) {
|
|
244
|
+
|
|
245
|
+
const of = property.of;
|
|
246
|
+
return Array.isArray(propertyValue)
|
|
247
|
+
? propertyValue.map((v: any, index: number) => {
|
|
248
|
+
return resolveProperty({
|
|
249
|
+
propertyKey: `${propertyKey}.${index}`,
|
|
250
|
+
propertyOrBuilder: of,
|
|
251
|
+
...props,
|
|
252
|
+
index
|
|
253
|
+
});
|
|
254
|
+
}).filter(e => Boolean(e)) as ResolvedProperty[]
|
|
255
|
+
: [];
|
|
256
|
+
}
|
|
257
|
+
|
|
220
258
|
export function resolveArrayProperty<T extends any[], M>({
|
|
221
259
|
propertyKey,
|
|
222
260
|
property,
|
|
@@ -231,8 +269,9 @@ export function resolveArrayProperty<T extends any[], M>({
|
|
|
231
269
|
entityId?: string,
|
|
232
270
|
index?: number,
|
|
233
271
|
fromBuilder?: boolean;
|
|
234
|
-
|
|
272
|
+
propertyConfigs?: Record<string, PropertyConfig>;
|
|
235
273
|
ignoreMissingFields?: boolean;
|
|
274
|
+
authController: AuthController;
|
|
236
275
|
}): ResolvedArrayProperty {
|
|
237
276
|
const propertyValue = propertyKey ? getIn(props.values, propertyKey) : undefined;
|
|
238
277
|
|
|
@@ -248,23 +287,19 @@ export function resolveArrayProperty<T extends any[], M>({
|
|
|
248
287
|
propertyOrBuilder: p as Property<any>,
|
|
249
288
|
ignoreMissingFields,
|
|
250
289
|
...props,
|
|
251
|
-
index
|
|
290
|
+
index,
|
|
252
291
|
});
|
|
253
292
|
})
|
|
254
293
|
} as ResolvedArrayProperty;
|
|
255
294
|
} else {
|
|
256
295
|
const of = property.of;
|
|
257
|
-
const resolvedProperties
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
index
|
|
265
|
-
});
|
|
266
|
-
}).filter(e => Boolean(e)) as ResolvedProperty[]
|
|
267
|
-
: [];
|
|
296
|
+
const resolvedProperties = getArrayResolvedProperties({
|
|
297
|
+
propertyValue,
|
|
298
|
+
propertyKey,
|
|
299
|
+
property,
|
|
300
|
+
ignoreMissingFields,
|
|
301
|
+
...props
|
|
302
|
+
});
|
|
268
303
|
const ofProperty = resolveProperty({
|
|
269
304
|
propertyOrBuilder: of,
|
|
270
305
|
ignoreMissingFields,
|
|
@@ -342,8 +377,9 @@ export function resolveProperties<M extends Record<string, any>>({
|
|
|
342
377
|
entityId?: string,
|
|
343
378
|
index?: number,
|
|
344
379
|
fromBuilder?: boolean;
|
|
345
|
-
|
|
380
|
+
propertyConfigs?: Record<string, PropertyConfig>;
|
|
346
381
|
ignoreMissingFields?: boolean;
|
|
382
|
+
authController: AuthController;
|
|
347
383
|
}): ResolvedProperties<M> {
|
|
348
384
|
return Object.entries<PropertyOrBuilder>(properties as Record<string, PropertyOrBuilder>)
|
|
349
385
|
.map(([key, property]) => {
|
|
@@ -402,3 +438,36 @@ export function resolveEntityView(entityView: string | EntityCustomView<any>, co
|
|
|
402
438
|
return entityView;
|
|
403
439
|
}
|
|
404
440
|
}
|
|
441
|
+
|
|
442
|
+
export function resolveEntityAction<M extends Record<string, any>>(
|
|
443
|
+
entityAction: string | EntityAction<M>,
|
|
444
|
+
contextEntityActions?: EntityAction<M>[]
|
|
445
|
+
): EntityAction<M> | undefined {
|
|
446
|
+
if (typeof entityAction === "string") {
|
|
447
|
+
return contextEntityActions?.find((entry) => entry.key === entityAction);
|
|
448
|
+
} else {
|
|
449
|
+
return entityAction;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
export function resolvedSelectedEntityView<M extends Record<string, any>>(
|
|
454
|
+
customViews: (string | EntityCustomView<M>)[] | undefined,
|
|
455
|
+
customizationController: CustomizationController,
|
|
456
|
+
selectedTab?: string,
|
|
457
|
+
canEdit?: boolean,
|
|
458
|
+
) {
|
|
459
|
+
const resolvedEntityViews = customViews ? customViews
|
|
460
|
+
.map(e => resolveEntityView(e, customizationController.entityViews))
|
|
461
|
+
.filter((e): e is EntityCustomView<M> => Boolean(e))
|
|
462
|
+
// .filter((e) => canEdit || !e.includeActions)
|
|
463
|
+
: [];
|
|
464
|
+
|
|
465
|
+
const selectedEntityView = resolvedEntityViews.find(e => e.key === selectedTab);
|
|
466
|
+
const selectedSecondaryForm = customViews
|
|
467
|
+
&& resolvedEntityViews.filter(e => e.includeActions).find(e => e.key === selectedTab);
|
|
468
|
+
return {
|
|
469
|
+
resolvedEntityViews,
|
|
470
|
+
selectedEntityView,
|
|
471
|
+
selectedSecondaryForm
|
|
472
|
+
};
|
|
473
|
+
}
|
package/src/util/storage.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
|
+
ArrayProperty,
|
|
2
3
|
EntityValues,
|
|
4
|
+
PropertyOrBuilder,
|
|
3
5
|
ResolvedArrayProperty,
|
|
4
6
|
ResolvedStringProperty,
|
|
5
7
|
StorageConfig,
|
|
8
|
+
StringProperty,
|
|
6
9
|
UploadedFileContext
|
|
7
10
|
} from "../types";
|
|
8
11
|
import { randomString } from "./strings";
|
|
@@ -13,12 +16,12 @@ interface ResolveFilenameStringParams<M extends object> {
|
|
|
13
16
|
values: EntityValues<M>;
|
|
14
17
|
entityId: string;
|
|
15
18
|
path?: string;
|
|
16
|
-
property: ResolvedStringProperty | ResolvedArrayProperty<string[]
|
|
19
|
+
property: ResolvedStringProperty | ResolvedArrayProperty<string[]>,
|
|
17
20
|
file: File;
|
|
18
21
|
propertyKey: string;
|
|
19
22
|
}
|
|
20
23
|
|
|
21
|
-
export async function
|
|
24
|
+
export async function resolveStorageFilenameString<M extends object>(
|
|
22
25
|
{
|
|
23
26
|
input,
|
|
24
27
|
storage,
|
|
@@ -30,6 +33,7 @@ export async function resolveFilenameString<M extends object>(
|
|
|
30
33
|
propertyKey
|
|
31
34
|
}: ResolveFilenameStringParams<M>): Promise<string> {
|
|
32
35
|
let result;
|
|
36
|
+
|
|
33
37
|
if (typeof input === "function") {
|
|
34
38
|
result = await input({
|
|
35
39
|
path,
|
|
@@ -2,9 +2,11 @@ import Resizer from "react-image-file-resizer";
|
|
|
2
2
|
import equal from "react-fast-compare";
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
|
+
ArrayProperty,
|
|
5
6
|
EntityValues,
|
|
6
7
|
ImageCompression,
|
|
7
8
|
Property,
|
|
9
|
+
PropertyOrBuilder,
|
|
8
10
|
ResolvedArrayProperty,
|
|
9
11
|
ResolvedStringProperty,
|
|
10
12
|
StorageConfig,
|
|
@@ -14,7 +16,9 @@ import {
|
|
|
14
16
|
import { useCallback, useEffect, useState } from "react";
|
|
15
17
|
import { PreviewSize } from "../preview";
|
|
16
18
|
import { randomString } from "./strings";
|
|
17
|
-
import {
|
|
19
|
+
import { resolveStorageFilenameString, resolveStoragePathString } from "./storage";
|
|
20
|
+
import { resolveProperty } from "./resolutions";
|
|
21
|
+
import { useAuthController } from "../hooks";
|
|
18
22
|
|
|
19
23
|
/**
|
|
20
24
|
* Internal representation of an item in the storage
|
|
@@ -42,18 +46,19 @@ export function useStorageUploadController<M extends object>({
|
|
|
42
46
|
disabled,
|
|
43
47
|
onChange
|
|
44
48
|
}:
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
49
|
+
{
|
|
50
|
+
entityId: string,
|
|
51
|
+
entityValues: EntityValues<M>,
|
|
52
|
+
value: string | string[] | null;
|
|
53
|
+
path?: string,
|
|
54
|
+
propertyKey: string,
|
|
55
|
+
property: StringProperty | ArrayProperty<string[]> | ResolvedStringProperty | ResolvedArrayProperty<string[]>,
|
|
56
|
+
storageSource: StorageSource,
|
|
57
|
+
disabled: boolean,
|
|
58
|
+
onChange: (value: string | string[] | null) => void
|
|
59
|
+
}) {
|
|
60
|
+
|
|
61
|
+
const authController = useAuthController();
|
|
57
62
|
const storage: StorageConfig | undefined = property.dataType === "string"
|
|
58
63
|
? property.storage
|
|
59
64
|
: property.dataType === "array" &&
|
|
@@ -66,22 +71,15 @@ export function useStorageUploadController<M extends object>({
|
|
|
66
71
|
if (!storage)
|
|
67
72
|
throw Error("Storage meta must be specified");
|
|
68
73
|
|
|
74
|
+
const processFile = storage?.processFile;
|
|
75
|
+
|
|
69
76
|
const metadata: Record<string, any> | undefined = storage?.metadata;
|
|
70
|
-
const size = multipleFilesSupported ? "
|
|
77
|
+
const size = multipleFilesSupported ? "medium" : "large";
|
|
71
78
|
|
|
72
79
|
const compression: ImageCompression | undefined = storage?.imageCompression;
|
|
73
80
|
|
|
74
81
|
const internalInitialValue: StorageFieldItem[] =
|
|
75
|
-
(multipleFilesSupported
|
|
76
|
-
? (value ?? []) as string[]
|
|
77
|
-
: value ? [value as string] : []).map(entry => (
|
|
78
|
-
{
|
|
79
|
-
id: getRandomId(),
|
|
80
|
-
storagePathOrDownloadUrl: entry,
|
|
81
|
-
metadata,
|
|
82
|
-
size
|
|
83
|
-
}
|
|
84
|
-
));
|
|
82
|
+
getInternalInitialValue(multipleFilesSupported, value, metadata, size);
|
|
85
83
|
|
|
86
84
|
const [initialValue, setInitialValue] = useState<string | string[] | null>(value);
|
|
87
85
|
const [internalValue, setInternalValue] = useState<StorageFieldItem[]>(internalInitialValue);
|
|
@@ -93,15 +91,21 @@ export function useStorageUploadController<M extends object>({
|
|
|
93
91
|
}
|
|
94
92
|
}, [internalInitialValue, value, initialValue]);
|
|
95
93
|
|
|
94
|
+
const resolvedProperty = resolveProperty({
|
|
95
|
+
propertyOrBuilder: property as PropertyOrBuilder,
|
|
96
|
+
values: entityValues,
|
|
97
|
+
authController
|
|
98
|
+
}) as ResolvedStringProperty | ResolvedArrayProperty<string[]>;
|
|
99
|
+
|
|
96
100
|
const fileNameBuilder = useCallback(async (file: File) => {
|
|
97
101
|
if (storage.fileName) {
|
|
98
|
-
const fileName = await
|
|
102
|
+
const fileName = await resolveStorageFilenameString({
|
|
99
103
|
input: storage.fileName,
|
|
100
104
|
storage,
|
|
101
105
|
values: entityValues,
|
|
102
106
|
entityId,
|
|
103
107
|
path,
|
|
104
|
-
property,
|
|
108
|
+
property: resolvedProperty,
|
|
105
109
|
file,
|
|
106
110
|
propertyKey
|
|
107
111
|
});
|
|
@@ -111,7 +115,7 @@ export function useStorageUploadController<M extends object>({
|
|
|
111
115
|
return fileName;
|
|
112
116
|
}
|
|
113
117
|
return randomString() + "_" + file.name;
|
|
114
|
-
}, [entityId, entityValues, path,
|
|
118
|
+
}, [entityId, entityValues, path, resolvedProperty, propertyKey, storage]);
|
|
115
119
|
|
|
116
120
|
const storagePathBuilder = useCallback((file: File) => {
|
|
117
121
|
return resolveStoragePathString({
|
|
@@ -120,11 +124,11 @@ export function useStorageUploadController<M extends object>({
|
|
|
120
124
|
values: entityValues,
|
|
121
125
|
entityId,
|
|
122
126
|
path,
|
|
123
|
-
property,
|
|
127
|
+
property: resolvedProperty,
|
|
124
128
|
file,
|
|
125
129
|
propertyKey
|
|
126
130
|
}) ?? "/";
|
|
127
|
-
}, [entityId, entityValues, path,
|
|
131
|
+
}, [entityId, entityValues, path, resolvedProperty, propertyKey, storage]);
|
|
128
132
|
|
|
129
133
|
const onFileUploadComplete = useCallback(async (uploadedPath: string,
|
|
130
134
|
entry: StorageFieldItem,
|
|
@@ -170,7 +174,22 @@ export function useStorageUploadController<M extends object>({
|
|
|
170
174
|
if (!acceptedFiles.length || disabled)
|
|
171
175
|
return;
|
|
172
176
|
|
|
177
|
+
if (processFile) {
|
|
178
|
+
try {
|
|
179
|
+
acceptedFiles = await Promise.all(acceptedFiles.map(async file => {
|
|
180
|
+
const processedFile = await processFile(file);
|
|
181
|
+
if (!processedFile) {
|
|
182
|
+
return file;
|
|
183
|
+
}
|
|
184
|
+
return processedFile;
|
|
185
|
+
}));
|
|
186
|
+
} catch (e) {
|
|
187
|
+
console.error("Error processing file with custom code. Attempting to continue uploading.", e);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
173
191
|
let newInternalValue: StorageFieldItem[];
|
|
192
|
+
|
|
174
193
|
if (multipleFilesSupported) {
|
|
175
194
|
newInternalValue = [...internalValue,
|
|
176
195
|
...(await Promise.all(acceptedFiles.map(async file => {
|
|
@@ -218,6 +237,32 @@ export function useStorageUploadController<M extends object>({
|
|
|
218
237
|
}
|
|
219
238
|
}
|
|
220
239
|
|
|
240
|
+
function getInternalInitialValue(multipleFilesSupported: boolean,
|
|
241
|
+
value: string | string[] | null,
|
|
242
|
+
metadata: Record<string, any> | undefined,
|
|
243
|
+
size: PreviewSize): StorageFieldItem[] {
|
|
244
|
+
let strings: string[] = [];
|
|
245
|
+
if (multipleFilesSupported) {
|
|
246
|
+
if (Array.isArray(value) && value.every((v) => typeof v === "string")) {
|
|
247
|
+
strings = (value ?? []) as string[];
|
|
248
|
+
}
|
|
249
|
+
} else {
|
|
250
|
+
if (typeof value === "string") {
|
|
251
|
+
strings = value ? [value as string] : [];
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
return strings
|
|
256
|
+
.map(entry => (
|
|
257
|
+
{
|
|
258
|
+
id: getRandomId(),
|
|
259
|
+
storagePathOrDownloadUrl: entry,
|
|
260
|
+
metadata,
|
|
261
|
+
size
|
|
262
|
+
}
|
|
263
|
+
));
|
|
264
|
+
}
|
|
265
|
+
|
|
221
266
|
function removeDuplicates(items: StorageFieldItem[]) {
|
|
222
267
|
return items.filter(
|
|
223
268
|
(item, i) => {
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { PropertiesOrBuilders } from "../types";
|
|
2
|
-
import { FormexController } from "@firecms/formex";
|
|
3
|
-
export type PropertiesFormProps<M extends Record<string, any> = Record<string, any>> = {
|
|
4
|
-
properties: PropertiesOrBuilders<M>;
|
|
5
|
-
propertiesOrder?: string[];
|
|
6
|
-
formex: FormexController<M>;
|
|
7
|
-
};
|
|
8
|
-
export declare function PropertiesForm<M extends Record<string, any> = Record<string, any>>({ properties, propertiesOrder, formex }: PropertiesFormProps<M>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
interface ArrayContainerProps<T> {
|
|
3
|
-
value: T[];
|
|
4
|
-
name: string;
|
|
5
|
-
addLabel: string;
|
|
6
|
-
buildEntry: (index: number, internalId: number) => React.ReactNode;
|
|
7
|
-
disabled?: boolean;
|
|
8
|
-
small?: boolean;
|
|
9
|
-
onInternalIdAdded?: (id: number) => void;
|
|
10
|
-
includeAddButton?: boolean;
|
|
11
|
-
newDefaultEntry?: T | null;
|
|
12
|
-
setFieldValue: (field: string, value: any, shouldValidate?: boolean | undefined) => void;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* @group Form custom fields
|
|
16
|
-
*/
|
|
17
|
-
export declare function FormikArrayContainer<T>({ name, addLabel, value, disabled, buildEntry, small, onInternalIdAdded, includeAddButton, newDefaultEntry, setFieldValue }: ArrayContainerProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
18
|
-
export {};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { FieldProps } from "../../types";
|
|
2
|
-
/**
|
|
3
|
-
* Render a markdown field that allows edition and seeing the preview.
|
|
4
|
-
*
|
|
5
|
-
* This is one of the internal components that get mapped natively inside forms
|
|
6
|
-
* and tables to the specified properties.
|
|
7
|
-
* @group Form fields
|
|
8
|
-
*/
|
|
9
|
-
export declare function MarkdownFieldBinding({ propertyKey, value, setValue, error, showError, disabled, autoFocus, touched, property, tableMode, includeDescription, context }: FieldProps<string>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { RefObject, useCallback, useEffect, useRef } from "react";
|
|
2
|
-
|
|
3
|
-
interface Props {
|
|
4
|
-
onResize: (event: Event) => void;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
export const ElementResizeListener: React.FC<Props> = ({ onResize }) => {
|
|
8
|
-
const rafRef = useRef(0);
|
|
9
|
-
const objectRef: RefObject<HTMLObjectElement> = useRef(null);
|
|
10
|
-
const onResizeRef = useRef(onResize);
|
|
11
|
-
|
|
12
|
-
onResizeRef.current = onResize;
|
|
13
|
-
|
|
14
|
-
const _onResize = useCallback((e: Event) => {
|
|
15
|
-
if (rafRef.current) {
|
|
16
|
-
cancelAnimationFrame(rafRef.current);
|
|
17
|
-
}
|
|
18
|
-
rafRef.current = requestAnimationFrame(() => {
|
|
19
|
-
onResizeRef.current(e);
|
|
20
|
-
});
|
|
21
|
-
}, []);
|
|
22
|
-
|
|
23
|
-
const onLoad = useCallback(() => {
|
|
24
|
-
const obj = objectRef.current;
|
|
25
|
-
if (obj && obj.contentDocument && obj.contentDocument.defaultView) {
|
|
26
|
-
obj.contentDocument.defaultView.addEventListener("resize", _onResize);
|
|
27
|
-
}
|
|
28
|
-
}, [_onResize]);
|
|
29
|
-
|
|
30
|
-
useEffect(() => {
|
|
31
|
-
const obj = objectRef.current;
|
|
32
|
-
return () => {
|
|
33
|
-
if (obj && obj.contentDocument && obj.contentDocument.defaultView) {
|
|
34
|
-
obj.contentDocument.defaultView.removeEventListener("resize", _onResize);
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
}, [_onResize]);
|
|
38
|
-
|
|
39
|
-
return (
|
|
40
|
-
<object
|
|
41
|
-
onLoad={onLoad}
|
|
42
|
-
ref={objectRef}
|
|
43
|
-
tabIndex={-1}
|
|
44
|
-
type={"text/html"}
|
|
45
|
-
data={"about:blank"}
|
|
46
|
-
title={""}
|
|
47
|
-
style={{
|
|
48
|
-
position: "absolute",
|
|
49
|
-
top: 0,
|
|
50
|
-
left: 0,
|
|
51
|
-
height: "100%",
|
|
52
|
-
width: "100%",
|
|
53
|
-
pointerEvents: "none",
|
|
54
|
-
zIndex: -1,
|
|
55
|
-
opacity: 0
|
|
56
|
-
}}
|
|
57
|
-
/>
|
|
58
|
-
);
|
|
59
|
-
};
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { ContentCopyIcon, IconButton, Typography } from "@firecms/ui";
|
|
2
|
-
import { useCallback, useState } from "react";
|
|
3
|
-
|
|
4
|
-
export function PropertyIdCopyTooltipContent({ propertyId }: { propertyId: string }) {
|
|
5
|
-
|
|
6
|
-
const [copied, setCopied] = useState(false);
|
|
7
|
-
|
|
8
|
-
return (
|
|
9
|
-
<div className={"flex flex-row gap-2 items-center justify-center text-white"}>
|
|
10
|
-
<div>
|
|
11
|
-
<Typography variant={"caption"} className={"min-w-20 text-slate-400"}
|
|
12
|
-
color={"disabled"}>{copied ? "Copied" : "Property ID"}</Typography>
|
|
13
|
-
<Typography variant={"caption"} className={"text-white"}><code>{propertyId}</code></Typography>
|
|
14
|
-
</div>
|
|
15
|
-
<IconButton size={"small"}>
|
|
16
|
-
<ContentCopyIcon size={"smallest"}
|
|
17
|
-
className={"text-white"}
|
|
18
|
-
onClick={useCallback(() => {
|
|
19
|
-
navigator.clipboard.writeText(propertyId);
|
|
20
|
-
setCopied(true);
|
|
21
|
-
setTimeout(() => setCopied(false), 2000);
|
|
22
|
-
}, [propertyId])}
|
|
23
|
-
/>
|
|
24
|
-
</IconButton>
|
|
25
|
-
</div>
|
|
26
|
-
);
|
|
27
|
-
}
|