'use client'; import { CardDescription } from '@components/Card'; import { CustomCard } from '@components/CustomCard'; import { ErrorMessage } from '@components/ErrorMessage'; import { FormControl } from '@components/form/FormControl'; import { FormErrorMessage } from '@components/form/FormErrorMessage'; import { Input } from '@components/Input'; import { LoadingButton } from '@components/LoadingButton'; import { SchemaOrg } from '@components/SchemaOrg'; import { FormField } from '@contexts/FormField/FormFieldProvider'; import { FormItem } from '@contexts/FormItem/FormItemProvider'; import { zodResolver } from '@hookform/resolvers/zod'; import { ResponseType, UnsubscribeFormSchema, UnsubscribeFormType } from '@utils/validationSchemas'; import axios from 'axios'; import { useEffect, useRef, useState } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; const Unsubscribe = () => { const [completed, setCompleted] = useState(false); const [message, setMessage] = useState(''); const [error, setError] = useState(false); const ref = useRef(null); const [isLoading, setIsLoading] = useState(false); const schema = { '@context': 'https://schema.org', '@type': 'WebSite', name: 'Hackernews Newsletter', title: 'Unsubscribe', url: `${process.env.HOME_URL}/unsubscribe` }; const form = useForm({ resolver: zodResolver(UnsubscribeFormSchema), defaultValues: { email: '' }, mode: 'onSubmit', reValidateMode: 'onSubmit' }); useEffect(() => { if (ref.current) { ref.current.style.display = 'none'; } }, []); async function handleSubmit(values: UnsubscribeFormType) { setIsLoading(true); try { const { data } = await axios.post( '/api/unsubscribe', { email: values.email }, { headers: { 'Content-Type': 'application/json' } } ); if (!data.success) { throw new Error(data.message); } setMessage(data.message); setCompleted(true); } catch (error) { if (axios.isAxiosError(error)) { console.error('Axios error:', error.response?.data || error.message); } setError(true); } finally { setIsLoading(false); } } const renderContent = () => { if (error) { return ErrorMessage(); } if (completed) { return ( {message} ); } return (
(
)} />
Unsubscribe
); }; return ( <> ); }; export default Unsubscribe;