From 5d42882f96cf96ed27baaee00d7fc900919a4e94 Mon Sep 17 00:00:00 2001 From: averel10 Date: Thu, 2 Apr 2026 08:34:59 +0200 Subject: [PATCH] fix: cascade experiment removal to experiment_calibration --- src/app/actions/experiment.ts | 4 ++++ src/components/CreateExperimentModal.tsx | 29 ++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/app/actions/experiment.ts b/src/app/actions/experiment.ts index fad6903..89f9954 100644 --- a/src/app/actions/experiment.ts +++ b/src/app/actions/experiment.ts @@ -2,6 +2,7 @@ import db from '@/lib/db'; import { experiment } from '@/lib/model/experiment'; +import { experiment_calibration } from '@/lib/model/experiment_calibration'; import { annotation } from '@/lib/model/annotation'; import { participant } from '@/lib/model/participant'; import { and, eq } from 'drizzle-orm'; @@ -108,6 +109,9 @@ export async function deleteExperiment(id: number) { } try { + // Delete all experiment_calibration records first + await db.delete(experiment_calibration).where(eq(experiment_calibration.experimentId, id)); + // Delete the experiment await db.delete(experiment).where(eq(experiment.id, id)); diff --git a/src/components/CreateExperimentModal.tsx b/src/components/CreateExperimentModal.tsx index 2257441..caa44ba 100644 --- a/src/components/CreateExperimentModal.tsx +++ b/src/components/CreateExperimentModal.tsx @@ -6,6 +6,12 @@ import Modal from '@/components/Modal'; import { Dataset } from '@/lib/model/dataset'; import { getAllDatasets } from '@/app/actions/datasets'; +const ANNOTATION_TOOLS = [ + { value: 'quality-choice', label: 'Quality Choice' }, + { value: 'binary', label: 'Binary' }, + // Future tools can be added here +]; + interface CreateExperimentModalProps { datasetId?: number; } @@ -15,6 +21,7 @@ export default function CreateExperimentModal({ datasetId }: CreateExperimentMod const [name, setName] = useState(''); const [description, setDescription] = useState(''); const [selectedDatasetId, setSelectedDatasetId] = useState(datasetId || ''); + const [annotationTool, setAnnotationTool] = useState('quality-choice'); const [onboardingEnabled, setOnboardingEnabled] = useState(false); const [calibrationEnabled, setCalibrationEnabled] = useState(false); const [loading, setLoading] = useState(false); @@ -64,12 +71,14 @@ export default function CreateExperimentModal({ datasetId }: CreateExperimentMod name: name.trim(), description: description.trim() || undefined, datasetId: Number(selectedDatasetId), + annotationTool, onboardingEnabled, calibrationEnabled }); setName(''); setDescription(''); setSelectedDatasetId(datasetId || ''); + setAnnotationTool('quality-choice'); setOnboardingEnabled(false); setCalibrationEnabled(false); setSuccess(true); @@ -92,6 +101,7 @@ export default function CreateExperimentModal({ datasetId }: CreateExperimentMod setName(''); setDescription(''); setSelectedDatasetId(datasetId || ''); + setAnnotationTool('quality-choice'); setOnboardingEnabled(false); setCalibrationEnabled(false); setError(null); @@ -162,6 +172,25 @@ export default function CreateExperimentModal({ datasetId }: CreateExperimentMod /> +
+ + +
+ {!datasetId && (