llama-stack-mirror/llama_stack/ui/hooks/use-copy-to-clipboard.ts
2025-08-14 15:58:43 -06:00

36 lines
940 B
TypeScript

import { useCallback, useRef, useState } from "react";
import { toast } from "sonner";
type UseCopyToClipboardProps = {
text: string;
copyMessage?: string;
};
export function useCopyToClipboard({
text,
copyMessage = "Copied to clipboard!",
}: UseCopyToClipboardProps) {
const [isCopied, setIsCopied] = useState(false);
const timeoutRef = useRef<NodeJS.Timeout | null>(null);
const handleCopy = useCallback(() => {
navigator.clipboard
.writeText(text)
.then(() => {
toast.success(copyMessage);
setIsCopied(true);
if (timeoutRef.current) {
clearTimeout(timeoutRef.current);
timeoutRef.current = null;
}
timeoutRef.current = setTimeout(() => {
setIsCopied(false);
}, 2000);
})
.catch(() => {
toast.error("Failed to copy to clipboard.");
});
}, [text, copyMessage]);
return { isCopied, handleCopy };
}