import React from 'react'; import {Link} from '@gravity-ui/icons'; import type {ButtonButtonProps, CopyToClipboardStatus} from '@gravity-ui/uikit'; import {ActionTooltip, Button, CopyToClipboard, Icon} from '@gravity-ui/uikit'; import {cn} from '../../utils/cn'; import i18n from './i18n'; import './CopyLinkButton.scss'; const b = cn('ydb-copy-link-button'); interface LinkButtonComponentProps extends ButtonButtonProps { hasTooltip?: boolean; status: CopyToClipboardStatus; closeDelay?: number; title?: string; } const DEFAULT_TIMEOUT = 1200; const TOOLTIP_ANIMATION = 200; const LinkButtonComponent = (props: LinkButtonComponentProps) => { const {size = 'm', hasTooltip = true, status, closeDelay, title, ...rest} = props; const baseTitle = title ?? i18n('description_copy'); return ( ); }; export interface CopyLinkButtonProps extends ButtonButtonProps { text: string; } export function CopyLinkButton(props: CopyLinkButtonProps) { const {text, ...buttonProps} = props; const timerIdRef = React.useRef(); const [tooltipCloseDelay, setTooltipCloseDelay] = React.useState(undefined); const [tooltipDisabled, setTooltipDisabled] = React.useState(false); const timeout = DEFAULT_TIMEOUT; React.useEffect(() => window.clearTimeout(timerIdRef.current), []); const handleCopy = React.useCallback(() => { setTooltipDisabled(false); setTooltipCloseDelay(timeout); window.clearTimeout(timerIdRef.current); timerIdRef.current = window.setTimeout(() => { setTooltipDisabled(true); }, timeout - TOOLTIP_ANIMATION); }, [timeout]); return ( {(status) => ( )} ); }