import { ActionFunctionArgs, Form, redirect, useActionData } from "react-router-dom"; import { useState } from "react"; import GridBackground from "@components/GridBackground"; import Container from "@components/Container"; import { Button } from "@components/Button"; import LogoBlueIcon from "@/assets/logo-blue.png"; import LogoWhiteIcon from "@/assets/logo-white.svg"; import { DEVICE_API } from "@/ui.config"; import { GridCard } from "../components/Card"; import { cx } from "../cva.config"; import api from "../api"; import { DeviceStatus } from "./welcome-local"; const loader = async () => { const res = await api .GET(`${DEVICE_API}/device/status`) .then(res => res.json() as Promise); if (res.isSetup) return redirect("/login-local"); return null; }; const action = async ({ request }: ActionFunctionArgs) => { const formData = await request.formData(); const localAuthMode = formData.get("localAuthMode"); if (!localAuthMode) return { error: "Please select an authentication mode" }; if (localAuthMode === "password") { return redirect("/welcome/password"); } if (localAuthMode === "noPassword") { try { await api.POST(`${DEVICE_API}/device/setup`, { localAuthMode, }); return redirect("/"); } catch (error) { console.error("Error setting authentication mode:", error); return { error: "An error occurred while setting the authentication mode" }; } } return { error: "Invalid authentication mode" }; }; export default function WelcomeLocalModeRoute() { const actionData = useActionData() as { error?: string }; const [selectedMode, setSelectedMode] = useState<"password" | "noPassword" | null>( null, ); return ( <>

Local Authentication Method

Select how you{"'"}d like to secure your JetKVM device locally.

{["password", "noPassword"].map(mode => (
setSelectedMode(mode as "password" | "noPassword")} >

{mode === "password" ? "Password protected" : "No Password"}

{mode === "password" ? "Secure your device with a password for added protection." : "Quick access without password authentication."}

{ setSelectedMode(mode as "password" | "noPassword"); }} className="absolute w-4 h-4 text-blue-600 right-2 top-2" />
))}
{actionData?.error && (

{actionData.error}

)}

You can always change your authentication method later in the settings.

); } WelcomeLocalModeRoute.action = action; WelcomeLocalModeRoute.loader = loader;