// Root app — state machine + loading overlay const LOADING_SEQUENCE = [ { text: "Calculando potencial…", duration: 500 }, { text: "Cruzando dados de mercado…", duration: 700 }, { text: "Estimando adoção por produto…", duration: 700 }, { text: "Quase lá…", duration: 600 }, ]; function LoadingOverlay() { const [idx, setIdx] = React.useState(0); React.useEffect(() => { if (idx >= LOADING_SEQUENCE.length - 1) return; const t = setTimeout(() => setIdx(idx + 1), LOADING_SEQUENCE[idx].duration); return () => clearTimeout(t); }, [idx]); return (
{LOADING_SEQUENCE[idx].text}
); } const INITIAL_FORM = { segmento: "", clientes: "", faturamento: "", produtos: [], nome: "", email: "", whatsapp: "", empresa: "", cargo: "", consent: false, }; function App() { // state machine: 'landing' | 'modal' | 'loading' | 'result' const [stage, setStage] = React.useState("landing"); const [modalOpen, setModalOpen] = React.useState(false); const [form, setForm] = React.useState(INITIAL_FORM); const [result, setResult] = React.useState(null); const [leadSent, setLeadSent] = React.useState(false); const onCalc = () => setModalOpen(true); const onCloseModal = () => setModalOpen(false); const onSubmit = () => { // Computa resultado antes de fechar o modal para incluir no e-mail const r = computeReceita(form); // Dispara e-mail em background (não bloqueia a UI) fetch('../send-mail-calc.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ nome: form.nome, email: form.email, whatsapp: form.whatsapp, empresa: form.empresa, cargo: form.cargo, segmento: form.segmento, clientes: form.clientes, faturamento: form.faturamento, produtos: form.produtos, total: fmtBRL(r.total, { short: true }), }), }) .then(res => res.json()) .then(json => { if (json.ok) setLeadSent(true); }) .catch(() => {}); // falha silenciosa — não bloqueia o resultado setModalOpen(false); setStage("loading"); setResult(r); setTimeout(() => { setStage("result"); window.scrollTo({ top: 0, behavior: "instant" }); }, 2500); }; const onRestart = () => { setForm(INITIAL_FORM); setResult(null); setStage("landing"); setTimeout(() => window.scrollTo({ top: 0, behavior: "instant" }), 0); }; const onSchedule = () => { alert("Aqui abriria o Calendly da SH Squads.\n\nLead já registrado no console:\n• " + form.nome + " (" + form.email + ")\n• " + form.empresa); }; return ( {stage === "landing" && } {stage === "result" && result && ( )} {stage === "loading" && } ); } const root = ReactDOM.createRoot(document.getElementById("root")); root.render();