import { Form, redirect, useActionData } from "react-router"; import type { ActionFunction, ActionFunctionArgs, LoaderFunction } from "react-router"; import { useState } from "react"; import { useTranslation } from "react-i18next"; 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: LoaderFunction = 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: ActionFunction = async ({ request }: ActionFunctionArgs) => { const { t } = useTranslation(); const formData = await request.formData(); const localAuthMode = formData.get("localAuthMode"); if (!localAuthMode) return { error: t('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: t('An_error_occurred_while_setting_the_authentication_mode') }; } } return { error: t('Invalid_authentication_mode') }; }; export default function WelcomeLocalModeRoute() { const { t } = useTranslation(); const actionData = useActionData() as { error?: string }; const [selectedMode, setSelectedMode] = useState<"password" | "noPassword" | null>( null, ); return ( <>

{t('Local_Authentication_Method')}

{t('Select_how_you_d_like_to_secure_your_JetKVM_device_locally')}

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

{mode === "password" ? t('Password_protected') : t('No_password')}

{mode === "password" ? t('Secure_your_device_with_a_password_for_added_protection') : t('Quick_access_without_password_authentication')}

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

{actionData.error}

)}

{t('You_can_always_change_your_authentication_method_later_in_the_settings')}

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