import { useState, useEffect } from 'react'; import apiClient from '../../api/client'; import { FileCode, Trash2, Plus, LayoutTemplate } from 'lucide-react'; import type { WorkflowTemplate as ParsedWorkflowTemplate } from '../../types'; export function WorkflowTemplateSettings() { const [templates, setTemplates] = useState>({}); const [loading, setLoading] = useState(true); const [templateJson, setTemplateJson] = useState('{\n "name": "my_template",\n "steps": [\n {\n "name": "step1",\n "actor": "actor_name"\n }\n ]\n}'); const [creating, setCreating] = useState(false); const [message, setMessage] = useState(''); const [error, setError] = useState(''); const validateTemplate = (data: any): data is ParsedWorkflowTemplate => { if (!data || typeof data !== 'object') return false; if (typeof data.name !== 'string') return false; if (!Array.isArray(data.steps)) return false; for (const step of data.steps) { if (typeof step.name !== 'string') return false; if (typeof step.actor !== 'string') return false; } return true; }; const fetchTemplates = async () => { setLoading(true); try { const response = await apiClient.get('/api/v1/resource/workflow_template'); setTemplates(response.data.templates || {}); } catch (err) { console.error('Failed to fetch templates:', err); } finally { setLoading(false); } }; useEffect(() => { fetchTemplates(); }, []); const handleCreate = async (e: React.FormEvent) => { e.preventDefault(); setCreating(true); setMessage(''); setError(''); try { const parsedJson = JSON.parse(templateJson); if (!validateTemplate(parsedJson)) { throw new Error('JSON structure does not match WorkflowTemplate schema (requires name and steps array with name and actor).'); } await apiClient.post('/api/v1/resource/workflow_template', parsedJson); setMessage('Workflow template created successfully'); setTemplateJson('{\n "name": "my_template",\n "steps": []\n}'); fetchTemplates(); } catch (err: any) { console.error(err); if (err instanceof SyntaxError) { setError('Invalid JSON format'); } else { setError(err.message || err.response?.data?.message || 'Failed to create workflow template'); } } finally { setCreating(false); } }; const handleDelete = async (templateName: string) => { if (!confirm(`Are you sure you want to delete ${templateName}?`)) return; try { await apiClient.delete(`/api/v1/resource/workflow_template/${templateName}`); fetchTemplates(); } catch (err: any) { console.error('Failed to delete template:', err); alert('Failed to delete template'); } }; return (

Workflow Templates

Manage and create reusable workflow templates.

Create Template

Provide the JSON definition for a new workflow template.