'use client'; import { useState, useEffect } from 'react'; import { useRouter, useParams } from 'next/navigation'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { DSLEditor } from '@/components/workflows/dsl-editor'; import { VisualWorkflowBuilder } from '@/components/workflows/visual-builder'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Textarea } from '@/components/ui/textarea'; import { Card } from '@/components/ui/card'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { workflowApi } from '@/lib/api/workflows'; import { Workflow, CreateWorkflowDto } from '@/types/workflow'; import { toast } from 'sonner'; import { Save, ArrowLeft, Loader2 } from 'lucide-react'; import Link from 'next/link'; export default function WorkflowEditPage() { const params = useParams(); const router = useRouter(); const id = params?.id === 'new' ? null : Number(params?.id); const [loading, setLoading] = useState(!!id); const [saving, setSaving] = useState(false); const [workflowData, setWorkflowData] = useState>({ workflowName: '', description: '', workflowType: 'CORRESPONDENCE', dslDefinition: 'name: New Workflow\nversion: 1.0\nsteps: []', isActive: true, }); useEffect(() => { if (id) { const fetchWorkflow = async () => { try { const data = await workflowApi.getWorkflow(id); if (data) { setWorkflowData(data); } else { toast.error("Workflow not found"); router.push('/admin/workflows'); } } catch (error) { toast.error("Failed to load workflow"); console.error(error); } finally { setLoading(false); } }; fetchWorkflow(); } }, [id, router]); const handleSave = async () => { if (!workflowData.workflowName) { toast.error("Workflow name is required"); return; } setSaving(true); try { const dto: CreateWorkflowDto = { workflowName: workflowData.workflowName || '', description: workflowData.description || '', workflowType: workflowData.workflowType || 'CORRESPONDENCE', dslDefinition: workflowData.dslDefinition || '', }; if (id) { await workflowApi.updateWorkflow(id, dto); toast.success("Workflow updated successfully"); } else { await workflowApi.createWorkflow(dto); toast.success("Workflow created successfully"); router.push('/admin/workflows'); } } catch (error) { toast.error("Failed to save workflow"); console.error(error); } finally { setSaving(false); } }; if (loading) { return (
); } return (

{id ? 'Edit Workflow' : 'New Workflow'}

{id ? `Version ${workflowData.version}` : 'Create a new workflow definition'}

setWorkflowData({ ...workflowData, workflowName: e.target.value, }) } placeholder="e.g. Standard RFA Workflow" />