import React, { useRef, useState } from 'react' export interface NewsletterFormProps { title?: string errorMessage?: string successMessage?: string emailLabel?: string emailPlaceholder?: string buttonText?: string buttonTextSuccess?: string apiUrl?: string } const NewsletterForm = ({ title = 'Subscribe to the newsletter', errorMessage = 'Your e-mail address is invalid or you are already subscribed!', successMessage = "You're subscribed ! 🎉", emailLabel = 'Email address', emailPlaceholder = 'Enter your email', buttonText = 'Sign up', buttonTextSuccess = 'Thank you!', apiUrl = '/api/newsletter', }: NewsletterFormProps) => { const inputEl = useRef(null) const [error, setError] = useState(false) const [message, setMessage] = useState('') const [subscribed, setSubscribed] = useState(false) const subscribe = async (e: React.FormEvent) => { e.preventDefault() const res = await fetch(apiUrl, { body: JSON.stringify({ email: inputEl.current.value, }), headers: { 'Content-Type': 'application/json', }, method: 'POST', }) const { error } = await res.json() if (error) { setError(true) setMessage(errorMessage) return } inputEl.current.value = '' setError(false) setSubscribed(true) } return (
{title}
{error && (
{message}
)}
) } export default NewsletterForm