// ============================================ // LOPOBYA — Welcome Discount Popup // Muncul sekali per pengunjung (Meta ads landing). // Kasih kode WELCOME20 → auto-apply di checkout. // ============================================ const WelcomePopup = ({ lang = "id", setPage, config }) => { const SEEN_KEY = "lopobya_welcome_seen"; const VOUCH_KEY = "lopobya_pending_voucher"; const t = (en, id) => (lang === "id" ? id : en); // Semua teks/gambar/diskon bisa diatur dari Admin → Dekorasi → Popup Diskon. // Kalau belum diatur, pakai default di bawah. const cfg = config || {}; const active = cfg.active !== false; // default: tampil const PERCENT = cfg.percent != null && cfg.percent !== "" ? cfg.percent : 20; const CODE = String(cfg.code || "WELCOME20").toUpperCase(); const HERO_IMG = cfg.image || "uploads/products/prod_09baa4116e8f4550e42049c8fe0d6517.jpg"; const KICKER = cfg.kicker || t("Welcome to LOPOBYA", "Selamat Datang di LOPOBYA"); const TITLE = cfg.title || t("20% off your first order", "Diskon 20% pesanan pertamamu"); const DESC = cfg.desc || t( "Be one of our first customers and enjoy 20% off your checkout. Use the code below — it's applied automatically.", "Jadi pelanggan pertama kami dan nikmati potongan 20% saat checkout. Pakai kode di bawah — otomatis terpasang di keranjang." ); const BTN = cfg.btnText || t("Shop Now", "Belanja Sekarang"); const [show, setShow] = React.useState(false); const [mounted, setMounted] = React.useState(false); // utk animasi masuk const [copied, setCopied] = React.useState(false); // Cek apakah sudah pernah lihat React.useEffect(() => { if (!active) return; // dimatikan dari admin let seen = false; try { seen = localStorage.getItem(SEEN_KEY) === "1"; } catch {} if (seen) return; const tm = setTimeout(() => { setShow(true); requestAnimationFrame(() => setMounted(true)); // Simpan kode supaya checkout auto-apply, walau popup ditutup try { localStorage.setItem(VOUCH_KEY, CODE); } catch {} if (typeof fbq === "function") fbq("trackCustom", "WelcomeOfferShown", { code: CODE, value: PERCENT }); }, 900); return () => clearTimeout(tm); }, []); // Lock scroll body selama popup terbuka React.useEffect(() => { if (!show) return; const prev = document.body.style.overflow; document.body.style.overflow = "hidden"; return () => { document.body.style.overflow = prev; }; }, [show]); const markSeen = () => { try { localStorage.setItem(SEEN_KEY, "1"); } catch {} }; const close = () => { markSeen(); setMounted(false); setTimeout(() => setShow(false), 260); }; const copyCode = () => { try { navigator.clipboard.writeText(CODE); setCopied(true); setTimeout(() => setCopied(false), 1800); } catch {} }; const shopNow = () => { try { localStorage.setItem(VOUCH_KEY, CODE); } catch {} if (typeof fbq === "function") fbq("trackCustom", "WelcomeOfferClaimed", { code: CODE, value: PERCENT }); markSeen(); setMounted(false); setTimeout(() => { setShow(false); if (setPage) setPage("catalog"); }, 200); }; if (!show) return null; return (
e.stopPropagation()} style={{ position: "relative", width: "100%", maxWidth: 420, background: "#f9f8f6", borderRadius: 4, overflow: "hidden", boxShadow: "0 24px 70px rgba(0,0,0,0.32)", textAlign: "center", opacity: mounted ? 1 : 0, transform: mounted ? "translateY(0) scale(1)" : "translateY(20px) scale(0.96)", transition: "opacity 0.3s ease, transform 0.35s cubic-bezier(.2,.7,.2,1)", }} > {/* Close button */} {/* Hero image + badge */}
LOPOBYA {/* Gradient bawah biar teks kebaca */}
{/* Badge diskon */}
{PERCENT}% OFF
{/* Headline di atas gradient */}

{KICKER}

{TITLE}

{/* Body */}

{DESC}

{/* Code box */} {/* CTA */}
); };