diff --git a/.changeset/warm-days-watch.md b/.changeset/warm-days-watch.md new file mode 100644 index 0000000000..b0a211c7a8 --- /dev/null +++ b/.changeset/warm-days-watch.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog': patch +--- + +Added support for copy entity URL in entity page context menu diff --git a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx index 41610ed13c..49952bdffe 100644 --- a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx +++ b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx @@ -26,12 +26,14 @@ import { import { makeStyles } from '@material-ui/core/styles'; import BugReportIcon from '@material-ui/icons/BugReport'; import MoreVert from '@material-ui/icons/MoreVert'; -import React, { useState } from 'react'; +import FileCopyTwoToneIcon from '@material-ui/icons/FileCopyTwoTone'; +import React, { useCallback, useState } from 'react'; import { IconComponent } from '@backstage/core-plugin-api'; import { useEntityPermission } from '@backstage/plugin-catalog-react'; import { catalogEntityDeletePermission } from '@backstage/plugin-catalog-common'; import { BackstageTheme } from '@backstage/theme'; import { UnregisterEntity, UnregisterEntityOptions } from './UnregisterEntity'; +import { useApi, alertApiRef } from '@backstage/core-plugin-api'; /** @public */ export type EntityContextMenuClassKey = 'button'; @@ -84,6 +86,14 @@ export function EntityContextMenu(props: EntityContextMenuProps) { setAnchorEl(undefined); }; + const alertApi = useApi(alertApiRef); + + const copyToClipboard = useCallback(() => { + navigator.clipboard + .writeText(window.location.toString()) + .then(() => alertApi.post({ message: 'Copied!', severity: 'info' })); + }, [alertApi]); + const extraItems = UNSTABLE_extraContextMenuItems && [ ...UNSTABLE_extraContextMenuItems.map(item => ( + { + onClose(); + copyToClipboard(); + }} + > + + + + +