2024-09-14 19:43:14 -05:00
|
|
|
import { Button, type ButtonProps, Tooltip } from '@radix-ui/themes';
|
2024-08-11 12:44:16 -05:00
|
|
|
import { useState } from 'react';
|
2025-01-07 13:09:05 -06:00
|
|
|
import { useLocale } from '../hooks/useLocale';
|
2024-08-11 12:44:16 -05:00
|
|
|
|
|
|
|
|
interface CopyButtonProps extends ButtonProps {
|
|
|
|
|
copy: () => string | undefined;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function CopyButton({ copy, ...props }: CopyButtonProps) {
|
|
|
|
|
const [tooltipOpen, setTooltipOpen] = useState(false);
|
2025-01-07 13:09:05 -06:00
|
|
|
const { strings } = useLocale();
|
2024-08-11 12:44:16 -05:00
|
|
|
|
|
|
|
|
return (
|
2025-01-07 13:09:05 -06:00
|
|
|
<Tooltip
|
|
|
|
|
open={tooltipOpen}
|
|
|
|
|
content={strings.website.common.copy_button.copied}
|
|
|
|
|
>
|
2024-08-11 12:44:16 -05:00
|
|
|
<Button
|
|
|
|
|
{...props}
|
|
|
|
|
onClick={() => {
|
|
|
|
|
const content = copy();
|
|
|
|
|
|
|
|
|
|
if (content === undefined) return;
|
|
|
|
|
|
|
|
|
|
navigator.clipboard.writeText(content);
|
|
|
|
|
setTooltipOpen(true);
|
|
|
|
|
setTimeout(() => setTooltipOpen(false), 2000);
|
|
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
</Tooltip>
|
|
|
|
|
);
|
|
|
|
|
}
|