UNPKG

@nex-ui/hooks

Version:

A collection of React Hooks for Nex UI components.

45 lines (41 loc) 1.31 kB
"use client"; 'use strict'; var react = require('react'); /** * Copies the given text to the clipboard. * @param {number} timeout - timeout in ms, default 2000 * @returns {copy, copied, error, reset} - copy function, copied state, error state, reset function */ function useClipboard({ timeout = 2000 } = {}) { const [error, setError] = react.useState(null); const [copied, setCopied] = react.useState(false); const [copyTimeout, setCopyTimeout] = react.useState(null); const onClearTimeout = ()=>{ if (copyTimeout) { clearTimeout(copyTimeout); } }; const handleCopyResult = (value)=>{ onClearTimeout(); setCopyTimeout(setTimeout(()=>setCopied(false), timeout)); setCopied(value); }; const copy = (valueToCopy)=>{ if ('clipboard' in navigator) { navigator.clipboard.writeText(valueToCopy).then(()=>handleCopyResult(true)).catch((err)=>setError(err)); } else { setError(new Error('useClipboard: navigator.clipboard is not supported')); } }; const reset = ()=>{ setCopied(false); setError(null); onClearTimeout(); }; return { copy, reset, error, copied }; } exports.useClipboard = useClipboard;