From d8cae9f838ead68440f2560ad25dc85e806e98a7 Mon Sep 17 00:00:00 2001
From: Pim Hutting
Date: Fri, 16 Jan 2026 14:25:26 +0100
Subject: [PATCH] feat: added reset experiment (in UI)
ref:N25B-400
---
src/pages/MonitoringPage/MonitoringPage.tsx | 35 ++++++++++++++++---
src/pages/MonitoringPage/MonitoringPageAPI.ts | 17 ++++-----
src/pages/VisProgPage/VisProg.tsx | 6 ++--
3 files changed, 40 insertions(+), 18 deletions(-)
diff --git a/src/pages/MonitoringPage/MonitoringPage.tsx b/src/pages/MonitoringPage/MonitoringPage.tsx
index 5d34d95..1733898 100644
--- a/src/pages/MonitoringPage/MonitoringPage.tsx
+++ b/src/pages/MonitoringPage/MonitoringPage.tsx
@@ -2,7 +2,8 @@ import React from 'react';
import styles from './MonitoringPage.module.css';
import useProgramStore from "../../utils/programStore.ts";
import { GestureControls, SpeechPresets, DirectSpeechInput, StatusList, RobotConnected } from './MonitoringPageComponents.tsx';
-import { nextPhase, useExperimentLogger, useStatusLogger, pauseExperiment, playExperiment, resetExperiment, resetPhase, type ExperimentStreamData, type GoalUpdate, type TriggerUpdate, type CondNormsStateUpdate, type PhaseUpdate } from ".//MonitoringPageAPI.ts"
+import { nextPhase, useExperimentLogger, useStatusLogger, pauseExperiment, playExperiment, resetPhase, type ExperimentStreamData, type GoalUpdate, type TriggerUpdate, type CondNormsStateUpdate, type PhaseUpdate } from ".//MonitoringPageAPI.ts"
+import { graphReducer, runProgramm } from '../VisProgPage/VisProg.tsx';
import type { NormNodeData } from '../VisProgPage/visualProgrammingUI/nodes/NormNode.tsx';
@@ -39,6 +40,8 @@ const MonitoringPage: React.FC = () => {
const getNormsInPhase = useProgramStore((s) => s.getNormsInPhase);
const getGoalsInPhase = useProgramStore((s) => s.getGoalsInPhase);
const getTriggersInPhase = useProgramStore((s) => s.getTriggersInPhase);
+ const setProgramState = useProgramStore((state) => state.setProgramState);
+
// Can be used to block actions until feedback from CB.
const [loading, setLoading] = React.useState(false);
@@ -134,6 +137,31 @@ const handleStatusUpdate = React.useCallback((data: any) => {
//For pings that update conditional norms
useStatusLogger(handleStatusUpdate);
+const resetExperiment = React.useCallback(async () => {
+ try {
+ setLoading(true);
+
+ const phases = graphReducer();
+ setProgramState({ phases });
+
+ //reset monitoring page
+ setActiveIds({}); //remove active items
+ setPhaseIndex(0); //Go to first phase
+ setGoalIndex(0); // Reset goal indicator
+ setIsFinished(false); // Reset experiment done
+
+ //inform backend
+ await runProgramm();
+
+ console.log("Experiment & UI successfully reset to start.");
+ } catch (err) {
+ console.error("Failed to reset program:", err);
+ } finally {
+ setLoading(false);
+ }
+}, [graphReducer, setProgramState]);
+
+
if (phaseIds.length === 0) {
return No program loaded.
;
}
@@ -223,9 +251,6 @@ const handleStatusUpdate = React.useCallback((data: any) => {
case "nextPhase":
await nextPhase();
break;
- case "resetPhase":
- await resetPhase();
- break;
case "resetExperiment":
await resetExperiment();
break;
@@ -324,7 +349,7 @@ const handleStatusUpdate = React.useCallback((data: any) => {
{/*Restart Experiment button*/}