// Reusable contact form for all Aloha Smart System product pages. // Submits to Web3Forms → info@alohasmartsystem.com // Usage: // const AlohaContactForm = ({ accentColor = '#C8553D', deepColor = '#7A2E1F', productName = '', defaultTopic = '', isMobile = false, variant = 'light', // 'light' (form on dark bg) or 'dark' (form on light bg) }) => { const [name, setName] = React.useState(''); const [phone, setPhone] = React.useState(''); const [email, setEmail] = React.useState(''); const [business, setBusiness] = React.useState(''); const [message, setMessage] = React.useState(''); const [touched, setTouched] = React.useState(false); const [sent, setSent] = React.useState(false); const [submitting, setSubmitting] = React.useState(false); const [errorMsg, setErrorMsg] = React.useState(''); const emailValid = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email.trim()); const valid = name.trim().length > 0 && emailValid && message.trim().length > 0; const WEB3FORMS_KEY = 'adeb6c3b-2bf5-4dad-a49a-59875cbaf20d'; const handleSubmit = async (e) => { e.preventDefault(); setTouched(true); if (!valid || submitting) return; setSubmitting(true); setErrorMsg(''); const subjectPrefix = productName ? `[${productName}] ` : ''; const businessPart = business.trim() ? ' (' + business.trim() + ')' : ''; const payload = { access_key: WEB3FORMS_KEY, subject: `${subjectPrefix}New inquiry — ${name.trim()}${businessPart}`, from_name: productName ? `${productName} page` : 'Aloha Smart System', product: productName || '(general)', topic: defaultTopic || productName || '(not specified)', name: name.trim(), phone: phone.trim() || '(not provided)', email: email.trim(), business: business.trim() || '(not provided)', message: message.trim(), replyto: email.trim(), botcheck: '', }; try { const res = await fetch('https://api.web3forms.com/submit', { method: 'POST', headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, body: JSON.stringify(payload), }); const data = await res.json(); if (data && data.success) { setSent(true); } else { setErrorMsg((data && data.message) || 'Something went wrong. Please email info@alohasmartsystem.com directly.'); } } catch (err) { setErrorMsg('Network error. Please email info@alohasmartsystem.com directly.'); } finally { setSubmitting(false); } }; // Form sits on a dark/colored background (most product CTA sections) const onDark = variant === 'light'; const inputBase = { width: '100%', background: onDark ? 'rgba(255,255,255,0.08)' : 'rgba(0,0,0,0.04)', border: `1px solid ${onDark ? 'rgba(255,255,255,0.18)' : 'rgba(0,0,0,0.12)'}`, borderRadius: 10, color: onDark ? '#fff' : '#1A1A1A', fontSize: 15, padding: '13px 15px', outline: 'none', fontFamily: 'inherit', transition: 'border-color .15s, background .15s', boxSizing: 'border-box', }; const labelStyle = { display: 'block', fontSize: 11, fontWeight: 700, letterSpacing: '0.06em', color: onDark ? 'rgba(255,255,255,0.75)' : 'rgba(0,0,0,0.6)', marginBottom: 7, textTransform: 'uppercase', }; const fieldErr = (cond) => touched && cond ? { ...inputBase, borderColor: '#F87171' } : inputBase; const cardBg = onDark ? 'rgba(255,255,255,0.06)' : '#FFFFFF'; const cardBorder = onDark ? '1px solid rgba(255,255,255,0.12)' : '1px solid rgba(0,0,0,0.08)'; if (sent) { return (
Mahalo — we got it.

We’ll come back within 48 hours.

); } return (
setName(e.target.value)} placeholder="Your name" style={fieldErr(!name.trim())} autoComplete="name" />
setPhone(e.target.value)} placeholder="(808) 555-0000" style={inputBase} autoComplete="tel" />
setEmail(e.target.value)} placeholder="you@yourcompany.com" style={fieldErr(!emailValid)} autoComplete="email" />
setBusiness(e.target.value)} placeholder="Restaurant, store, food hall..." style={inputBase} autoComplete="organization" />