/** * Workflow configuration — primary start kind drives the canvas start node. */ import React, { useState, useEffect } from 'react'; import type { WorkflowEntryPoint } from '../../../api/workflowApi'; import { getPrimaryStartKind, buildInvocationsForPrimaryKind, } from '../nodes/runtime/workflowStartSync'; import styles from './Automation2FlowEditor.module.css'; import { useLanguage } from '../../../providers/language/LanguageContext'; /** Vier Einstiege; bei „Immer aktiv“ folgt später die Listener-Konfiguration (E-Mail, Webhook, …). */ function _getKindOptions(t: (key: string) => string): { value: string; label: string }[] { return [ { value: 'manual', label: t('Manueller Trigger') }, { value: 'form', label: t('Formular') }, { value: 'schedule', label: t('Zeitplan') }, { value: 'always_on', label: t('Immer aktiv') }, ]; } interface WorkflowConfigurationModalProps { open: boolean; onClose: () => void; invocations: WorkflowEntryPoint[]; onApply: (next: WorkflowEntryPoint[]) => void; } const _validKinds = ['manual', 'form', 'schedule', 'always_on']; function normalizeLoadedKind(k: string): string { if (_validKinds.includes(k)) return k; if (['email', 'webhook', 'event'].includes(k)) return 'always_on'; if (k === 'api') return 'manual'; return 'manual'; } export const WorkflowConfigurationModal: React.FC = ({ open, onClose, invocations, onApply, }) => { const { t } = useLanguage(); const kindOptions = _getKindOptions(t); const [kind, setKind] = useState(() => normalizeLoadedKind(getPrimaryStartKind(invocations))); const [titleDe, setTitleDe] = useState(''); useEffect(() => { if (!open) return; const k = normalizeLoadedKind(getPrimaryStartKind(invocations)); setKind(k); const entry = invocations[0]; const entryTitle = entry?.title; if (typeof entryTitle === 'string') setTitleDe(entryTitle); else if (entryTitle && typeof entryTitle === 'object') setTitleDe(entryTitle.de || entryTitle.en || ''); else setTitleDe(''); }, [open, invocations]); if (!open) return null; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); const label = titleDe.trim() || kindOptions.find((o) => o.value === kind)?.label || t('Start'); const next = buildInvocationsForPrimaryKind(kind, invocations, label); onApply(next); onClose(); }; return (

{t('Workflow-Konfiguration')}

{t( 'Legen Sie fest, wie dieser Workflow gestartet werden soll. Die Start-Node im Editor passt sich dem gewählten Einstieg an (z. B. Formular-Felder auf der Start-Node bearbeiten).' )}

setTitleDe(e.target.value)} placeholder={t('z.B. Angebot anlegen')} />
{kindOptions.map((o) => ( ))}
); };