/* global React */
// sections.jsx — Site sections, all driven by cfg prop (from config.js).
// ── Icons ───────────────────────────────────────────────────────────────────
const Ico = {
phone: (
),
shield: (
),
clock: (
),
heart: (
),
paw: (
),
arrow: (
),
check: (
),
settings: (
),
};
// Brand logo — uses cfg.logoUrl if present, otherwise paw mark in circle
function BrandMark({ cfg }) {
if (cfg.logoUrl) {
return ;
}
return {Ico.paw} ;
}
function Brand({ cfg, dark = false }) {
return (
{cfg.brandName}
{cfg.brandSub}
);
}
// ── EmergencyBar ────────────────────────────────────────────────────────────
function EmergencyBar({ cfg, onCall }) {
return (
);
}
// ── Nav ─────────────────────────────────────────────────────────────────────
function Nav({ cfg, onCall }) {
return (
);
}
// ── Hero ────────────────────────────────────────────────────────────────────
function Hero({ cfg, onCall }) {
return (
{cfg.heroEyebrow}
{cfg.heroTitlePre} {cfg.heroTitleEm} {cfg.heroTitlePost}
{cfg.heroSub}
Ortalama Yanıt
5 dakika içinde
7/24
Açık Klinik
{cfg.statYears}
Yıl Tecrübe
{cfg.statPets}
Mutlu Dost
);
}
// ── Services ────────────────────────────────────────────────────────────────
const SERVICES = [
{ title: "7/24 Acil Müdahale", desc: "Gece gündüz, hafta sonu dahil. Acil durumlarda hemen arayın.", emergency: true },
{ title: "Genel Muayene", desc: "Detaylı sağlık kontrolü ve teşhis hizmetleri." },
{ title: "Aşı & Parazit", desc: "Karma aşı, kuduz aşısı, iç-dış parazit koruması." },
{ title: "Cerrahi Operasyon", desc: "Modern ekipmanla güvenli ameliyat ve kısırlaştırma." },
{ title: "Laboratuvar & Tahlil", desc: "Hızlı kan tahlili, idrar analizi ve görüntüleme." },
{ title: "Bakım & Tıraş", desc: "Profesyonel tüy bakımı, tırnak kesimi, hijyen hizmetleri." },
];
function Services({ onCall }) {
return (
Hizmetlerimiz
Dostunuz için tam donanımlı bakım.
Acil müdahaleden rutin kontrole, ameliyathaneden laboratuvara kadar her ihtiyaç tek çatı altında.
{SERVICES.map((s, i) => (
{String(i + 1).padStart(2, "0")} / 06
{s.title}
{s.desc}
{s.emergency &&
Şimdi Ara }
))}
);
}
// ── About ───────────────────────────────────────────────────────────────────
function About({ cfg }) {
const VALUES = [
{ icon: Ico.shield, title: "Güvenilir Bakım", desc: "Lisanslı veteriner hekimler, steril klinik ortamı." },
{ icon: Ico.clock, title: `${cfg.statYears} Yıl Tecrübe`, desc: "Esenler ve çevresinde binlerce mutlu evcil dost." },
{ icon: Ico.heart, title: "Şefkatli Ekip", desc: "Hayvan dostlarımız ve sahipleri için empatiyle hizmet." },
];
return (
Hakkımızda
Esenler'in 7/24 güvenilir veteriner adresi.
{cfg.aboutP1}
{cfg.aboutP2}
{VALUES.map((v, i) => (
))}
);
}
// ── Hours ───────────────────────────────────────────────────────────────────
const DAYS = ["Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar"];
function Hours({ cfg, onCall }) {
const jsDay = new Date().getDay();
const todayIdx = (jsDay + 6) % 7;
return (
Çalışma Saatleri
7 gün, 24 saat.
Hafta sonu ve resmi tatiller dahil her gün hizmetinizdeyiz. Acil durumda telefon hattımızı arayın, sizi en kısa sürede karşılayalım.
{Ico.phone}
Hemen Ara: {cfg.phone}
{DAYS.map((d, i) => (
{d}{i === todayIdx ? " · Bugün" : ""}
00:00 — 24:00
))}
);
}
// ── Testimonials ────────────────────────────────────────────────────────────
const TESTIMONIALS = [
{ name: "Ayşe Y.", pet: "Boncuk · Tekir kedi", quote: "Gece 2'de kedimiz hastalandı, telefonu açar açmaz yönlendirdiler. 10 dakika içinde kliniğe vardık, ekip kapıda bekliyordu." },
{ name: "Mehmet K.", pet: "Şila · Golden", quote: "Köpeğimin ameliyatı sonrası süreç boyunca her gün arayıp durumunu sordular. Bu kadar ilgili bir veteriner görmedim." },
{ name: "Zeynep T.", pet: "Pamuk · Britanya", quote: "Aşı takibi için düzenli geliyoruz. Ortam çok temiz, doktorlar sabırlı. Pamuk artık veteriner deyince korkmuyor." },
{ name: "Cem A.", pet: "Karamel · Sokak", quote: "Yaralı bulduğum kediyi gece getirdim. Hiç ücret bile sormadılar, önce müdahale ettiler. Teşekkürler ekip." },
];
function Testimonials({ cfg }) {
return (
Mutlu Dostlar
{cfg.statPets} evcil dostun ailesi anlatıyor.
{TESTIMONIALS.map((t, i) => (
))}
→ kaydırın · binlerce yorumdan birkaçı
);
}
// ── Gallery ─────────────────────────────────────────────────────────────────
const GALLERY = [
{ label: "Klinik girişi · 4:5", cls: "gallery__cell--tall" },
{ label: "Muayene odası", cls: "" },
{ label: "Cerrahi salonu", cls: "" },
{ label: "Bekleme alanı · panorama", cls: "gallery__cell--wide" },
{ label: "Laboratuvar", cls: "" },
{ label: "Ekibimiz", cls: "" },
];
function Gallery() {
return (
Klinikten Kareler
Dostunuzu emin ellere bırakın.
{GALLERY.map((g, i) => (
))}
);
}
// ── Appointment Form ────────────────────────────────────────────────────────
const PETS = ["Köpek", "Kedi", "Kuş", "Tavşan", "Diğer"];
const REASONS = ["Acil durum", "Genel muayene", "Aşı / Parazit", "Cerrahi / Operasyon", "Laboratuvar / Tahlil", "Bakım & Tıraş"];
function Appointment({ cfg }) {
const [form, setForm] = React.useState({
name: "", phone: "", petName: "", petType: "Köpek", reason: "Genel muayene", date: "", time: "10:00", note: "",
});
const [submitted, setSubmitted] = React.useState(false);
const update = (k) => (e) => setForm((f) => ({ ...f, [k]: e.target.value }));
const onSubmit = (e) => { e.preventDefault(); setSubmitted(true); };
const today = new Date().toISOString().split("T")[0];
if (submitted) {
return (
Randevu
Randevu talebiniz alındı.
{Ico.check}
Teşekkürler {form.name || "dostum"}, görüştük sayılır.
{form.petName ? `${form.petName} için ` : ""}{form.date || "en kısa zamanda"} {form.time && `, ${form.time}`} randevunuz değerlendirmeye alındı. 15 dakika içinde sizi telefonla arayacağız.
Acil bir durumsa lütfen doğrudan arayın: {cfg.phone}
setSubmitted(false)}>
Yeni randevu →
);
}
return (
Online Randevu
Acil değilse, randevu alın.
Rutin muayene, aşı veya bakım hizmetleri için formu doldurun. Uygunluk durumunu 15 dakika içinde telefonla bildiriyoruz.
Acil durumda form doldurmayın — doğrudan arayın.
{Ico.phone} {cfg.phone}
);
}
// ── Contact + Map ───────────────────────────────────────────────────────────
function Contact({ cfg, onCall }) {
return (
İletişim
Bize ulaşın.
Acil durumda lütfen önce telefonla arayın. Klinik 7/24 açıktır.
Adres
{cfg.addressLine1}
{cfg.addressLine2}
Çalışma Saatleri
7/24 Açık
Hafta sonu ve resmi tatiller dahil
{cfg.whatsapp && (
)}
{cfg.brandName}
{cfg.addressLine1}
window.open(cfg.mapsUrl, "_blank")}>Yol Tarifi
);
}
// ── Footer ──────────────────────────────────────────────────────────────────
function Footer({ cfg, onCall }) {
return (
7 gün 24 saat, hafta sonu ve tatiller dahil hayvan dostlarınız için buradayız.
);
}
// ── Floating Call Button ────────────────────────────────────────────────────
function FAB({ cfg, onCall }) {
return (
{Ico.phone}
7/24 Acil
{cfg.phone}
);
}
// ── Call Modal ──────────────────────────────────────────────────────────────
function CallModal({ cfg, open, onClose }) {
React.useEffect(() => {
if (!open) return;
const onKey = (e) => e.key === "Escape" && onClose();
window.addEventListener("keydown", onKey);
return () => window.removeEventListener("keydown", onKey);
}, [open, onClose]);
if (!open) return null;
return (
e.stopPropagation()} role="dialog">
{Ico.phone}
Şimdi aranıyor
Veteriner hekimimiz 7/24 hatta. Ortalama yanıt süresi 5 dakika .
{cfg.phone}
);
}
Object.assign(window, {
Ico, BrandMark, Brand,
EmergencyBar, Nav, Hero, Services, About, Hours,
Testimonials, Gallery, Appointment, Contact, Footer,
FAB, CallModal,
});