mirror of
https://github.com/meta-llama/llama-stack.git
synced 2025-08-15 14:08:00 +00:00
36 lines
940 B
TypeScript
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 };
|
|
}
|