'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 { SchemaOrg } from '@components/SchemaOrg'; import { FormField } from '@contexts/FormField/FormFieldProvider'; import { FormItem } from '@contexts/FormItem/FormItemProvider'; import { zodResolver } from '@hookform/resolvers/zod'; import { LoadingButton } from '@components/LoadingButton'; import { ResponseType, SubscribeFormSchema, SubscribeFormType } from '@utils/validationSchemas'; import { useState } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import axios from 'axios'; export const Home = () => { const [completed, setCompleted] = useState(false); const [message, setMessage] = useState(''); const [error, setError] = useState(false); const [isLoading, setIsLoading] = useState(false); const schema = { '@context': 'https://schema.org', '@type': 'WebSite', name: 'Hackernews Newsletter', title: 'Home', url: process.env.HOME_URL }; const form = useForm({ resolver: zodResolver(SubscribeFormSchema), defaultValues: { email: '' }, mode: 'onSubmit', reValidateMode: 'onSubmit' }); async function handleSubmit(values: SubscribeFormType) { setIsLoading(true); try { const { data } = await axios.post( '/api/subscribe', { 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 (
(
)} />
Submit

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

); }; return ( <> ); }; export default Home;