import { arktypeResolver } from "@hookform/resolvers/arktype"; import { type } from "arktype"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "~/client/components/ui/form"; import { authMiddleware } from "~/middleware/auth"; import { AuthLayout } from "~/client/components/auth-layout"; import { Input } from "~/client/components/ui/input"; import { Button } from "~/client/components/ui/button"; import { authClient } from "~/client/lib/auth-client"; import { useState } from "react"; import { useNavigate } from "@tanstack/react-router"; export const clientMiddleware = [authMiddleware]; const onboardingSchema = type({ username: type("2<=string<=30").pipe((str) => str.trim().toLowerCase()), email: type("string.email").pipe((str) => str.trim().toLowerCase()), password: "string>=8", confirmPassword: "string>=1", }); type OnboardingFormValues = typeof onboardingSchema.inferIn; export function OnboardingPage() { const navigate = useNavigate(); const [submitting, setSubmitting] = useState(false); const form = useForm({ resolver: arktypeResolver(onboardingSchema), defaultValues: { username: "", password: "", confirmPassword: "", email: "", }, }); const onSubmit = async (values: OnboardingFormValues) => { if (values.password !== values.confirmPassword) { form.setError("confirmPassword", { type: "manual", message: "Passwords do not match", }); return; } const { data, error } = await authClient.signUp.email({ username: values.username.toLowerCase().trim(), password: values.password, email: values.email.toLowerCase().trim(), name: values.username, displayUsername: values.username, hasDownloadedResticPassword: false, fetchOptions: { onRequest: () => { setSubmitting(true); }, onResponse: () => { setSubmitting(false); }, }, }); if (data?.token) { toast.success("Admin user created successfully!"); void navigate({ to: "/download-recovery-key" }); } else if (error) { console.error(error); const errorMessage = error.message ?? "Unknown error"; toast.error("Failed to create admin user", { description: errorMessage }); } }; return (
( Email Enter your email address )} /> ( Username Choose a username for the admin account )} /> ( Password Password must be at least 8 characters long. )} /> ( Confirm Password )} />
); }