'use client'; import { useActionState } from 'react'; import { initialFormState, mergeForm, useForm, useTransform, } from '@tanstack/react-form-nextjs'; import { Field, FieldGroup, FieldLabel } from '@/components/ui/field'; import { Button } from '@/components/ui/button'; import { Spinner } from '@/components/ui/spinner'; import { Input } from '@/components/ui/input'; import ErrorField from '@/components/form/Error-field'; import { loginAction } from '@/app/(access)/login/action'; import { loginSchema } from '@/components/access/login-form-options'; import { formOpts } from './login-form-options'; import OAuthButtons from './oAuth-buttons'; export default function LoginForm() { const [state, action, pending] = useActionState( loginAction, initialFormState, ); const form = useForm({ ...formOpts, transform: useTransform((baseForm) => mergeForm(baseForm, state!), [state]), validators: { onChange: loginSchema, }, }); return (
form.handleSubmit()} className='p-6 md:p-8' >

Welcome back

Login to your EDU+ account

{(field) => { const isInvalid = field.state.meta.isTouched && !field.state.meta.isValid; return ( Email field.handleChange(e.target.value)} placeholder='john@example.com' type='email' aria-invalid={isInvalid} required /> ); }} {(field) => { const isInvalid = field.state.meta.isTouched && !field.state.meta.isValid; return (
Password Forgot your password?
field.handleChange(e.target.value)} />
); }}
[ formState.canSubmit, formState.isSubmitting, formState.isPristine, ]} > {([canSubmit, isSubmitting, isPristine]) => ( )}
); }