mirror of
https://github.com/meta-llama/llama-stack.git
synced 2025-07-27 06:28:50 +00:00
36 lines
923 B
TypeScript
36 lines
923 B
TypeScript
import { useCallback, useRef, useState } from "react"
|
|
import { toast } from "sonner"
|
|
|
|
type UseCopyToClipboardProps = {
|
|
text: string
|
|
copyMessage?: string
|
|
}
|
|
|
|
export function useCopyToClipboard({
|
|
text,
|
|
copyMessage = "Copied to clipboard!",
|
|
}: UseCopyToClipboardProps) {
|
|
const [isCopied, setIsCopied] = useState(false)
|
|
const timeoutRef = useRef<NodeJS.Timeout | null>(null)
|
|
|
|
const handleCopy = useCallback(() => {
|
|
navigator.clipboard
|
|
.writeText(text)
|
|
.then(() => {
|
|
toast.success(copyMessage)
|
|
setIsCopied(true)
|
|
if (timeoutRef.current) {
|
|
clearTimeout(timeoutRef.current)
|
|
timeoutRef.current = null
|
|
}
|
|
timeoutRef.current = setTimeout(() => {
|
|
setIsCopied(false)
|
|
}, 2000)
|
|
})
|
|
.catch(() => {
|
|
toast.error("Failed to copy to clipboard.")
|
|
})
|
|
}, [text, copyMessage])
|
|
|
|
return { isCopied, handleCopy }
|
|
}
|