{product.name}
IDR {product.price.toLocaleString('id-ID')}
import React, { useState, useEffect } from 'react'; const products = [ { id: 1, name: "Martabak Coklat ", price: 10000, img: "https://6a009e0ae3ddafb3f4a07e89.imgix.net/2/martabak%20coklat.jpeg?auto=format&fit=fill&w=256" }, { id: 2, name: "Martabak Kacang", price: 10000, img: "https://6a009e0ae3ddafb3f4a07e89.imgix.net/4/martabak%20kacang.jpeg?auto=format&fit=fill&w=256" }, { id: 3, name: "Martabak Keju", price: 10000, img: "https://6a009e0ae3ddafb3f4a07e89.imgix.net/1/martabak%20keju.jfif?auto=format&fit=fill&w=384" }, ]; const JAM_BUKA = 16; const JAM_TUTUP = 22; export default function App() { const [cart, setCart] = useState([]); const [isCartOpen, setIsCartOpen] = useState(false); const [isOpen, setIsOpen] = useState(true); useEffect(() => { const checkStatus = () => { const now = new Date(); const jamSekarang = now.getHours(); setIsOpen(jamSekarang >= JAM_BUKA && jamSekarang < JAM_TUTUP); }; checkStatus(); const interval = setInterval(checkStatus, 40000); return () => clearInterval(interval); }, []); const addToCart = (product) => { if(!isOpen) return; setCart((prev) => { const exist = prev.find(x => x.id === product.id); if (exist) return prev.map(x => x.id === product.id ? {...x, qty: x.qty + 1} : x); return [...prev, {...product, qty: 1}]; }); }; const updateQty = (id, delta) => { setCart(prev => prev.map(item => item.id === id ? { ...item, qty: Math.max(0, item.qty + delta) } : item ).filter(item => item.qty > 0)); }; const totalItems = cart.reduce((sum, item) => sum + item.qty, 0); const totalHarga = cart.reduce((sum, item) => sum + item.price * item.qty, 0); const handleCheckout = () => { const phone = "6281220213200"; let msg = "*PESANAN BARU*\n----------\n"; cart.forEach(item => msg += `• ${item.name} (${item.qty}x)\n`); msg += `----------\n*Total: Rp ${totalHarga.toLocaleString('id-ID')}*`; window.open(`https://wa.me/${phone}?text=${encodeURIComponent(msg)}`, '_blank'); }; return (
{isOpen ? 'Open Order' : 'Closed'}
EST. 2026 • PREMIUM MARTABAK
Gallery is currently closed.
Re-opening at {JAM_BUKA}:00 AM
IDR {product.price.toLocaleString('id-ID')}
Empty gallery...
IDR {(item.price * item.qty).toLocaleString('id-ID')}