import React, { useState, useEffect } from 'react'; import Button from './ui/Button'; import FormField, { Input } from './ui/FormField'; import Alert from './ui/Alert'; import { experimentsApi } from '../api/client'; export default function ExperimentForm({ existing, onSuccess, onCancel }) { const [title, setTitle] = useState(existing?.title ?? ''); const [errors, setErrors] = useState({}); const [apiError, setApiError] = useState(null); const [loading, setLoading] = useState(false); useEffect(() => { setTitle(existing?.title ?? ''); setErrors({}); setApiError(null); }, [existing]); function validate() { const e = {}; if (!title.trim()) e.title = 'Title is required'; else if (title.trim().length > 255) e.title = 'Title must be 255 characters or fewer'; setErrors(e); return Object.keys(e).length === 0; } async function handleSubmit(e) { e.preventDefault(); if (!validate()) return; setLoading(true); setApiError(null); try { const result = existing ? await experimentsApi.update(existing.id, { title: title.trim() }) : await experimentsApi.create({ title: title.trim() }); onSuccess(result); } catch (err) { setApiError(err); } finally { setLoading(false); } } return (
); }