'use client'; import { zodResolver } from '@hookform/resolvers/zod'; import { useEffect, useRef, useState } from 'react'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; import { Card } from '../components/custom/card'; import ErrorMessage from '../components/custom/error'; import { Button } from '../components/ui/button'; import { Form, FormControl, FormField, FormItem, FormMessage } from '../components/ui/form'; import { Input } from '../components/ui/input'; import { ResponseSchema, SubscribeFormSchema } from '../utils/schemas'; export default function Home() { const [completed, setCompleted] = useState(false); const [message, setMessage] = useState(''); const [error, setError] = useState(false); const honeypotRef = useRef(null); const form = useForm>({ resolver: zodResolver(SubscribeFormSchema), defaultValues: { email: '', name: '' } }); useEffect(() => { if (honeypotRef.current) { honeypotRef.current.style.display = 'none'; } }, []); async function handleSubmit(values: z.infer) { if (values.name) { return; } try { const response = await fetch('/api/subscribe', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: values.email }) }); if (!response?.ok) { throw new Error(`Invalid response: ${response.status}`); } const formResponse: z.infer = await response.json(); if (!formResponse.success) { throw Error(formResponse.message); } setMessage(formResponse.message); setCompleted(true); } catch (error) { setError(true); } } function render() { if (error) { return ErrorMessage(); } if (completed) { return message; } return (
(
)} />

You can rest assured that we will fill your inbox with spam. We don't like it either! 🙂

); } return ( ); }