// ============================================ // 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 (
{KICKER}
{TITLE}
{DESC}
{/* Code box */} {/* CTA */}