INit
This commit is contained in:
32
resources/js/hooks/use-clipboard.ts
Normal file
32
resources/js/hooks/use-clipboard.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
// Credit: https://usehooks-ts.com/
|
||||
import { useCallback, useState } from 'react';
|
||||
|
||||
type CopiedValue = string | null;
|
||||
|
||||
type CopyFn = (text: string) => Promise<boolean>;
|
||||
|
||||
export function useClipboard(): [CopiedValue, CopyFn] {
|
||||
const [copiedText, setCopiedText] = useState<CopiedValue>(null);
|
||||
|
||||
const copy: CopyFn = useCallback(async (text) => {
|
||||
if (!navigator?.clipboard) {
|
||||
console.warn('Clipboard not supported');
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
await navigator.clipboard.writeText(text);
|
||||
setCopiedText(text);
|
||||
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.warn('Copy failed', error);
|
||||
setCopiedText(null);
|
||||
|
||||
return false;
|
||||
}
|
||||
}, []);
|
||||
|
||||
return [copiedText, copy];
|
||||
}
|
||||
Reference in New Issue
Block a user