'use client' import { useState } from 'react' import Image from 'next/image' import Link from 'next/link' import { Button, Input } from '@/components/ui' import { cn } from '@/lib/utils' import { getMediaUrl } from '@/lib/payload-helpers' import { subscribeNewsletter } from '@/lib/api' import type { BlockByType } from '@c2s/payload-contracts/types' type NewsletterBlockProps = Omit, 'blockType' | 'blockName'> export function NewsletterBlock({ title = 'Newsletter', subtitle, buttonText = 'Anmelden', layout = 'card', image, collectName = false, source = 'newsletter-block', }: NewsletterBlockProps) { const [email, setEmail] = useState('') const [firstName, setFirstName] = useState('') const [status, setStatus] = useState<'idle' | 'loading' | 'success' | 'error'>('idle') const [errorMessage, setErrorMessage] = useState('') const bgImageUrl = getMediaUrl(image) async function handleSubmit(e: React.FormEvent) { e.preventDefault() setStatus('loading') setErrorMessage('') try { const result = await subscribeNewsletter( email, collectName && firstName ? firstName : undefined, source || 'newsletter-block' ) if (result.success) { setStatus('success') setEmail('') } else { setStatus('error') setErrorMessage(result.message || 'Ein Fehler ist aufgetreten.') } } catch { setStatus('error') setErrorMessage('Ein Fehler ist aufgetreten. Bitte versuchen Sie es später erneut.') } } const formContent = ( <> {status === 'success' ? (

Vielen Dank für Ihre Anmeldung!

Bitte bestätigen Sie Ihre E-Mail-Adresse.

) : (
{collectName && ( setFirstName(e.target.value)} placeholder="Dein Vorname (optional)" disabled={status === 'loading'} /> )}
setEmail(e.target.value)} placeholder="Deine E-Mail-Adresse" required disabled={status === 'loading'} error={status === 'error' ? errorMessage : undefined} className={cn((layout === 'inline' || layout === 'minimal') && 'sm:flex-1')} />
)} {status !== 'success' && (

Mit der Anmeldung akzeptieren Sie unsere{' '} Datenschutzerklärung.

)} ) if (layout === 'minimal') { return
{formContent}
} return (
{bgImageUrl && (
)}
{title &&

{title}

} {subtitle &&

{subtitle}

} {formContent}
) }