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/AddRobotForm.tsx | 121 +++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 frontend/src/components/AddRobotForm.tsx (limited to 'frontend/src/components/AddRobotForm.tsx') diff --git a/frontend/src/components/AddRobotForm.tsx b/frontend/src/components/AddRobotForm.tsx new file mode 100644 index 0000000..c178657 --- /dev/null +++ b/frontend/src/components/AddRobotForm.tsx @@ -0,0 +1,121 @@ +import { + useState, + type ChangeEvent, + type Dispatch, + type SetStateAction, +} from "react"; +import type { ErrorResponse } from "../types/error"; +import type { CreateRobotResponse } from "../types/robot"; + +type Props = { + apiUrl: string; + errorMessage: string; + token: string | null; + setErrorMessage: Dispatch>; + setIsAddingRobot: Dispatch>; +}; + +function AddRobotForm({ + apiUrl, + errorMessage, + token, + setErrorMessage, + setIsAddingRobot, +}: Props) { + const [isSubmitting, setIsSubmitting] = useState(false); + const [newRobotName, setNewRobotName] = useState(""); + + // Cancel robot creation + function handleCancel() { + setIsAddingRobot(false); + setNewRobotName(""); + setErrorMessage(""); + } + + function handleInputChange(event: ChangeEvent) { + if (errorMessage) { + setErrorMessage(""); + } + + setNewRobotName(event.target.value); + } + + // Create new robot + async function handleSubmit() { + if (!newRobotName.trim()) { + setErrorMessage("Please enter a name for the robot."); + return; + } + + setIsSubmitting(true); + setErrorMessage(""); + + try { + const response = await fetch(`${apiUrl}/robots`, { + method: "POST", + headers: { + Authorization: `Bearer ${token}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ name: newRobotName.trim() }), + }); + + if (!response.ok) { + const errorData: ErrorResponse = await response.json(); + throw new Error( + errorData.message || + `Error creating the new robot: ${response.status}` + ); + } + + const data: CreateRobotResponse = await response.json(); + console.log("Robot created successfully: ", data); + + // Reset form and close input field + setNewRobotName(""); + setIsAddingRobot(false); + } catch (error) { + console.error("Error creating the new robot:", error); + + if (error instanceof Error) { + setErrorMessage(error.message); + } else { + setErrorMessage("Error creating the new robot."); + } + } finally { + setIsSubmitting(false); + } + } + + return ( +
+ +
+ + +
+
+ ); +} + +export default AddRobotForm; + -- cgit v1.2.3