import { useEffect, useState, SubmitEvent } from 'react'; import { useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { usePageTitle } from '../../hooks/usePageTitle'; import { X, Save, ClipboardList } from 'lucide-react'; import { scenarios, environments } from '../../api'; import type { Environment } from '../../api'; import { Breadcrumbs, Button, Card, Input, CodeEditor, Select, useToast } from '../../ui'; import styles from '../Page.module.css'; export function CreateScenarioPage() { const { t } = useTranslation(); usePageTitle(t('scenarios.create_title')); const navigate = useNavigate(); const toast = useToast(); const [name, setName] = useState(''); const [description, setDescription] = useState(''); const [environmentId, setEnvironmentId] = useState(''); const [envs, setEnvs] = useState([]); const [nameError, setNameError] = useState(''); const [saving, setSaving] = useState(false); useEffect(() => { environments .list(1, 200) .then((r) => setEnvs(r?.data ?? [])) .catch(() => {}); }, []); const handleSubmit = async (e: SubmitEvent) => { e.preventDefault(); if (!name.trim()) { setNameError(t('scenarios.form_name_required')); return; } setSaving(true); try { const scenario = await scenarios.create( name.trim(), description.trim() || undefined, environmentId || undefined, ); toast.success(t('scenarios.created')); navigate(`/scenarios/${scenario.id}`); } catch (err) { const message = (err as Error).message; toast.error(message); } finally { setSaving(false); } }; return (
, onClick: () => navigate('/scenarios'), }, { label: t('scenarios.create_title') }, ]} />
{ setName(e.target.value); setNameError(''); }} error={nameError || undefined} required autoFocus />