From 27d4268affdad7f913e22002afd3eeaa508466cc Mon Sep 17 00:00:00 2001 From: Christian Vidal Wolf Date: Wed, 25 Feb 2026 09:26:58 +0100 Subject: [PATCH] feat(experiments): add edit experiment functionality --- components/ExperimentsView.tsx | 108 ++++++++++++++++++++++++--------- 1 file changed, 80 insertions(+), 28 deletions(-) diff --git a/components/ExperimentsView.tsx b/components/ExperimentsView.tsx index 75926e3..83f269d 100644 --- a/components/ExperimentsView.tsx +++ b/components/ExperimentsView.tsx @@ -39,7 +39,7 @@ import { } from 'recharts'; // ============ Sub-view type ============ -type SubView = 'list' | 'detail' | 'create'; +type SubView = 'list' | 'detail' | 'create' | 'edit'; // ============ Constants ============ const STATUS_OPTIONS = ['planned', 'active', 'completed', 'paused']; @@ -71,15 +71,21 @@ const ExperimentsView: React.FC = ({ salesData = [], onExp }, []); const navigateToCreate = useCallback(() => { + setSelectedId(null); setSubView('create'); }, []); + const navigateToEdit = useCallback((id: string) => { + setSelectedId(id); + setSubView('edit'); + }, []); + const navigateToList = useCallback(() => { setSelectedId(null); setSubView('list'); }, []); - const handleCreated = useCallback((id: string) => { + const handleSaved = useCallback((id: string) => { setSelectedId(id); setSubView('detail'); onExperimentsFetch?.(); @@ -99,14 +105,23 @@ const ExperimentsView: React.FC = ({ salesData = [], onExp experimentId={selectedId} salesData={salesData} onBack={navigateToList} + onEdit={() => navigateToEdit(selectedId)} onExperimentsFetch={onExperimentsFetch} /> )} {subView === 'create' && ( - + )} + {subView === 'edit' && selectedId && ( + navigateToDetail(selectedId)} + onSaved={handleSaved} /> )} @@ -355,8 +370,9 @@ const ExperimentDetailView: React.FC<{ experimentId: string; salesData: CombinedKPIs[]; onBack: () => void; + onEdit: () => void; onExperimentsFetch?: () => void; -}> = ({ experimentId, salesData, onBack, onExperimentsFetch }) => { +}> = ({ experimentId, salesData, onBack, onEdit, onExperimentsFetch }) => { const [experiment, setExperiment] = useState(null); const [loading, setLoading] = useState(true); const [analyzing, setAnalyzing] = useState(false); @@ -505,6 +521,15 @@ const ExperimentDetailView: React.FC<{ )} Run Analysis + -

New Experiment

+

+ {initialData ? "Edit Experiment" : "New Experiment"} +

{/* Basic Info */} @@ -1136,7 +1171,7 @@ const ExperimentCreateView: React.FC<{ className="px-6 py-2.5 bg-indigo-600 hover:bg-indigo-500 disabled:opacity-50 text-white rounded-lg font-medium text-sm transition-colors flex items-center gap-2" > {submitting &&
} - Create Experiment + {initialData ? "Save Changes" : "Create Experiment"}