import React, { useState, useEffect } from 'react'; import { Link } from 'react-router-dom'; const Footer: React.FC = () => { const [formData, setFormData] = useState({ name: '', email: '', subject: '', message: '', honeypot: '', }); const [status, setStatus] = useState(''); const [errors, setErrors] = useState>({}); const [lastSubmissionTime, setLastSubmissionTime] = useState(0); useEffect(() => { const storedTime = localStorage.getItem('lastSubmissionTime'); if (storedTime) { setLastSubmissionTime(parseInt(storedTime, 10)); } }, []); const validateForm = (data: typeof formData) => { const errors: Partial = {}; if (!data.name.trim()) errors.name = "Name is required"; if (!data.email.trim()) errors.email = "Email is required"; else if (!/\S+@\S+\.\S+/.test(data.email)) errors.email = "Email is invalid"; if (!data.subject.trim()) errors.subject = "Subject is required"; if (!data.message.trim()) errors.message = "Message is required"; return errors; }; const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData({ ...formData, [name]: value }); setErrors({ ...errors, [name]: '' }); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); const validationErrors = validateForm(formData); if (Object.keys(validationErrors).length > 0) { setErrors(validationErrors); setStatus('Please correct the errors in the form.'); return; } if (formData.honeypot) { setStatus('Form submission rejected.'); return; } const currentTime = Date.now(); if (currentTime - lastSubmissionTime < 60000) { setStatus('Please wait a moment before submitting again.'); return; } setStatus('Sending...'); try { const response = await fetch('/api/sendEmail', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(formData), }); const contentType = response.headers.get("content-type"); if (contentType && contentType.indexOf("application/json") !== -1) { const data = await response.json(); if (response.ok) { setStatus('Message sent successfully!'); setFormData({ name: '', email: '', subject: '', message: '', honeypot: '' }); setLastSubmissionTime(currentTime); localStorage.setItem('lastSubmissionTime', currentTime.toString()); } else { setStatus(`Failed to send message: ${data.error || 'Unknown error'}`); } } else { setStatus('Received non-JSON response from server'); } } catch (error: unknown) { console.error('Error sending message:', error); setStatus(`An error occurred: ${error instanceof Error ? error.message : 'Unknown error'}`); } }; return ( ); }; export default Footer;