@atlaskit/renderer
Version:
Renderer component
65 lines • 2.73 kB
JavaScript
/**
* @jsxRuntime classic
* @jsx jsx
*/
import Button from '@atlaskit/button/custom-theme-button';
import { codeBlockButtonMessages } from '@atlaskit/editor-common/messages';
import CopyIcon from '@atlaskit/icon/core/copy';
import Tooltip from '@atlaskit/tooltip';
// eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
import { jsx } from '@emotion/react';
import { useState } from 'react';
import { injectIntl } from 'react-intl';
import AnalyticsContext from '../../../../analytics/analyticsContext';
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE } from '../../../../analytics/enums';
import { copyTextToClipboard } from '../../../utils/clipboard';
const CopyButton = ({
content,
intl
}) => {
const [tooltip, setTooltip] = useState(intl.formatMessage(codeBlockButtonMessages.copyCodeToClipboard));
const [className, setClassName] = useState('copy-to-clipboard');
const onMouseLeave = () => {
setTooltip(intl.formatMessage(codeBlockButtonMessages.copyCodeToClipboard));
setClassName('copy-to-clipboard');
};
return jsx(AnalyticsContext.Consumer, null, ({
fireAnalyticsEvent
}) => jsx("span", null, jsx(Tooltip, {
content: tooltip,
hideTooltipOnClick: false,
position: "top"
}, jsx("div", {
onMouseLeave: onMouseLeave,
onBlur: onMouseLeave
}, jsx(Button, {
appearance: "subtle",
"aria-haspopup": true,
"aria-label": tooltip
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
,
className: className,
iconBefore: jsx(CopyIcon, {
label: tooltip
})
// eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed)
,
onClick: event => {
fireAnalyticsEvent({
// @ts-expect-error - Type 'ACTION.CLICKED' is not assignable to type 'ACTION.CLICKED | ACTION.MEDIA_LINK_TRANSFORMED | ACTION.STARTED | ACTION.TOGGLE_EXPAND | ACTION.UNSUPPORTED_CONTENT_ENCOUNTERED | ACTION.VISITED | ACTION.RENDERED | ACTION.INVALID_PROSEMIRROR_DOCUMENT | ACTION.CRASHED | ... 6 more ... | AnnotationActionType'.
// This error was introduced after upgrading to TypeScript 5
action: ACTION.CLICKED,
actionSubject: ACTION_SUBJECT.BUTTON,
actionSubjectId: ACTION_SUBJECT_ID.CODEBLOCK_COPY,
eventType: EVENT_TYPE.UI
});
copyTextToClipboard(content);
setTooltip(intl.formatMessage(codeBlockButtonMessages.copiedCodeToClipboard));
setClassName('copy-to-clipboard clicked');
event.stopPropagation();
},
spacing: "compact"
})))));
};
const _default_1 = injectIntl(CopyButton);
export default _default_1;