'use client'; import React, { useEffect, useRef, useState } from 'react'; import { z } from 'zod'; import { ResponseSchema } from '../../utils/types'; import { CustomLink } from '../elements/customLink'; import ErrorComponent from '../elements/error'; import { HomeLink } from '../elements/homeLink'; import { SuccessComponent } from '../elements/success'; export const SubscribeForm = () => { const [completed, setCompleted] = useState(false); const [message, setMessage] = useState(''); const [error, setError] = useState(false); const honeypotRef = useRef(null); useEffect(() => { if (honeypotRef.current) { honeypotRef.current.style.display = 'none'; } }, []); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); const data = new FormData(e.currentTarget); if (data.get('name')) { return; } try { const response = await fetch('/api/subscribe', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ email: data.get('email'), }), }); if (!response?.ok) { throw new Error(`Invalid response: ${response.status}`); } const formResponse: z.infer = await response.json(); setMessage(formResponse.message); setCompleted(true); } catch (error) { console.log('Subscribe error', error); setError(true); } } if (error) { return ErrorComponent(); } if (completed) { return SuccessComponent(message); } return (

Subscribe to newsletter

); };