import React, { useEffect, useState } from 'react'; import { Button, message } from 'antd'; import { CopyOutlined } from '@ant-design/icons'; import { env } from '../../../env' import { useQueryClient } from '@tanstack/react-query'; import { getQueryKey } from '@trpc/react-query'; import { api } from '@nice/client'; interface ShareCodeGeneratorProps { fileId: string; onSuccess?: (code: string) => void; fileName?: string; } interface ShareCodeResponse { code?: string; expiresAt?: Date; } export const ShareCodeGenerator: React.FC = ({ fileId, onSuccess, fileName, }) => { const [loading, setLoading] = useState(false); const [shareCode, setShareCode] = useState(''); const [expiresAt, setExpiresAt] = useState(null); const queryClient = useQueryClient(); const queryKey = getQueryKey(api.term); const [isGenerate, setIsGenerate] = useState(false); const [currentFileId, setCurrentFileId] = useState(''); const generateShareCode = api.shareCode.generateShareCodeByFileId.useMutation({ onSuccess: (data) => { queryClient.invalidateQueries({ queryKey }); }, }); useEffect(() => { if (fileId !== currentFileId || !fileId) { setIsGenerate(false); } setCurrentFileId(fileId); }, [fileId]) const generateCode = async () => { setLoading(true); console.log('开始生成分享码,fileId:', fileId, 'fileName:', fileName); try { const data: ShareCodeResponse = await generateShareCode.mutateAsync({ fileId }); console.log('生成分享码结果:', data); setShareCode(data.code); setIsGenerate(true); setExpiresAt(data.expiresAt ? new Date(data.expiresAt) : null); onSuccess?.(data.code); message.success('分享码生成成功'); } catch (error) { console.error('生成分享码错误:', error); message.error('生成分享码失败: ' + (error instanceof Error ? error.message : '未知错误')); } finally { setLoading(false); } }; return (
{/* 添加调试信息 */} 文件ID: {fileId ? fileId : '未选择文件'}
{!isGenerate ? ( ) : (
{shareCode}
{expiresAt ? (
有效期至: {expiresAt.toLocaleString()}
) : (
未获取到有效期信息
)}
)}
); };