// form.jsx — анкета мастера (final призыв) + thank-you
const { useState } = React;
const STATUS = ["Частный мастер","Самозанятый","ИП","Бригада","Компания"];
const WORKS = ["Сантехника","Электрика","Сборка мебели","Двери","Кондиционеры","Мелкий ремонт","Отделка","Другое"];
function formatPhone(v){
let d = v.replace(/\D/g,"");
if(d.startsWith("8")) d = "7"+d.slice(1);
if(!d.startsWith("7")) d = "7"+d;
d = d.slice(0,11);
let out = "+7";
if(d.length>1) out += " ("+d.slice(1,4);
if(d.length>=4) out += ") "+d.slice(4,7);
if(d.length>=7) out += "-"+d.slice(7,9);
if(d.length>=9) out += "-"+d.slice(9,11);
return out;
}
function FieldText({label,req,value,onChange,placeholder,err,type="text",inputMode,hint}){
return (
onChange(e.target.value)} />
{err && {err}}
);
}
function Anketa(){
const [f,setF] = useState({name:"",phone:"",status:"",works:[],region:"",agree:false});
const [errs,setErrs] = useState({});
const [sent,setSent] = useState(false);
const [sending,setSending] = useState(false);
const set = (k,v)=>{ setF(s=>({...s,[k]:v})); if(errs[k]) setErrs(e=>({...e,[k]:null})); };
const toggleWork = (w)=> set("works", f.works.includes(w)? f.works.filter(x=>x!==w) : [...f.works,w]);
const submit = async ()=>{
const e={};
if(!f.name.trim()) e.name="Как к вам обращаться?";
if(f.phone.replace(/\D/g,"").length<11) e.phone="Введите номер телефона полностью";
if(!f.status) e.status="Выберите статус";
if(f.works.length===0) e.works="Отметьте хотя бы одну категорию";
if(!f.region.trim()) e.region="Укажите районы выезда";
if(!f.agree) e.agree="Нужно согласие на обработку данных";
setErrs(e);
if(Object.keys(e).length>0) return;
setSending(true);
try{
const res = await fetch("/api/anketa", {
method:"POST",
headers:{ "Content-Type":"application/json" },
body:JSON.stringify(f),
});
const data = await res.json().catch(()=>({}));
if(!res.ok || !data.ok){
setErrs(data.errors || { form:data.error || "Не удалось отправить анкету. Попробуйте ещё раз." });
return;
}
setSent(true);
}catch(_){
setErrs({ form:"Не удалось отправить анкету. Проверьте соединение и попробуйте ещё раз." });
}finally{
setSending(false);
}
};
if(sent){
return (
Спасибо! Анкета отправлена
Мы проверим профиль и сообщим о следующих шагах подключения. После регистрации вы получите инструкцию по работе с сервисом — как принимать заявки, подтверждать время и закрывать работу.
Профиль на проверкеМы свяжемся с вами
);
}
return (
Анкета мастера
Заполните данные о себе, укажите виды работ и районы выезда. Это займёт пару минут.