// ─────────── Contact + Quote ───────────
/* ─────────────────────── Contact ─────────────────────── */
function ContactPage({ setRoute }) {
const t = window.__T;
const lang = window.__LANG;
const whatsappLink = "https://wa.me/902126535300?text=" + encodeURIComponent("Merhaba, bilgi almak istiyorum.");
const [form, setForm] = useState({ name: "", company: "", phone: "", email: "", topic: "sales", msg: "" });
const [sent, setSent] = useState(false);
const [submitting, setSubmitting] = useState(false);
const [submitError, setSubmitError] = useState("");
return (
<>
C.01
{t.contact.hq}
{lang === "tr" ? "Adres" : "Address"}Yenibosna Merkez Mah., Ayvaz Cami Sok., No:1/A
Bahçelievler / İstanbul
C.02
{t.contact.hours}
{lang === "tr" ? "Pzt — Cmt" : "Mon — Sat"}08:00 — 18:00
{lang === "tr" ? "Pazar" : "Sun"}{lang === "tr" ? "Kapalı" : "Closed"}
C.03
{lang === "tr" ? "Hızlı İletişim" : "Quick Contact"}
F.01
{lang === "tr" ? "Bize yazın." : "Send a message."}
{lang === "tr"
? "Mesai saatlerinde 2 saat içinde dönüş yaparız."
: "We respond within 2 hours during business hours."}
{sent ? (
{lang === "tr" ? "Teşekkürler." : "Thanks."}
{lang === "tr" ? "Mesajınız iletildi. En kısa sürede dönüş yapacağız." : "Your message has been sent. We'll get back to you soon."}
) : (
)}
{/* map placeholder */}
{/* abstract map: grid + pins */}
M.01 — BAHÇELİEVLER / İSTANBUL — TÜRKİYE GENELİ TESLİMAT
>
);
}
function Field({ label, value, onChange, type = "text", required, ta }) {
return (
{ta ? (
);
}
/* ─────────────────────── Quote (multi-step) ─────────────────────── */
function QuotePage({ setRoute }) {
const t = window.__T;
const lang = window.__LANG;
const cats = window.__DATA.productCategories;
const [step, setStep] = useState(0);
const [data, setData] = useState({
company: "",
contact: "",
phone: "",
email: "",
project: "",
sector: "",
city: "",
deadline: "",
categories: [],
lines: [{ code: "", item: "", qty: "", unit: "adet" }],
note: "",
});
const [done, setDone] = useState(false);
const [quoteRef, setQuoteRef] = useState("");
const [submitting, setSubmitting] = useState(false);
const steps = [
{ id: "company", label: lang === "tr" ? "Firma" : "Company" },
{ id: "project", label: lang === "tr" ? "Proje" : "Project" },
{ id: "items", label: lang === "tr" ? "Kalemler" : "Items" },
{ id: "confirm", label: lang === "tr" ? "Onay" : "Confirm" },
];
function addLine() {
setData({ ...data, lines: [...data.lines, { code: "", item: "", qty: "", unit: "adet" }] });
}
function setLine(i, k, v) {
const lines = data.lines.slice();
lines[i] = { ...lines[i], [k]: v };
setData({ ...data, lines });
}
function removeLine(i) {
if (data.lines.length === 1) return;
setData({ ...data, lines: data.lines.filter((_, j) => j !== i) });
}
function toggleCat(id) {
const has = data.categories.includes(id);
setData({
...data,
categories: has ? data.categories.filter((x) => x !== id) : [...data.categories, id],
});
}
async function handleSubmit() {
setSubmitting(true);
try {
const res = await fetch("quote-submit.php", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ type: "quote", ...data }),
});
const j = await res.json();
if (j.ref) setQuoteRef(j.ref);
} catch (_) {}
setDone(true);
setSubmitting(false);
}
if (done) {
return (
<>
{t.quote.thanks}
{t.quote.thanksLead}
REF{quoteRef ? "#" + quoteRef : "—"}
{lang === "tr" ? "Firma" : "Company"}{data.company || "—"}
{lang === "tr" ? "Kalem" : "Lines"}{data.lines.filter(l => l.item).length}
{lang === "tr" ? "Termin" : "Deadline"}{data.deadline || "—"}
>
);
}
return (
<>
{/* stepper */}
{steps.map((s, i) => (
i < step && setStep(i)}>
0{i + 1}
{s.label}
))}
{step === 0 && (
{lang === "tr" ? "Firma bilgileri" : "Company info"}
setData({ ...data, company: v })} required />
setData({ ...data, contact: v })} required />
setData({ ...data, phone: v })} required />
setData({ ...data, email: v })} required />
)}
{step === 1 && (
{lang === "tr" ? "Proje detayları" : "Project details"}
setData({ ...data, project: v })} />
{["Konut", "Ticari", "Endüstriyel", "Kamu", "Altyapı"].map((s) => (
))}
setData({ ...data, city: v })} />
setData({ ...data, deadline: v })} />
{cats.map((c) => (
))}
)}
{step === 2 && (
{lang === "tr" ? "Malzeme listesi" : "Bill of materials"}
{data.lines.length} {lang === "tr" ? "kalem" : "lines"}
#{lang === "tr" ? "KOD" : "CODE"}
{lang === "tr" ? "ÜRÜN / AÇIKLAMA" : "ITEM / DESC."}
{lang === "tr" ? "MİKTAR" : "QTY"}
{lang === "tr" ? "BİRİM" : "UNIT"}
{data.lines.map((l, i) => (
{String(i + 1).padStart(2, "0")}
setLine(i, "code", e.target.value)} />
setLine(i, "item", e.target.value)} />
setLine(i, "qty", e.target.value)} />
))}
)}
{step === 3 && (
{lang === "tr" ? "Özet ve onay" : "Summary & confirm"}
01 — {lang === "tr" ? "FİRMA" : "COMPANY"}
{lang === "tr" ? "Firma" : "Company"}{data.company || "—"}
{lang === "tr" ? "Yetkili" : "Contact"}{data.contact || "—"}
{lang === "tr" ? "Telefon" : "Phone"}{data.phone || "—"}
E-mail{data.email || "—"}
02 — {lang === "tr" ? "PROJE" : "PROJECT"}
{lang === "tr" ? "Proje" : "Project"}{data.project || "—"}
{lang === "tr" ? "Sektör" : "Sector"}{data.sector || "—"}
{lang === "tr" ? "Şehir" : "City"}{data.city || "—"}
{lang === "tr" ? "Termin" : "Deadline"}{data.deadline || "—"}
03 — {lang === "tr" ? "KALEMLER" : "ITEMS"}
{data.lines.filter(l => l.item || l.code).length === 0 ? (
{lang === "tr" ? "Kalem girilmedi" : "No lines"}
) : data.lines.filter(l => l.item || l.code).map((l, i) => (
{String(i + 1).padStart(2, "0")}
{l.code || "—"}
{l.item || "—"}
{l.qty || "—"} {l.unit}
))}
)}
{t.quote.step} {String(step + 1).padStart(2, "0")} / 0{steps.length}
{step < steps.length - 1 ? (
) : (
)}
>
);
}
Object.assign(window, { ContactPage, QuotePage, Field });