// ---- Site chrome: announcement, header, footer, cart drawer --------- function AnnouncementBar() { const items = [ "Versand für 4,95 € in ganz Deutschland", "Produziert in Deutschland", "Jedes Buch ein Unikat, auf dich personalisiert", "Lieferung in 8 bis 10 Tagen", ]; return (
); } function Header({ go, route, cartCount, openCart }) { const [scrolled, setScrolled] = useState(false); useEffect(() => { const onScroll = () => setScrolled(window.scrollY > 8); window.addEventListener("scroll", onScroll, { passive: true }); return () => window.removeEventListener("scroll", onScroll); }, []); const nav = [ { label: "Das Journal", to: () => go("product") }, { label: "So funktioniert's", to: () => go("home", "how") }, { label: "Magazin", to: () => go("blog") }, { label: "Bewertungen", to: () => go("home", "reviews") }, { label: "FAQ", to: () => go("home", "faq") }, ]; return (
); } function CartDrawer({ open, onClose, items, setItems, go }) { const [stage, setStage] = useState("cart"); // cart | success useEffect(() => { if (open) setStage("cart"); }, [open]); const subtotal = items.reduce((s, it) => s + it.price * it.qty, 0); const setQty = (i, q) => { if (q < 1) { setItems(items.filter((_, idx) => idx !== i)); return; } setItems(items.map((it, idx) => idx === i ? { ...it, qty: q } : it)); }; return ( <>
); } function Footer({ go }) { const cols = [ { h: "Journella", links: ["Das Journal", "So funktioniert's", "Magazin", "Bewertungen", "Geschenkgutschein"] }, { h: "Hilfe", links: ["Kontakt", "Versand und Lieferung", "Personalisierung ändern", "Retoure"] }, { h: "Rechtliches", links: ["AGB", "Datenschutz", "Widerrufsrecht", "Impressum"] }, ]; return ( ); } Object.assign(window, { AnnouncementBar, Header, CartDrawer, Footer });