'use client'; import React, { useState, useRef } from 'react'; import { useRouter } from 'next/navigation'; import LabeledInput from '@/components/custom-ui/labeled-input'; import useZodForm from '@/lib/hooks/useZodForm'; import { loginSchema, registerSchema } from '@/lib/auth/validation'; import { loginAction } from '@/lib/auth/login'; import { registerAction } from '@/lib/auth/register'; import { IconButton } from '../buttons/icon-button'; import { FileKey, FileKey2, LogIn, MailOpen, RotateCcwKey, UserCheck, UserPen, UserPlus, } from 'lucide-react'; function LoginFormElement({ setIsSignUp, formRef, }: { setIsSignUp: (value: boolean | ((prev: boolean) => boolean)) => void; formRef?: React.RefObject; }) { const { handleSubmit, formState, register, setError } = useZodForm(loginSchema); const router = useRouter(); const onSubmit = handleSubmit(async (data) => { try { const { error } = await loginAction(data); if (error) { setError('root', { message: error, }); return; } else { router.push('/home'); router.refresh(); return; } } catch (error: unknown) { if (error instanceof Error) setError('root', { message: error?.message, }); else setError('root', { message: 'An unknown error occurred.', }); } }); return (
Login { formRef?.current?.reset(); setIsSignUp((v) => !v); }} data-cy='register-switch' icon={UserPlus} > Sign Up
{formState.errors.root?.message && (

{formState.errors.root?.message}

)}
); } function RegisterFormElement({ setIsSignUp, formRef, }: { setIsSignUp: (value: boolean | ((prev: boolean) => boolean)) => void; formRef?: React.RefObject; }) { const { handleSubmit, formState, register, setError } = useZodForm(registerSchema); const onSubmit = handleSubmit(async (data) => { try { const { error } = await registerAction(data); if (error) { setError('root', { message: error, }); return; } else { formRef?.current?.reset(); setIsSignUp(false); // TODO: Show registration success message (reminder to verify email) return; } } catch (error: unknown) { if (error instanceof Error) setError('root', { message: error?.message, }); else setError('root', { message: 'An unknown error occurred.', }); } }); return (
Sign Up { formRef?.current?.reset(); setIsSignUp((v) => !v); }} icon={LogIn} > Back to Login
{formState.errors.root?.message && (

{formState.errors.root?.message}

)}
); } export default function LoginForm() { const [isSignUp, setIsSignUp] = useState(false); const formRef = useRef(null); if (isSignUp) { return ; } return ; }