fix(web): fix #596 copy-to-clipboard issue (#602)

This commit is contained in:
Rhon Joe 2023-07-19 19:29:37 +08:00 committed by GitHub
parent 668b059c07
commit 34f55739e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,4 +1,5 @@
import { useState } from 'react' import { useCallback, useState } from 'react'
import writeText from 'copy-to-clipboard'
type CopiedValue = string | null type CopiedValue = string | null
type CopyFn = (text: string) => Promise<boolean> type CopyFn = (text: string) => Promise<boolean>
@ -6,22 +7,23 @@ type CopyFn = (text: string) => Promise<boolean>
function useCopyToClipboard(): [CopiedValue, CopyFn] { function useCopyToClipboard(): [CopiedValue, CopyFn] {
const [copiedText, setCopiedText] = useState<CopiedValue>(null) const [copiedText, setCopiedText] = useState<CopiedValue>(null)
const copy: CopyFn = async text => { const copy: CopyFn = useCallback(async (text: string) => {
if (!navigator?.clipboard) { if (!navigator?.clipboard) {
console.warn('Clipboard not supported') console.warn('Clipboard not supported')
return false return false
} }
try { try {
await navigator.clipboard.writeText(text) writeText(text)
setCopiedText(text) setCopiedText(text)
return true return true
} catch (error) { }
catch (error) {
console.warn('Copy failed', error) console.warn('Copy failed', error)
setCopiedText(null) setCopiedText(null)
return false return false
} }
} }, [])
return [copiedText, copy] return [copiedText, copy]
} }