/* global React */ (function () { const { useState } = React; const { Reveal } = window; const PROFILE_OPTS = ['Construtora', 'Pessoa física', 'Licitação pública', 'Outro']; const SERVICE_OPTS = ['Orçamento avulso', 'BIM', 'Licitação', 'Auditoria', 'Consultoria contínua', 'Não sei ainda']; function ContactPage() { const [profile, setProfile] = useState(''); const [services, setServices] = useState([]); const [form, setForm] = useState({ name: '', email: '', phone: '', company: '', message: '' }); const [consent, setConsent] = useState(false); const [errors, setErrors] = useState({}); const [submitted, setSubmitted] = useState(false); const [touched, setTouched] = useState({}); const validate = (data, prof, ok) => { const e = {}; if (!data.name.trim()) e.name = 'Como podemos te chamar?'; if (!data.email.trim()) e.email = 'Precisamos de um e-mail'; else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(data.email)) e.email = 'E-mail parece inválido'; if (!data.message.trim() || data.message.trim().length < 20) e.message = 'Conta um pouco mais (mín. 20 caracteres)'; if (!prof) e.profile = 'Selecione um perfil'; if (!ok) e.consent = 'É obrigatório autorizar o tratamento dos dados'; return e; }; const onChange = (k, v) => { const next = { ...form, [k]: v }; setForm(next); if (touched[k]) setErrors(validate(next, profile, consent)); }; const toggleService = (s) => { setServices(services.includes(s) ? services.filter(x => x !== s) : [...services, s]); }; const onSubmit = (e) => { e.preventDefault(); setTouched({ name: true, email: true, message: true, consent: true }); const errs = validate(form, profile, consent); setErrors(errs); if (Object.keys(errs).length === 0) { setSubmitted(true); } }; return (
Contato · resposta em até 48h

Manda os arquivos.
A gente orça.

Edital, plantas, memorial ou só uma ideia inicial. Em até 48h úteis te respondemos com prazo, valor e abordagem. Sem cadastro, sem CRM, sem follow-up chato.

{/* INFO ============ */}

↘ Telefone

(31) 98881-7140
WhatsApp · seg-sex 9h-18h

{/*

↘ Escritório

Av. Paulista, 000
Bela Vista · São Paulo / SP
01310-000

*/}{/*SOMENTE UTILZIAR ESTE ESPAÇO APÓS EXISTIR ESCRITÓRIO FISICO */}
SLA de resposta
< 48h
Em dias úteis. Casos urgentes:
resposta em até 12h.
{/* FORM ============ */}
{!submitted ? (
Entre em contato
{PROFILE_OPTS.map(p => ( ))}
{errors.profile && touched.profile &&
{errors.profile}
}
onChange('name', e.target.value)} onBlur={() => { setTouched({ ...touched, name: true }); setErrors(validate(form, profile, consent)); }} placeholder="Seu nome completo" /> {errors.name && touched.name &&
{errors.name}
}
onChange('email', e.target.value)} onBlur={() => { setTouched({ ...touched, email: true }); setErrors(validate(form, profile, consent)); }} placeholder="nome@email.com" /> {errors.email && touched.email &&
{errors.email}
}
onChange('phone', e.target.value)} placeholder="(11) 90000-0000" />
onChange('company', e.target.value)} placeholder="Opcional" />
{SERVICE_OPTS.map(s => ( ))}
{errors.message && touched.message ?
{errors.message}
:
{form.message.length} caracteres
}
{errors.consent && touched.consent &&
{errors.consent}
}
) : (

Recebido. Obrigado.

Em até 24h úteis, {form.name.split(' ')[0]}, te respondemos no e-mail {form.email} com a próxima etapa.

Protocolo · PC-{Date.now().toString(36).toUpperCase()}
)}
); } window.ContactPage = ContactPage; })();