import { Button } from "@minmon/ui/components/button"; import { useForm } from "@tanstack/react-form"; import { useNavigate } from "@tanstack/react-router"; import { toast } from "sonner"; import z from "zod"; import { TextField } from "@/components/dashboard-ui"; import { authClient } from "@/lib/auth-client"; import { formatErrorMessage } from "@/utils/errors"; import Loader from "./loader"; export default function SignUpForm({ onSwitchToSignIn }: { onSwitchToSignIn: () => void }) { const navigate = useNavigate({ from: "/", }); const { isPending } = authClient.useSession(); const form = useForm({ defaultValues: { email: "", password: "", name: "", }, onSubmit: async ({ value }) => { await authClient.signUp.email( { email: value.email, password: value.password, name: value.name, }, { onSuccess: () => { navigate({ to: "/dashboard", }); toast.success("Sign up successful"); }, onError: (error) => { toast.error(formatErrorMessage(error, "Could not sign up")); }, }, ); }, validators: { onSubmit: z.object({ name: z.string().min(2, "Name must be at least 2 characters"), email: z.email("Invalid email address"), password: z.string().min(8, "Password must be at least 8 characters"), }), }, }); if (isPending) { return ; } return (

Create Account

{ e.preventDefault(); e.stopPropagation(); form.handleSubmit(); }} className="space-y-4" noValidate > {(field) => ( field.handleChange(e.target.value)} errors={field.state.meta.errors} /> )} {(field) => ( field.handleChange(e.target.value)} errors={field.state.meta.errors} /> )} {(field) => ( field.handleChange(e.target.value)} errors={field.state.meta.errors} /> )} ({ canSubmit: state.canSubmit, isSubmitting: state.isSubmitting })} > {({ canSubmit, isSubmitting }) => ( )}
); }