/* global React, ReactDOM */ /* ============================================================ FRESTA — Captura de contato antes do download do material. COMO LIGAR O SERVIÇO (Formspree, Getform, Basin, etc.): 1. Crie um formulário no serviço e copie a URL do endpoint. 2. Cole essa URL em FRESTA_LEAD_ENDPOINT abaixo. Pronto. Enquanto estiver vazio, roda em "modo demonstração": valida, guarda o contato no navegador (localStorage, chave "fresta_leads") e abre o material assim mesmo. ============================================================ */ const FRESTA_LEAD_ENDPOINT = 'https://formspree.io/f/mwvjvvzr'; // ex.: 'https://formspree.io/f/xxxxxxx' const MATERIAL_URL = 'assets/FRESTA-Mentoria.pdf'; const { useState, useEffect, useRef } = React; function isEmail(v) { return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v.trim()); } function DownloadGate() { const [open, setOpen] = useState(false); const [sending, setSending] = useState(false); const [done, setDone] = useState(false); const [nome, setNome] = useState(''); const [email, setEmail] = useState(''); const [consent, setConsent] = useState(false); const [touched, setTouched] = useState(false); const nomeRef = useRef(null); // pré-preenche se a pessoa já deixou os dados antes useEffect(() => { try { const last = JSON.parse(localStorage.getItem('fresta_last_lead') || 'null'); if (last) { setNome(last.nome || ''); setEmail(last.email || ''); } } catch (e) {} }, []); // foco + trava de scroll + Esc quando abre useEffect(() => { if (!open) return; const t = setTimeout(() => { if (nomeRef.current) nomeRef.current.focus(); }, 60); const prev = document.body.style.overflow; document.body.style.overflow = 'hidden'; const onKey = (e) => { if (e.key === 'Escape') close(); }; window.addEventListener('keydown', onKey); return () => { clearTimeout(t); document.body.style.overflow = prev; window.removeEventListener('keydown', onKey); }; }, [open]); function close() { setOpen(false); setSending(false); setTouched(false); // mantém os campos preenchidos; reseta só o estado de "enviado" após fechar setTimeout(() => setDone(false), 250); } const nomeOk = nome.trim().length >= 2; const emailOk = isEmail(email); const valid = nomeOk && emailOk && consent; function openMaterial() { // download direto, mesmo domínio: evita popup/extensão bloqueando nova aba const a = document.createElement('a'); a.href = MATERIAL_URL; a.download = 'FRESTA - Mentoria pessoal e de carreira.pdf'; a.rel = 'noopener'; document.body.appendChild(a); a.click(); document.body.removeChild(a); } function recordLocally(lead) { try { localStorage.setItem('fresta_last_lead', JSON.stringify({ nome: lead.nome, email: lead.email })); const all = JSON.parse(localStorage.getItem('fresta_leads') || '[]'); all.push(lead); localStorage.setItem('fresta_leads', JSON.stringify(all)); } catch (e) {} } function handleSubmit(e) { e.preventDefault(); setTouched(true); if (!valid) return; const lead = { nome: nome.trim(), email: email.trim(), consentimento: 'Sim, aceito receber contato da FRESTA', origem: 'Material da Mentoria', data: new Date().toLocaleString('pt-BR'), _subject: `Novo contato da FRESTA: ${nome.trim()}`, }; // abre o material AGORA (dentro do clique) pra não ser bloqueado pelo navegador openMaterial(); recordLocally(lead); setDone(true); // envia ao serviço em segundo plano (se configurado) if (FRESTA_LEAD_ENDPOINT) { setSending(true); fetch(FRESTA_LEAD_ENDPOINT, { method: 'POST', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify(lead), }).catch(() => {}).finally(() => setSending(false)); } } return ( {open && ReactDOM.createPortal(
{ if (e.target === e.currentTarget) close(); }}>
{!done ? (

Receba o material

Deixe seu nome e e-mail. O material abre na sequência.

setNome(e.target.value)} placeholder="Como podemos te chamar?" /> {touched && !nomeOk && Conta pra gente seu nome.}
setEmail(e.target.value)} placeholder="seu@email.com" /> {touched && !emailOk && Confere o e-mail, parece incompleto.}
) : (

Tudo certo, {nome.trim().split(' ')[0]}.

O download do material começou. Se não iniciar,{' '} .

)}
, document.body )}
); } Object.assign(window, { DownloadGate });