Files
bifrost/ui/hooks/useCopyToClipboard.ts
Beyhan Oğur 880f412e2c first commit
2026-04-26 21:52:23 +03:00

32 lines
944 B
TypeScript

import { useCallback, useRef, useState } from "react";
import { toast } from "sonner";
interface UseCopyToClipboardOptions {
successMessage?: string;
errorMessage?: string;
resetDelay?: number;
}
export function useCopyToClipboard(options: UseCopyToClipboardOptions = {}) {
const { successMessage = "Copied to clipboard", errorMessage = "Failed to copy", resetDelay = 2000 } = options;
const [copied, setCopied] = useState(false);
const timeoutRef = useRef<ReturnType<typeof setTimeout>>(undefined);
const copy = useCallback(
async (text: string) => {
try {
await navigator.clipboard.writeText(text);
setCopied(true);
toast.success(successMessage);
if (timeoutRef.current) clearTimeout(timeoutRef.current);
timeoutRef.current = setTimeout(() => setCopied(false), resetDelay);
} catch {
toast.error(errorMessage);
}
},
[successMessage, errorMessage, resetDelay],
);
return { copy, copied };
}