'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'; 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 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: ResponseType = await response.json(); if (!formResponse.success) { throw Error(formResponse.message); } setMessage(formResponse.message); setCompleted(true); } catch (error) { 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;