/** * PipelineResultPreview — Pipeline 输出结果预览 * * 将 Pipeline outputs 的多个顶层键以 tab 切换展示, * 每个 tab 内嵌 PresentationContainer 做智能渲染。 */ import { useState, useMemo } from 'react'; import { PresentationContainer } from '../presentation/PresentationContainer'; import { FileText, BarChart3, HelpCircle, Presentation, PenTool } from 'lucide-react'; interface PipelineResultPreviewProps { /** Pipeline outputs 对象(多键 JSON) */ outputs: Record; /** Pipeline ID */ pipelineId?: string; className?: string; } const KEY_ICONS: Record = { summary: , report: , analysis: , quiz: , scenes: , slides: , plan: , }; function getKeyIcon(key: string): React.ReactNode { for (const [pattern, icon] of Object.entries(KEY_ICONS)) { if (key.toLowerCase().includes(pattern)) return icon; } return ; } export function PipelineResultPreview({ outputs, pipelineId, className = '' }: PipelineResultPreviewProps) { const keys = useMemo(() => Object.keys(outputs), [outputs]); const [activeKey, setActiveKey] = useState(keys[0]); if (keys.length === 0) { return (
Pipeline 执行完成,无输出数据
); } return (
{/* Tab bar */} {keys.length > 1 && (
{keys.map((key) => ( ))}
)} {/* Content */}
{outputs[activeKey] !== undefined && outputs[activeKey] !== null ? ( ) : (

该部分无数据

)}
); }