Add GoogleMapsEmbed.tsx — consent-gated Maps embed, prepared but unused

Uses Klaro's own built-in contextual-consent mechanism (not
loadTrackingCode.ts's script-injection path) — the iframe renders
with data-name="google-maps" and its real src; Klaro's DOM scan finds
it after mount and blanks/restores src based on that service's
consent state, showing its own placeholder (styled via
KlaroConsentManager.tsx's KlaroTheme) in the meantime.

No map embedded anywhere in the app yet — this is prep work only, per
explicit request ahead of an actual page needing one.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Marco
2026-08-01 21:58:19 +00:00
parent 417bbd430e
commit ac6c3d6b71
6 changed files with 122 additions and 2 deletions
+25
View File
@@ -1854,6 +1854,31 @@ has its own dedicated Live Preview renderer, not the shared generic
order-status one — there's no order for this email type, so no fake
"Bestellnummer" line; CTA is "Zum Produkt", not "Bestellung ansehen".
## Google Maps (consent-gated embed, prepared but unused)
No map is embedded anywhere in this app yet — `GoogleMapsEmbed.tsx`
exists as ready-to-use prep work. Unlike GA/Facebook Pixel/GTM (scripts
this app injects itself, see the tracking-codes section above), an
embedded iframe is gated by **Klaro's own built-in contextual-consent
mechanism**, not `loadTrackingCode.ts`: the iframe renders with its real
`src` and a `data-name="google-maps"` attribute; Klaro's DOM scan
(`renderContextualConsentNotices`, runs as part of `Klaro.render()`)
finds it after mount, blanks `src` and swaps in its own "Karte laden?"
placeholder (styled to match this site via `KlaroConsentManager.tsx`'s
`KlaroTheme`) until that service's consent is granted, then restores the
real `src`. `loadTrackingCode.ts`'s `google-maps` case is a deliberate
no-op — there's nothing to inject, Klaro handles the swap entirely on its
own.
Backend prerequisite: exactly one `tracking-codes` row with
`provider: google-maps` must exist and be `active` (see the Payload
README) — `klaroConfig.ts`'s `serviceName()` special-cases this provider
to the fixed name `"google-maps"` (not id-based like every other
provider) since there's no distinguishing ID the way GA/FB/GTM each have
one; a second `google-maps` row would collide on that name. To actually
use it: `<GoogleMapsEmbed src="<Google Maps embed URL>" title="..." />`
anywhere.
## Product image gallery
`ProductGallery.tsx` — main image + thumbnail strip, swappable on click,