import { useState } from 'react' import { ExperimentForm } from './ExperimentForm' import { experimentManagement } from '../lib/supabase' import type { Experiment, CreateExperimentRequest, UpdateExperimentRequest } from '../lib/supabase' interface ExperimentModalProps { experiment?: Experiment onClose: () => void onExperimentSaved: (experiment: Experiment) => void } export function ExperimentModal({ experiment, onClose, onExperimentSaved }: ExperimentModalProps) { const [loading, setLoading] = useState(false) const [error, setError] = useState(null) const isEditing = !!experiment const handleSubmit = async (data: CreateExperimentRequest | UpdateExperimentRequest) => { setError(null) setLoading(true) try { let savedExperiment: Experiment if (isEditing && experiment) { // Check if experiment number is unique (excluding current experiment) if ('experiment_number' in data && data.experiment_number !== undefined && data.experiment_number !== experiment.experiment_number) { const isUnique = await experimentManagement.isExperimentNumberUnique(data.experiment_number, experiment.id) if (!isUnique) { setError('Experiment number already exists. Please choose a different number.') return } } savedExperiment = await experimentManagement.updateExperiment(experiment.id, data) } else { // Check if experiment number is unique for new experiments const createData = data as CreateExperimentRequest const isUnique = await experimentManagement.isExperimentNumberUnique(createData.experiment_number) if (!isUnique) { setError('Experiment number already exists. Please choose a different number.') return } savedExperiment = await experimentManagement.createExperiment(createData) } onExperimentSaved(savedExperiment) onClose() } catch (err: any) { setError(err.message || `Failed to ${isEditing ? 'update' : 'create'} experiment`) console.error('Experiment save error:', err) } finally { setLoading(false) } } const handleCancel = () => { onClose() } return (
{/* Header */}

{isEditing ? `Edit Experiment #${experiment.experiment_number}` : 'Create New Experiment'}

{/* Error Message */} {error && (

Error

{error}
)} {/* Form */}
) }