/** * StickyBar.jsx - Sticky call-to-action bar * * Fixed aan onderkant (mobile) of bovenkant (desktop). * Compacte info: prijs + datum + CTA. * Verschijnt na scroll voorbij hero sectie. */ import { useState, useEffect } from 'react'; import { Link } from 'react-router-dom'; import { PAYMENT_CONFIG } from '../config/payment'; import { WORKSHOP_CONFIG } from '../config/workshop'; function StickyBar() { const { availableSpots, isSoldOut } = WORKSHOP_CONFIG; // State om te bepalen of de bar zichtbaar moet zijn const [isVisible, setIsVisible] = useState(false); // Effect om scroll positie te monitoren useEffect(() => { const handleScroll = () => { // Toon de bar na 600px scroll (ongeveer voorbij de hero) const scrollThreshold = 600; setIsVisible(window.scrollY > scrollThreshold); }; // Event listener toevoegen window.addEventListener('scroll', handleScroll); // Cleanup bij unmount return () => window.removeEventListener('scroll', handleScroll); }, []); // Als niet zichtbaar, render niets if (!isVisible) return null; return ( <> {/* Desktop versie - bovenkant */}
{/* Left: Info */}
Claude Code Workshop
6 maart 2026 Utrecht Nog {availableSpots} {availableSpots === 1 ? 'plek' : 'plekken'} beschikbaar
{/* Right: Price + CTA */}
€399 excl. BTW {isSoldOut ? 'Wachtlijst' : 'Inschrijven'}
{/* Mobile versie - onderkant */}
{/* Left: Prijs en datum */}
€399 excl. BTW
6 maart 2026 | Utrecht
{isSoldOut ? 'Volgeboekt' : `Nog ${availableSpots} ${availableSpots === 1 ? 'plek' : 'plekken'} beschikbaar`}
{/* Right: CTA */} {isSoldOut ? 'Wachtlijst' : 'Inschrijven'}
{/* Spacer voor mobile om content niet te verbergen achter sticky bar */}