UseCopyToClipboard
guarahooks/use-copy-to-clipboardFreeHook
Copies text to the clipboard.
Install it
npx shadcn@latest add https://guarahooks.com/r/use-copy-to-clipboard.jsonSource
1'use client';23import { useCallback, useEffect, useRef, useState } from 'react';45type UseCopyToClipboardReturn = {6 copied: boolean;7 copy: (text: string) => Promise<boolean>;8};910// Fallback to old browsers11function fallbackCopy(str: string): boolean {12 const textarea = document.createElement('textarea');13 let success = false;1415 textarea.value = str;16 textarea.setAttribute('readonly', '');1718 textarea.style.position = 'absolute';19 textarea.style.left = '-9999px';2021 document.body.appendChild(textarea);2223 textarea.select();2425 try {26 success = document.execCommand('copy');27 } catch {28 success = false;29 } finally {30 document.body.removeChild(textarea);31 }3233 return success;34}3536export function useCopyToClipboard(37 duration: number = 1500,38): UseCopyToClipboardReturn {39 const [copied, setCopied] = useState<boolean>(false);40 const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);4142 const copy = useCallback(43 async (text: string): Promise<boolean> => {44 try {45 let success = false;4647 if (navigator.clipboard && navigator.clipboard.writeText) {48 await navigator.clipboard.writeText(text);49 success = true;50 } else {51 success = fallbackCopy(text);52 }5354 if (success) {55 setCopied(true);56 if (timeoutRef.current) clearTimeout(timeoutRef.current);57 timeoutRef.current = setTimeout(() => setCopied(false), duration);58 return true;59 } else {60 throw new Error('Copy command failed');61 }62 } catch (err: unknown) {63 console.error('Failed to copy text: ', err);64 return false;65 }66 },67 [duration],68 );6970 useEffect(() => {71 return () => {72 if (timeoutRef.current) {73 clearTimeout(timeoutRef.current);74 }75 };76 }, []);7778 return {79 copied,80 copy,81 };82}
Files it writes
More from guarahooks
All 100 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| UseAbortControlleruse-abort-controller | guarahooks | Hooks | Free | no deps | |
| UseArrayStateuse-array-state | guarahooks | Hooks | Free | no deps | |
| UseAxiosuse-axios | guarahooks | Hooks | Free | no deps | |
| UseBatteryStatususe-battery-status | guarahooks | Hooks | Free | no deps | |
| UseBetterAuthuse-better-auth | guarahooks | Hooks | Free | no deps | |
| UseClickOutsideuse-click-outside | guarahooks | Hooks | Free | no deps | |
| UseConfirmuse-confirm | guarahooks | Hooks | Free | no deps | |
| UseCookieuse-cookie | guarahooks | Hooks | Free | no deps |
