2023-06-02 15:33:48 -04:00
|
|
|
'use client'
|
2023-06-11 15:39:04 +04:00
|
|
|
|
2023-06-02 15:33:48 -04:00
|
|
|
import { useState } from 'react'
|
2023-05-19 12:33:56 -04:00
|
|
|
|
|
|
|
|
export interface useCopyToClipboardProps {
|
2023-06-02 15:33:48 -04:00
|
|
|
timeout?: number
|
2023-05-19 12:33:56 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function useCopyToClipboard({
|
2023-06-02 15:33:48 -04:00
|
|
|
timeout = 2000
|
2023-05-19 12:33:56 -04:00
|
|
|
}: useCopyToClipboardProps) {
|
2023-06-02 15:33:48 -04:00
|
|
|
const [isCopied, setIsCopied] = useState<Boolean>(false)
|
2023-05-19 12:33:56 -04:00
|
|
|
|
|
|
|
|
const copyToClipboard = (value: string) => {
|
|
|
|
|
if (
|
|
|
|
|
typeof window === 'undefined' ||
|
|
|
|
|
!navigator.clipboard ||
|
|
|
|
|
!navigator.clipboard.writeText
|
|
|
|
|
) {
|
2023-06-02 15:33:48 -04:00
|
|
|
return
|
2023-05-19 12:33:56 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
navigator.clipboard.writeText(value).then(() => {
|
2023-06-02 15:33:48 -04:00
|
|
|
setIsCopied(true)
|
2023-05-19 12:33:56 -04:00
|
|
|
|
|
|
|
|
setTimeout(() => {
|
2023-06-02 15:33:48 -04:00
|
|
|
setIsCopied(false)
|
|
|
|
|
}, timeout)
|
|
|
|
|
})
|
|
|
|
|
}
|
2023-05-19 12:33:56 -04:00
|
|
|
|
2023-06-02 15:33:48 -04:00
|
|
|
return { isCopied, copyToClipboard }
|
2023-05-19 12:33:56 -04:00
|
|
|
}
|