From bc7e6d3eb9333a2f737f66f05493ff358aea6933 Mon Sep 17 00:00:00 2001 From: mingfu Date: Tue, 14 Nov 2023 21:05:09 +0800 Subject: [PATCH] fix: copy entity URL support insecure contexts Signed-off-by: mingfu --- .changeset/empty-dingos-grow.md | 5 +++++ .../EntityContextMenu/EntityContextMenu.tsx | 17 +++++++++-------- 2 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 .changeset/empty-dingos-grow.md diff --git a/.changeset/empty-dingos-grow.md b/.changeset/empty-dingos-grow.md new file mode 100644 index 0000000000..8a43cd210f --- /dev/null +++ b/.changeset/empty-dingos-grow.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog': patch +--- + +Fix copy entity url function in http contexts. diff --git a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx index 9cd377b447..0fc746f455 100644 --- a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx +++ b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx @@ -28,12 +28,13 @@ import { Theme, makeStyles } from '@material-ui/core/styles'; import BugReportIcon from '@material-ui/icons/BugReport'; import MoreVert from '@material-ui/icons/MoreVert'; import FileCopyTwoToneIcon from '@material-ui/icons/FileCopyTwoTone'; -import React, { useCallback, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { IconComponent } from '@backstage/core-plugin-api'; import { useEntityPermission } from '@backstage/plugin-catalog-react/alpha'; import { catalogEntityDeletePermission } from '@backstage/plugin-catalog-common/alpha'; import { UnregisterEntity, UnregisterEntityOptions } from './UnregisterEntity'; import { useApi, alertApiRef } from '@backstage/core-plugin-api'; +import useCopyToClipboard from 'react-use/lib/useCopyToClipboard'; /** @public */ export type EntityContextMenuClassKey = 'button'; @@ -87,16 +88,16 @@ export function EntityContextMenu(props: EntityContextMenuProps) { }; const alertApi = useApi(alertApiRef); - - const copyToClipboard = useCallback(() => { - window.navigator.clipboard.writeText(window.location.toString()).then(() => + const [copyState, copyToClipboard] = useCopyToClipboard(); + useEffect(() => { + if (!copyState.error && copyState.value) { alertApi.post({ message: 'Copied!', severity: 'info', display: 'transient', - }), - ); - }, [alertApi]); + }); + } + }, [copyState, alertApi]); const extraItems = UNSTABLE_extraContextMenuItems && [ ...UNSTABLE_extraContextMenuItems.map(item => ( @@ -163,7 +164,7 @@ export function EntityContextMenu(props: EntityContextMenuProps) { { onClose(); - copyToClipboard(); + copyToClipboard(window.location.toString()); }} >