"use client"; import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import * as z from "zod"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { createApiClient, formatAxiosError } from "@app/lib/api"; import { useEnvContext } from "@app/hooks/useEnvContext"; import { useTranslations } from "next-intl"; import Image from "next/image"; import { passwordSchema } from "@server/auth/passwordSchema"; const formSchema = z .object({ setupToken: z.string().min(1, "Setup token is required"), email: z.string().email({ message: "Invalid email address" }), password: passwordSchema, confirmPassword: z.string() }) .refine((data) => data.password === data.confirmPassword, { path: ["confirmPassword"], message: "Passwords do not match" }); export default function InitialSetupPage() { const router = useRouter(); const api = createApiClient(useEnvContext()); const t = useTranslations(); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [checking, setChecking] = useState(true); const form = useForm({ resolver: zodResolver(formSchema), defaultValues: { setupToken: "", email: "", password: "", confirmPassword: "" } }); async function onSubmit(values: z.infer) { setLoading(true); setError(null); try { const res = await api.put("/auth/set-server-admin", { setupToken: values.setupToken, email: values.email, password: values.password }); if (res && res.status === 200) { router.replace("/"); return; } } catch (e) { setError(formatAxiosError(e, t("setupErrorCreateAdmin"))); } setLoading(false); } return (
{t("pangolinLogoAlt")}

{t("initialSetupTitle")}

{t("initialSetupDescription")}
( {t("setupToken")} {t("setupTokenDescription")} )} /> ( {t("email")} )} /> ( {t("password")} )} /> ( {t("confirmPassword")} )} /> {error && ( {error} )}
); }