import { gql } from '@apollo/client'; import { Heading, Input, Stack } from '@chakra-ui/react'; import { Button } from '@client/components/ui/button'; import { Field } from '@client/components/ui/field'; import { valibotResolver } from '@hookform/resolvers/valibot'; import { createFileRoute } from '@tanstack/react-router'; import { Session } from 'inspector'; import { useForm } from 'react-hook-form'; import * as v from 'valibot'; import { sessionFragment } from '../fragments'; import { useToastMutation } from '../hooks/useToastMutation'; export const Route = createFileRoute('/login')({ component: LoginComponent }); function LoginComponent() { return ( Login ); } interface FormValues { email: string; password: string; } function LoginForm() { const { update: login } = useToastMutation({ mutation, successMsg: 'Logged in successfully.' }); const schema = v.pipe( v.object({ email: v.pipe(v.string(), v.nonEmpty('Email is required'), v.email('Invalid email')), password: v.pipe(v.string(), v.nonEmpty('Password is required')) }) ); const { register, handleSubmit, formState: { errors } } = useForm({ resolver: valibotResolver(schema) }); return (
{ const { data } = await login({ variables: { input: { email: values.email, password: values.password } } }); alert(JSON.stringify(data)); })} >
); } const mutation = gql` mutation AuthLogin($input: LoginInput!) { login(input: $input) { ...Session } } ${sessionFragment} `;