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, useNavigate } from '@tanstack/react-router'; import { Session } from 'inspector'; import { useContext } from 'react'; import { useForm } from 'react-hook-form'; import * as v from 'valibot'; import { PasswordInput } from '../components/ui/password-input'; import { sessionFragment } from '../fragments'; import { useToastMutation } from '../hooks/useToastMutation'; import { AuthContext } from '../main'; export const Route = createFileRoute('/login')({ component: LoginComponent }); function LoginComponent() { return ( Login ); } interface FormValues { email: string; password: string; } function LoginForm() { const navigate = useNavigate(); const { update: login } = useToastMutation<{ login: Session }>({ 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) }); const { header, setHeaders } = useContext(AuthContext); if (header != null) navigate({ to: '/' }); return (
{ const { data } = await login({ variables: { input: { email: values.email, password: values.password } } }); if (data != null) { setHeaders(data.login); navigate({ to: '/' }); } })} >
); } const mutation = gql` mutation AuthLogin($input: LoginInput!) { login(input: $input) { ...Session } } ${sessionFragment} `;