import React, { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Button, Text, Stack, Group, TextInput, Divider, Modal } from '@mantine/core'; import CheckIcon from '@mui/icons-material/Check'; import { ToolRegistryEntry } from '../../../data/toolsTaxonomy'; import ToolConfigurationModal from './ToolConfigurationModal'; import ToolList from './ToolList'; import { AutomationConfig, AutomationMode, AutomationTool } from '../../../types/automation'; import { useAutomationForm } from '../../../hooks/tools/automate/useAutomationForm'; interface AutomationCreationProps { mode: AutomationMode; existingAutomation?: AutomationConfig; onBack: () => void; onComplete: (automation: AutomationConfig) => void; toolRegistry: Record; } export default function AutomationCreation({ mode, existingAutomation, onBack, onComplete, toolRegistry }: AutomationCreationProps) { const { t } = useTranslation(); const { automationName, setAutomationName, selectedTools, addTool, removeTool, updateTool, hasUnsavedChanges, canSaveAutomation, getToolName, getToolDefaultParameters } = useAutomationForm({ mode, existingAutomation, toolRegistry }); const [configModalOpen, setConfigModalOpen] = useState(false); const [configuraingToolIndex, setConfiguringToolIndex] = useState(-1); const [unsavedWarningOpen, setUnsavedWarningOpen] = useState(false); const configureTool = (index: number) => { setConfiguringToolIndex(index); setConfigModalOpen(true); }; const handleToolConfigSave = (parameters: Record) => { if (configuraingToolIndex >= 0) { updateTool(configuraingToolIndex, { configured: true, parameters }); } setConfigModalOpen(false); setConfiguringToolIndex(-1); }; const handleToolConfigCancel = () => { setConfigModalOpen(false); setConfiguringToolIndex(-1); }; const handleToolAdd = () => { const newTool: AutomationTool = { id: `tool-${Date.now()}`, operation: '', name: t('automate.creation.tools.selectTool', 'Select a tool...'), configured: false, parameters: {} }; updateTool(selectedTools.length, newTool); }; const handleBackClick = () => { if (hasUnsavedChanges()) { setUnsavedWarningOpen(true); } else { onBack(); } }; const handleConfirmBack = () => { setUnsavedWarningOpen(false); onBack(); }; const handleCancelBack = () => { setUnsavedWarningOpen(false); }; const saveAutomation = async () => { if (!canSaveAutomation()) return; const automation = { name: automationName.trim(), description: '', operations: selectedTools.map(tool => ({ operation: tool.operation, parameters: tool.parameters || {} })) }; try { const { automationStorage } = await import('../../../services/automationStorage'); const savedAutomation = await automationStorage.saveAutomation(automation); onComplete(savedAutomation); } catch (error) { console.error('Error saving automation:', error); } }; const currentConfigTool = configuraingToolIndex >= 0 ? selectedTools[configuraingToolIndex] : null; return (
{t("automate.creation.description", "Automations run tools sequentially. To get started, add tools in the order you want them to run.")} {/* Automation Name */} setAutomationName(e.currentTarget.value)} size="sm" /> {/* Selected Tools List */} {selectedTools.length > 0 && ( )} {/* Save Button */} {/* Tool Configuration Modal */} {currentConfigTool && ( )} {/* Unsaved Changes Warning Modal */} {t('automate.creation.unsavedChanges.message', 'You have unsaved changes. Are you sure you want to go back? All changes will be lost.')}
); }