import { ClipboardDocumentIcon, CheckIcon } from "@heroicons/react/24/outline"; import clsx from "clsx"; import { type ComponentProps, useCallback, useEffect, useState } from "react"; import { Button } from "react-aria-components"; import { useLogger } from "../../hooks/use-logger"; type CopyButtonProps = ComponentProps & { text: string; }; export const CopyButton = ({ text, children, className, ...props }: CopyButtonProps) => { const [isCopied, setIsCopied] = useState(false); const logger = useLogger(); const copy = useCallback(() => { navigator.clipboard .writeText(text) .then(() => { setIsCopied(true); }) .catch((error: unknown) => { /* TODO do something here? */ logger.error(error); }); }, [text, logger]); useEffect(() => { setIsCopied(false); }, [text]); useEffect(() => { if (isCopied) { const timeout = setTimeout(() => { setIsCopied(false); }, 2000); return () => { clearTimeout(timeout); }; } else { return; } }, [isCopied]); return ( ); };