import React, { useState, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; 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'; 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'; export default function PipelineDialog({ open, onOpenChange, pipelineId: propPipelineId, isEditMode = false, isDefaultPipeline = false, onFinish, onNewPipelineCreated, onDeletePipeline, onCancel, }: PipelineDialogProps) { const { t } = useTranslation(); const [pipelineId, setPipelineId] = useState( propPipelineId, ); const [currentMode, setCurrentMode] = useState('config'); 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: 'debug', label: t('pipelines.debugChat'), icon: ( ), }, ]; const getDialogTitle = () => { if (currentMode === 'config') { return isEditMode ? t('pipelines.editPipeline') : t('pipelines.createPipeline'); } 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 === 'config' && ( { onCancel(); }} /> )} {currentMode === 'debug' && pipelineId && ( )}
); }