import type { ComponentProps } from 'react'; import React, { useCallback, useState } from 'react'; import cx from 'classnames'; import { useCopyToClipboard } from 'react-use'; import I18N from '../../i18n'; import { Button } from '../button'; import { Icon } from '../icon'; import { Tooltip } from '../tooltip'; import css from './copy-to-clipboard.module.css'; export type CopyToClipboardProps = { /** * Text to copy to clipboard */ text: string; } & ComponentProps; export const CopyToClipboard = (props: CopyToClipboardProps) => { const { className = '', children, text, ...restProps } = props; const [, copyToClipboard] = useCopyToClipboard(); const [doneTimeout, setDoneTimeout] = useState | null>(); const handleOnClick = useCallback(() => { if (doneTimeout) { clearTimeout(doneTimeout); setDoneTimeout(null); } setDoneTimeout(null); copyToClipboard(text); const done = setTimeout(() => setDoneTimeout(null), 2000); setDoneTimeout(done); }, [text, doneTimeout, setDoneTimeout]); const rootClassName = cx(css.root, className, doneTimeout && css.done); return ( {children} ); };