import { ActionFunctionArgs, Form, LoaderFunctionArgs, redirect, useActionData, useParams, useSearchParams, } from "react-router-dom"; import SimpleNavbar from "@components/SimpleNavbar"; import GridBackground from "@components/GridBackground"; import Container from "@components/Container"; import StepCounter from "@components/StepCounter"; import Fieldset from "@components/Fieldset"; import { InputFieldWithLabel } from "@components/InputField"; import { Button } from "@components/Button"; import { checkAuth } from "@/main"; import { CLOUD_API } from "@/ui.config"; import api from "../api"; const loader = async ({ params }: LoaderFunctionArgs) => { await checkAuth(); const res = await fetch(`${CLOUD_API}/devices/${params.id}`, { method: "GET", mode: "cors", credentials: "include", }); if (res.ok) { return res.json(); } else { return redirect("/devices"); } }; const action = async ({ request }: ActionFunctionArgs) => { // Handle form submission const { name, id, returnTo } = Object.fromEntries(await request.formData()); const res = await api.PUT(`${CLOUD_API}/devices/${id}`, { name }); if (res.ok) { return redirect(returnTo?.toString() ?? `/devices/${id}`); } else { return { error: "There was an error creating your device" }; } }; export default function SetupRoute() { const action = useActionData() as { error?: string }; const { id } = useParams() as { id: string }; const [sp] = useSearchParams(); const returnTo = sp.get("returnTo"); return ( <>

Let's name your device

Name your device so you can easily identify it later. You can change this name at any time.

{returnTo && }
); } SetupRoute.loader = loader; SetupRoute.action = action;