import { CheckCircle2, Copy } from 'lucide-react'; import { useEffect, useMemo, useRef, useState } from 'react'; import { copyTextToClipboard } from '../../services/clipboard'; import { UnifiedModal } from '../common/UnifiedModal'; export type PlatformTaskCompletionDialogPayload = { source: string; message: string; }; type PlatformTaskCompletionDialogProps = { completion: PlatformTaskCompletionDialogPayload | null; onClose: () => void; overlayClassName?: string; panelClassName?: string; }; function buildPlatformTaskCompletionReport( completion: PlatformTaskCompletionDialogPayload, ) { return [`来源:${completion.source}`, `状态:${completion.message}`].join( '\n', ); } export function PlatformTaskCompletionDialog({ completion, onClose, overlayClassName = 'platform-theme platform-theme--light !items-center', panelClassName = 'platform-remap-surface rounded-[1.5rem]', }: PlatformTaskCompletionDialogProps) { const [copyState, setCopyState] = useState<'idle' | 'copied' | 'failed'>( 'idle', ); const resetTimerRef = useRef(null); const reportText = useMemo( () => (completion ? buildPlatformTaskCompletionReport(completion) : ''), [completion], ); useEffect( () => () => { if (resetTimerRef.current !== null) { window.clearTimeout(resetTimerRef.current); } }, [], ); useEffect(() => { setCopyState('idle'); }, [completion?.source, completion?.message]); const copyCompletion = () => { if (!reportText) { return; } void copyTextToClipboard(reportText).then((copied) => { setCopyState(copied ? 'copied' : 'failed'); if (resetTimerRef.current !== null) { window.clearTimeout(resetTimerRef.current); } resetTimerRef.current = window.setTimeout(() => { resetTimerRef.current = null; setCopyState('idle'); }, 1400); }); }; return ( {copyState === 'copied' ? ( ) : ( )} {copyState === 'copied' ? '已复制' : copyState === 'failed' ? '复制失败' : '复制内容'} } > {completion ? ( <>
来源
{completion.source}
状态
{completion.message}
) : null}
); }