'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 { CustomCard } 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, UnsubscribeFormSchema } from '../../utils/types'; export default function Unsubscribe() { const [completed, setCompleted] = useState(false); const [message, setMessage] = useState(''); const [error, setError] = useState(false); const honeypotRef = useRef(null); const form = useForm>({ resolver: zodResolver(UnsubscribeFormSchema), 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/unsubscribe', { 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(); setMessage(formResponse.message); setCompleted(true); } catch (error) { console.log('Unsubscribe error', error); setError(true); } } function render() { if (error) { return ErrorMessage(); } if (completed) { return message; } return (
( )} /> ); } return ( ); }