The Node.js® Website
at main 756 B view raw
1'use client'; 2 3import { useEffect, useState } from 'react'; 4 5const copyToClipboard = (value: string | undefined) => { 6 if (!value || typeof navigator === 'undefined') { 7 return Promise.resolve(false); 8 } 9 10 return navigator.clipboard 11 .writeText(value) 12 .then(() => true) 13 .catch(() => false); 14}; 15 16const useCopyToClipboard = () => { 17 const [copied, setCopied] = useState(false); 18 19 const copyText = (text: string | undefined) => 20 copyToClipboard(text).then(setCopied); 21 22 useEffect(() => { 23 if (copied) { 24 const timerId = setTimeout(() => setCopied(false), 3000); 25 26 return () => clearTimeout(timerId); 27 } 28 29 return undefined; 30 }, [copied]); 31 32 return [copied, copyText] as const; 33}; 34 35export default useCopyToClipboard;