36 lines
667 B
TypeScript
36 lines
667 B
TypeScript
'use client';
|
|
|
|
import * as React from 'react';
|
|
|
|
export function useCopyToClipboard({
|
|
timeout = 2000,
|
|
onCopy,
|
|
}: {
|
|
timeout?: number;
|
|
onCopy?: () => void;
|
|
} = {}) {
|
|
const [isCopied, setIsCopied] = React.useState(false);
|
|
|
|
const copyToClipboard = (value: string) => {
|
|
if (typeof window === 'undefined' || !navigator.clipboard.writeText) {
|
|
return;
|
|
}
|
|
|
|
if (!value) return;
|
|
|
|
navigator.clipboard.writeText(value).then(() => {
|
|
setIsCopied(true);
|
|
|
|
if (onCopy) {
|
|
onCopy();
|
|
}
|
|
|
|
setTimeout(() => {
|
|
setIsCopied(false);
|
|
}, timeout);
|
|
}, console.error);
|
|
};
|
|
|
|
return { isCopied, copyToClipboard };
|
|
}
|