import { useTranslation } from 'next-i18next'; import { useToast } from './useToast'; import { useCallback } from 'react'; import MyModal from '../components/common/MyModal'; import React from 'react'; import { Box, ModalBody } from '@chakra-ui/react'; import Tag from '../components/common/Tag'; import { useCommonStore } from '../store/useCommonStore'; /** * copy text data */ export const useCopyData = () => { const { t } = useTranslation(); const { toast } = useToast(); const { setCopyContent } = useCommonStore(); const copyData = useCallback( async ( data: string, title: string | null | undefined = t('common:copy_successful'), duration = 1000 ) => { data = data.trim(); try { if (navigator.clipboard && window.isSecureContext) { await navigator.clipboard.writeText(data); if (title) { toast({ title, status: 'success', duration }); } } else { let textArea = document.createElement('textarea'); textArea.value = data; // 使text area不在viewport,同时设置不可见 textArea.style.position = 'absolute'; // @ts-ignore textArea.style.opacity = 0; textArea.style.left = '-999999px'; textArea.style.top = '-999999px'; document.body.appendChild(textArea); textArea.focus(); textArea.select(); await new Promise((res, rej) => { document.execCommand('copy') ? res('') : rej(); textArea.remove(); }).then(() => { if (title) { toast({ title, status: 'success', duration }); } }); } } catch (error) { setCopyContent(data); } }, [setCopyContent, t, toast] ); return { copyData }; }; export const ManualCopyModal = () => { const { t } = useTranslation(); const { copyContent, setCopyContent } = useCommonStore(); return ( setCopyContent(undefined)} > {t('common:can_copy_content_tip')} {copyContent} ); };