import React, { useState, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import { useRouter } from 'next/navigation'; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Sidebar, SidebarContent, SidebarGroup, SidebarGroupContent, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarProvider, } from '@/components/ui/sidebar'; import PipelineFormComponent from './components/pipeline-form/PipelineFormComponent'; import DebugDialog from './components/debug-dialog/DebugDialog'; import PipelineExtension from './components/pipeline-extensions/PipelineExtension'; import PipelineMonitoringTab from './components/monitoring-tab/PipelineMonitoringTab'; interface PipelineDialogProps { open: boolean; onOpenChange: (open: boolean) => void; pipelineId?: string; isEditMode?: boolean; isDefaultPipeline?: boolean; onFinish: () => void; onNewPipelineCreated?: (pipelineId: string) => void; onDeletePipeline: () => void; onCancel: () => void; } type DialogMode = 'config' | 'debug' | 'extensions' | 'monitoring'; export default function PipelineDialog({ open, onOpenChange, pipelineId: propPipelineId, isEditMode = false, onFinish, onNewPipelineCreated, onDeletePipeline, onCancel, }: PipelineDialogProps) { const { t } = useTranslation(); const router = useRouter(); const [pipelineId, setPipelineId] = useState( propPipelineId, ); const [currentMode, setCurrentMode] = useState('config'); const [isWebSocketConnected, setIsWebSocketConnected] = useState(false); useEffect(() => { setPipelineId(propPipelineId); setCurrentMode('config'); }, [propPipelineId, open]); const handleFinish = () => { onFinish(); }; const handleNewPipelineCreated = (newPipelineId: string) => { setPipelineId(newPipelineId); setCurrentMode('config'); if (onNewPipelineCreated) { onNewPipelineCreated(newPipelineId); } }; const menu = [ { key: 'config', label: t('pipelines.configuration'), icon: ( ), }, { key: 'extensions', label: t('pipelines.extensions.title'), icon: ( ), }, { key: 'debug', label: t('pipelines.debugChat'), icon: ( ), }, { key: 'monitoring', label: t('pipelines.monitoring.title'), icon: ( ), }, ]; const getDialogTitle = () => { if (currentMode === 'config') { return isEditMode ? t('pipelines.editPipeline') : t('pipelines.createPipeline'); } if (currentMode === 'extensions') { return t('pipelines.extensions.title'); } if (currentMode === 'monitoring') { return t('pipelines.monitoring.title'); } return t('pipelines.debugDialog.title'); }; // 创建新流水线时的对话框 if (!isEditMode) { return (
{t('pipelines.createPipeline')}
{ onCancel(); }} />
); } // 编辑流水线时的对话框 return ( {menu.map((item) => ( setCurrentMode(item.key as DialogMode)} > {item.icon} {item.label} ))}
{getDialogTitle()} {currentMode === 'debug' && (
{isWebSocketConnected ? t('pipelines.debugDialog.connected') : t('pipelines.debugDialog.disconnected')}
)}
{currentMode === 'config' && ( { onCancel(); }} /> )} {currentMode === 'extensions' && pipelineId && ( )} {currentMode === 'debug' && pipelineId && ( )} {currentMode === 'monitoring' && pipelineId && ( { router.push(`/home/monitoring?pipelineId=${pipelineId}`); onOpenChange(false); }} /> )}
); }