From d1b64ddd78d8b8dc3eca76038a75071ab2a575d9 Mon Sep 17 00:00:00 2001 From: Arne Rief Date: Mon, 22 Dec 2025 12:56:20 +0100 Subject: Sidebar split into smaller components --- frontend/src/components/SimulationActions.tsx | 103 ++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 frontend/src/components/SimulationActions.tsx (limited to 'frontend/src/components/SimulationActions.tsx') diff --git a/frontend/src/components/SimulationActions.tsx b/frontend/src/components/SimulationActions.tsx new file mode 100644 index 0000000..c91b933 --- /dev/null +++ b/frontend/src/components/SimulationActions.tsx @@ -0,0 +1,103 @@ +import { useState, type Dispatch, type SetStateAction } from "react"; +import type { ErrorResponse } from "../types/error"; + +type Props = { + apiUrl: string; + token: string | null; + setErrorMessage: Dispatch>; +}; + +function SimulationActions({ apiUrl, token, setErrorMessage }: Props) { + const [isSimulationActive, setIsSimulationActive] = + useState(false); + + // TODO type responses + async function handleStartAllRobots() { + setIsSimulationActive(true); + + try { + const response = await fetch(`${apiUrl}/robots/move`, { + method: "POST", + headers: { + Authorization: `Bearer ${token}`, + "Content-Type": "application/json", + }, + }); + + if (!response.ok) { + const errorData: ErrorResponse = await response.json(); + throw new Error( + errorData.message || "Failed to set all robots moving." + ); + } + + console.log("All robots set moving."); + } catch (error) { + console.error("Error starting robots:", error); + + if (error instanceof Error) { + setErrorMessage(error.message); + } else { + setErrorMessage("An unexpected error occurred."); + } + + setIsSimulationActive(false); + } + } + + async function handleStopAllRobots() { + setIsSimulationActive(false); + + try { + const response = await fetch(`${apiUrl}/robots/stop`, { + method: "POST", + headers: { + Authorization: `Bearer ${token}`, + "Content-Type": "application/json", + }, + }); + + if (!response.ok) { + const errorData: ErrorResponse = await response.json(); + throw new Error( + errorData.message || "Failed to set all robots idle." + ); + } + + console.log("All robots set idle."); + } catch (error) { + console.error("Error stopping robots:", error); + + if (error instanceof Error) { + setErrorMessage(error.message); + } else { + setErrorMessage("An unexpected error occurred."); + } + + setIsSimulationActive(true); + } + } + + return ( +
+ + + +
+ ); +} + +export default SimulationActions; + -- cgit v1.2.3