"use client" import * as React from "react" import { zodResolver } from "@hookform/resolvers/zod" import { FieldError, FieldErrors, useForm, useFormContext, useFormState } from "react-hook-form" import * as z from "zod" import { cn } from "@/lib/utils" import { IconSpinner } from "@/components/ui/icons" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form" import { graphql } from "@/lib/gql/generates" import { useGraphQLForm } from "@/lib/tabby-gql-client" export const registerUser = graphql(/* GraphQL */ ` mutation register($email: String!, $password1: String!, $password2: String!, $invitationCode: String) { register( email: $email password1: $password1 password2: $password2 invitationCode: $invitationCode ) { accessToken refreshToken } } `) const formSchema = z.object({ email: z.string().email("Invalid email address"), password1: z.string(), password2: z.string(), invitationCode: z.string().optional(), }); interface UserAuthFormProps extends React.HTMLAttributes { invitationCode?: string } export function UserAuthForm({ className, invitationCode, ...props }: UserAuthFormProps) { const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { email: "a@a.com", password1: "a@a.comacom", password2: "a@a.comacom", invitationCode, } }) const { isSubmitting } = form.formState; const { onSubmit } = useGraphQLForm(registerUser, { onError: (path, message) => form.setError(path as any, { message }) }); return (
( Email )} /> ( Password )} /> ( Confirm Password )} /> ( )} />
) }