import { useState, useRef, useEffect } from "react"; import { Form, redirect, useActionData } from "react-router"; import type { ActionFunction, ActionFunctionArgs, LoaderFunction } from "react-router"; import { LuEye, LuEyeOff } from "react-icons/lu"; import LogoBlueIcon from "@assets/logo-blue.png"; import LogoWhiteIcon from "@assets/logo-white.svg"; import GridBackground from "@components/GridBackground"; import Container from "@components/Container"; import Fieldset from "@components/Fieldset"; import { InputFieldWithLabel } from "@components/InputField"; import { Button } from "@components/Button"; import { DEVICE_API } from "@/ui.config"; import api from "@/api"; import { m } from "@localizations/messages.js"; 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 formData = await request.formData(); const password = formData.get("password"); const confirmPassword = formData.get("confirmPassword"); if (password !== confirmPassword) { return { error: m.local_auth_error_passwords_not_match() }; } try { const response = await api.POST(`${DEVICE_API}/device/setup`, { localAuthMode: "password", password, }); if (response.ok) { return redirect("/"); } else { return { error: m.auth_mode_local_password_failed_set({ error: response.statusText }) }; } } catch (error) { console.error("Error setting password:", error); return { error: m.auth_mode_local_password_failed_set({ error: String(error) }) }; } }; export default function WelcomeLocalPasswordRoute() { const actionData = useActionData() as { error?: string }; const [showPassword, setShowPassword] = useState(false); const passwordInputRef = useRef(null); // Don't focus immediately, let the animation finish useEffect(() => { const timer = setTimeout(() => { passwordInputRef.current?.focus(); }, 1000); // 1 second delay return () => clearTimeout(timer); }, []); return ( <>

{m.auth_mode_local_password_set()}

{m.auth_mode_local_password_set_description()}

setShowPassword(false)} className="pointer-events-auto" role="switch" aria-checked={showPassword} >
) : (
setShowPassword(true)} className="pointer-events-auto" role="switch" aria-checked={!showPassword} >
) } />
{actionData?.error &&

{ }

}

{m.auth_mode_local_password_note()} {m.auth_mode_local_password_note_local()}

); } WelcomeLocalPasswordRoute.loader = loader; WelcomeLocalPasswordRoute.action = action;