From 34f55739e0208b1cd1bcaaf7be9ab249b50ee7c4 Mon Sep 17 00:00:00 2001 From: Rhon Joe Date: Wed, 19 Jul 2023 19:29:37 +0800 Subject: [PATCH] fix(web): fix #596 copy-to-clipboard issue (#602) --- web/hooks/use-copy-to-clipboard.ts | 40 ++++++++++++++++-------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/web/hooks/use-copy-to-clipboard.ts b/web/hooks/use-copy-to-clipboard.ts index 76f792c6b4..ca6298dcc1 100644 --- a/web/hooks/use-copy-to-clipboard.ts +++ b/web/hooks/use-copy-to-clipboard.ts @@ -1,29 +1,31 @@ -import { useState } from 'react' +import { useCallback, useState } from 'react' +import writeText from 'copy-to-clipboard' type CopiedValue = string | null type CopyFn = (text: string) => Promise function useCopyToClipboard(): [CopiedValue, CopyFn] { - const [copiedText, setCopiedText] = useState(null) + const [copiedText, setCopiedText] = useState(null) - const copy: CopyFn = 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 - } + const copy: CopyFn = useCallback(async (text: string) => { + if (!navigator?.clipboard) { + console.warn('Clipboard not supported') + return false } - return [copiedText, copy] + try { + writeText(text) + setCopiedText(text) + return true + } + catch (error) { + console.warn('Copy failed', error) + setCopiedText(null) + return false + } + }, []) + + return [copiedText, copy] } -export default useCopyToClipboard \ No newline at end of file +export default useCopyToClipboard