"use client"; import { mailchimp } from '@/app/resources' import { newsletter } from '@/app/resources' import { Button, Flex, Heading, Input, Text } from '@/once-ui/components'; import { Background } from '@/once-ui/components/Background'; import { useState } from 'react'; function debounce void>(func: T, delay: number): T { let timeout: ReturnType; return ((...args: Parameters) => { clearTimeout(timeout); timeout = setTimeout(() => func(...args), delay); }) as T; } export const Mailchimp = () => { const [email, setEmail] = useState(''); const [error, setError] = useState(''); const [touched, setTouched] = useState(false); const validateEmail = (email: string): boolean => { if (email === '') { return true; } const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return emailPattern.test(email); }; const handleChange = (e: React.ChangeEvent) => { const value = e.target.value; setEmail(value); if (!validateEmail(value)) { setError('Please enter a valid email address.'); } else { setError(''); } }; const debouncedHandleChange = debounce(handleChange, 2000); const handleBlur = () => { setTouched(true); if (!validateEmail(email)) { setError('Please enter a valid email address.'); } }; return ( {newsletter.title} {newsletter.description}
{ if (error) { handleChange(e); } else { debouncedHandleChange(e); } }} onBlur={handleBlur} error={error}/>
) }