import { useMutation } from "blitz"; import { LabeledTextField } from "../../core/components/labeled-text-field"; import { Form, FORM_ERROR } from "../../core/components/form"; import signup from "../../auth/mutations/signup"; import { Signup } from "../validations"; type SignupFormProps = { onSuccess?: () => void; }; export const SignupForm = (props: SignupFormProps) => { const [signupMutation] = useMutation(signup); return ( <div> <h1>Create an Account</h1> <Form submitText="Create Account" schema={Signup} initialValues={{ email: "", password: "" }} onSubmit={async (values) => { try { await signupMutation(values); props.onSuccess?.(); } catch (error: any) { if (error.code === "P2002" && error.meta?.target?.includes("email")) { // This error comes from Prisma return { email: "This email is already being used" }; } else { return { [FORM_ERROR]: error.toString() }; } } }} > <LabeledTextField name="email" label="Email" placeholder="Email" /> <LabeledTextField name="password" label="Password" placeholder="Password" type="password" /> </Form> </div> ); }; export default SignupForm;