import { Form, redirect, useActionData, useLoaderData } from "react-router"; import type { ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs } from "react-router"; import { ChevronLeftIcon } from "@heroicons/react/16/solid"; import { User } from "@hooks/stores"; import { Button, LinkButton } from "@components/Button"; import Card from "@components/Card"; import { CardHeader } from "@components/CardHeader"; import DashboardNavbar from "@components/Header"; import Fieldset from "@components/Fieldset"; import { checkAuth } from "@/main"; import { CLOUD_API } from "@/ui.config"; import { m } from "@localizations/messages.js"; interface LoaderData { device: { id: string; name: string; user: { googleId: string } }; user: User; } const action: ActionFunction = async ({ request }: ActionFunctionArgs) => { const { deviceId } = Object.fromEntries(await request.formData()); try { const res = await fetch(`${CLOUD_API}/devices/${deviceId}`, { method: "DELETE", credentials: "include", headers: { "Content-Type": "application/json" }, mode: "cors", }); if (!res.ok) { return { message: m.deregister_error({ status: res.statusText }) }; } } catch (e) { console.error(e); const message = e instanceof Error ? e.message : String(e); return { message: m.deregister_error({ status: message }) }; } return redirect("/devices"); }; const loader: LoaderFunction = async ({ params }: LoaderFunctionArgs) => { const user = await checkAuth(); const { id } = params; try { const res = await fetch(`${CLOUD_API}/devices/${id}`, { method: "GET", credentials: "include", mode: "cors", }); const { device } = (await res.json()) as { device: { id: string; name: string; user: { googleId: string } }; }; return { device, user }; } catch (e) { console.error(e); return { user }; } }; export default function DevicesIdDeregister() { const { device, user } = useLoaderData() as LoaderData; const error = useActionData() as { message: string }; return (
{error?.message && (

{m.deregister_error({ status: error.message })}

)}
); } DevicesIdDeregister.loader = loader; DevicesIdDeregister.action = action;