// ---- Product page: personalization form + live preview -------------- // Dynamic "what happens in your book" chips function LiveEffects({ data }) { const season = window.seasonFromDate(data.et); const ssw = window.sswToday(data.et); const bag = BIRTHPLACES[data.ort]; const chips = []; if (data.name) chips.push({ ico: "feather", t: <>Cover und Intro für {data.name} }); if (data.et) chips.push({ ico: "calendar", t: ssw ? <>Heute SSW {ssw} : <>Wochenseiten ab SSW 5 }); if (season) chips.push({ ico: season === "sommer" ? "sun" : "leaf", t: <>Erstausstattung für ein {season === "sommer" ? "Sommerbaby" : "Winterbaby"} }); chips.push({ ico: "home", t: {bag.bagTitle} }); if (data.ort === "zuhause") chips.push({ ico: "leaf", t: <>Seite Mein Geburtsraum zu Hause }); chips.push(data.photopages ? { ico: "image", t: <>Mit Foto-Seiten für Ultraschall und Babybauch } : { ico: "image", t: <>Ohne Foto-Seiten }); if (data.partner) chips.push({ ico: "users", t: <>Mit {data.partner} mitgedacht }); return (
Das entsteht in deinem Buch
{chips.map((c, i) => ( {c.t} ))}
); } function Field({ label, hint, children, required, error }) { return (
{children} {error &&
{error}
}
); } function ConfigForm({ data, setData, errors }) { const set = (k, v) => setData({ ...data, [k]: v }); return (
{/* Name */} set("name", e.target.value)} /> {/* Farbvariante */}
{COVER_THEMES.map(t => ( ))}
{/* Geburtstermin */} set("et", e.target.value)} /> {/* Geburtsort */}
{Object.values(BIRTHPLACES).map(b => ( ))}
{BIRTHPLACES[data.ort].note}
{/* Foto-Seiten */}
{/* Partner */} set("partner", e.target.value)} />
Lässt du das Feld frei, formulieren wir alle Stellen für dich allein.
); } function BuyBox({ data, addToCart, validate }) { const [qty, setQty] = useState(1); const [added, setAdded] = useState(false); const onAdd = () => { if (!validate()) { document.querySelector(".j-form")?.scrollIntoView({ block: "center", behavior: "smooth" }); return; } addToCart({ data: { ...data }, price: PRICE, qty }); setAdded(true); setTimeout(() => setAdded(false), 1800); }; return (
{qty}
{["Visa", "Mastercard", "PayPal", "Klarna", "Apple Pay"].map(p => {p})}
Lieferung in 8 bis 10 Tagen 30 Tage Geld-zurück Produziert in Deutschland
); } function Upsell() { const items = [ { t: "Gel-Stifte Set, vier Farben", p: 9.98, ico: "feather" }, { t: "Sticker zum Gestalten", p: 7.99, ico: "sparkle" }, { t: "Geschenkverpackung", p: 5.99, ico: "bookmark" }, ]; return (
Wird oft dazu gewählt
{items.map((it, i) => (
{it.t}
{eur(it.p)}
))}
); } function SpecsAccordion() { const specs = [ { q: "Material und Verarbeitung", a: "Hardcover mit mattem Einband, vollfarbig gedruckt, mit zwei Lesebändchen." }, { q: "Umfang und Papier", a: "Rund 105 bis 120 Seiten auf hochwertigem Papier, angenehm zu beschreiben." }, { q: "Format", a: "Quadratisch, 20,5 × 20,5 cm. Kompakt genug für die Tasche, großzügig genug zum Schreiben." }, { q: "Produktion und Versand", a: "Hochwertig in Deutschland produziert. Lieferung in 8 bis 10 Tagen, Versand 4,95 €." }, ]; const [open, setOpen] = useState(-1); return (
Ausstattung
{specs.map((s, i) => (
setOpen(open === i ? -1 : i)}>
{s.q}

{s.a}

))}
); } function ProductPage({ go, data, setData, layout, addToCart }) { const [errors, setErrors] = useState({}); const validate = () => { const e = {}; if (!data.name.trim()) e.name = "Wir brauchen deinen Namen fürs Cover."; if (!data.et) e.et = "Bitte trag deinen Geburtstermin ein."; setErrors(e); return Object.keys(e).length === 0; }; useEffect(() => { setErrors(prev => { const n = { ...prev }; if (data.name.trim()) delete n.name; if (data.et) delete n.et; return n; }); }, [data.name, data.et]); const editorial = layout === "editorial"; const atelier = layout === "atelier"; return (
{["Cover", "Wochenseite", "Kliniktasche", "Brief"].map((t, i) => (
{i === 0 ?
: }
))}
{!editorial && }
{["L","S","M","A"].map(a => {a})}
Über 2.300 begleitete Schwangerschaften

Schwangerschaftsjournal

Dein personalisierter Begleiter durch neun Monate. Für Notizen, Termine und das, was du behalten möchtest.

4,9 von 5, 2.314 Bewertungen
{eur(PRICE)} inkl. MwSt, zzgl. 4,95 € Versand

{editorial && }
); } Object.assign(window, { ProductPage });