From 6797519b0ae532187a5c9b533681c7bcff9d8add Mon Sep 17 00:00:00 2001 From: Alireza Vaezi Date: Sun, 20 Jul 2025 19:59:28 -0400 Subject: [PATCH] create new experiment works --- src/components/CreateUserModal.tsx | 2 +- src/components/ExperimentForm.tsx | 108 ++++++++---------- src/components/ExperimentModal.tsx | 2 +- src/components/Experiments.tsx | 6 +- src/lib/supabase.ts | 3 - .../20250720000003_experiments_table.sql | 2 - 6 files changed, 54 insertions(+), 69 deletions(-) diff --git a/src/components/CreateUserModal.tsx b/src/components/CreateUserModal.tsx index 111406e..04c5456 100644 --- a/src/components/CreateUserModal.tsx +++ b/src/components/CreateUserModal.tsx @@ -106,7 +106,7 @@ export function CreateUserModal({ roles, onClose, onUserCreated }: CreateUserMod } return ( -
+
{/* Header */}
diff --git a/src/components/ExperimentForm.tsx b/src/components/ExperimentForm.tsx index a0f4017..e138bbd 100644 --- a/src/components/ExperimentForm.tsx +++ b/src/components/ExperimentForm.tsx @@ -13,7 +13,6 @@ export function ExperimentForm({ initialData, onSubmit, onCancel, isEditing = fa const [formData, setFormData] = useState({ experiment_number: initialData?.experiment_number || 0, reps_required: initialData?.reps_required || 1, - rep_number: initialData?.rep_number || 1, soaking_duration_hr: initialData?.soaking_duration_hr || 0, air_drying_time_min: initialData?.air_drying_time_min || 0, plate_contact_frequency_hz: initialData?.plate_contact_frequency_hz || 1, @@ -38,13 +37,9 @@ export function ExperimentForm({ initialData, onSubmit, onCancel, isEditing = fa newErrors.reps_required = 'Repetitions required must be a positive integer' } - if (!formData.rep_number || formData.rep_number <= 0) { - newErrors.rep_number = 'Repetition number must be a positive integer' - } - if (formData.rep_number > formData.reps_required) { - newErrors.rep_number = 'Repetition number cannot exceed repetitions required' - } + + if (formData.soaking_duration_hr < 0) { newErrors.soaking_duration_hr = 'Soaking duration cannot be negative' @@ -78,7 +73,21 @@ export function ExperimentForm({ initialData, onSubmit, onCancel, isEditing = fa } try { - await onSubmit(formData) + // Prepare data for submission + const submitData = isEditing ? formData : { + experiment_number: formData.experiment_number, + reps_required: formData.reps_required, + soaking_duration_hr: formData.soaking_duration_hr, + air_drying_time_min: formData.air_drying_time_min, + plate_contact_frequency_hz: formData.plate_contact_frequency_hz, + throughput_rate_pecans_sec: formData.throughput_rate_pecans_sec, + crush_amount_in: formData.crush_amount_in, + entry_exit_height_diff_in: formData.entry_exit_height_diff_in, + schedule_status: formData.schedule_status, + results_status: formData.results_status + } + + await onSubmit(submitData) } catch (error) { console.error('Form submission error:', error) } @@ -112,7 +121,7 @@ export function ExperimentForm({ initialData, onSubmit, onCancel, isEditing = fa id="experiment_number" value={formData.experiment_number} onChange={(e) => handleInputChange('experiment_number', parseInt(e.target.value) || 0)} - className={`w-full px-4 py-3 border rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-colors text-sm ${errors.experiment_number ? 'border-red-300' : 'border-gray-300' + className={`max-w-xs px-3 py-2 border rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-colors text-sm ${errors.experiment_number ? 'border-red-300' : 'border-gray-300' }`} placeholder="Enter unique experiment number" min="1" @@ -133,7 +142,7 @@ export function ExperimentForm({ initialData, onSubmit, onCancel, isEditing = fa id="reps_required" value={formData.reps_required} onChange={(e) => handleInputChange('reps_required', parseInt(e.target.value) || 1)} - className={`w-full px-4 py-3 border rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-colors text-sm ${errors.reps_required ? 'border-red-300' : 'border-gray-300' + className={`max-w-xs px-3 py-2 border rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-colors text-sm ${errors.reps_required ? 'border-red-300' : 'border-gray-300' }`} placeholder="Total repetitions needed" min="1" @@ -145,53 +154,34 @@ export function ExperimentForm({ initialData, onSubmit, onCancel, isEditing = fa )}
-
- - handleInputChange('rep_number', parseInt(e.target.value) || 1)} - className={`w-full px-4 py-3 border rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-colors text-sm ${errors.rep_number ? 'border-red-300' : 'border-gray-300' - }`} - placeholder="Current repetition" - min="1" - step="1" - required - /> - {errors.rep_number && ( -

{errors.rep_number}

- )} -
-
- - handleInputChange('soaking_duration_hr', parseFloat(e.target.value) || 0)} - className={`w-full px-4 py-3 border rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-colors text-sm ${errors.soaking_duration_hr ? 'border-red-300' : 'border-gray-300' - }`} - placeholder="0.0" - min="0" - step="0.1" - required - /> - {errors.soaking_duration_hr && ( -

{errors.soaking_duration_hr}

- )} -
- {/* Process Parameters */} + {/* Experiment Parameters */}
-

Process Parameters

+

Experiment Parameters

+
+ + handleInputChange('soaking_duration_hr', parseFloat(e.target.value) || 0)} + className={`max-w-xs px-3 py-2 border rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-colors text-sm ${errors.soaking_duration_hr ? 'border-red-300' : 'border-gray-300' + }`} + placeholder="0.0" + min="0" + step="0.1" + required + /> + {errors.soaking_duration_hr && ( +

{errors.soaking_duration_hr}

+ )} +
+