cms.c2sgmbh/src/blocks/NewsletterBlock.ts
Martin Porwoll 95c9d2a4bc feat: add content blocks and global settings
Blocks for page builder:
- HeroBlock: hero sections with CTA
- TextBlock: rich text content
- ImageTextBlock: image with text layout
- CardGridBlock: grid of cards
- CTABlock: call-to-action sections
- QuoteBlock: testimonial quotes
- VideoBlock: embedded videos
- DividerBlock: visual separators
- ContactFormBlock: contact forms
- NewsletterBlock: newsletter signup
- ProcessStepsBlock: step-by-step processes
- TimelineBlock: timeline displays
- TestimonialsBlock: testimonial carousels
- PostsListBlock: blog post listings

Globals:
- Navigation: site navigation structure
- SiteSettings: general site configuration
- SEOSettings: default SEO settings per tenant

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 08:19:15 +00:00

156 lines
4 KiB
TypeScript

import type { Block } from 'payload'
/**
* Newsletter Block
* Anmeldeformular für Newsletter
*/
export const NewsletterBlock: Block = {
slug: 'newsletter-block',
labels: {
singular: 'Newsletter Anmeldung',
plural: 'Newsletter Anmeldungen',
},
fields: [
{
name: 'title',
type: 'text',
defaultValue: 'Newsletter abonnieren',
label: 'Überschrift',
localized: true,
},
{
name: 'subtitle',
type: 'textarea',
defaultValue: 'Erhalten Sie regelmäßig Updates und Neuigkeiten direkt in Ihr Postfach.',
label: 'Beschreibung',
localized: true,
},
{
name: 'layout',
type: 'select',
defaultValue: 'inline',
label: 'Layout',
options: [
{ label: 'Inline (Eingabe + Button nebeneinander)', value: 'inline' },
{ label: 'Gestapelt (untereinander)', value: 'stacked' },
{ label: 'Mit Bild (50/50)', value: 'with-image' },
{ label: 'Minimal (nur Input)', value: 'minimal' },
{ label: 'Card (Karte)', value: 'card' },
],
},
{
name: 'image',
type: 'upload',
relationTo: 'media',
label: 'Bild',
admin: {
condition: (data, siblingData) => siblingData?.layout === 'with-image',
},
},
{
name: 'imagePosition',
type: 'select',
defaultValue: 'left',
label: 'Bildposition',
options: [
{ label: 'Links', value: 'left' },
{ label: 'Rechts', value: 'right' },
],
admin: {
condition: (data, siblingData) => siblingData?.layout === 'with-image',
},
},
{
name: 'collectName',
type: 'checkbox',
defaultValue: false,
label: 'Name abfragen',
},
{
name: 'showInterests',
type: 'checkbox',
defaultValue: false,
label: 'Interessen zur Auswahl anbieten',
},
{
name: 'availableInterests',
type: 'select',
hasMany: true,
label: 'Verfügbare Interessen',
options: [
{ label: 'Allgemeine Updates', value: 'general' },
{ label: 'Blog-Artikel', value: 'blog' },
{ label: 'Produkt-News', value: 'products' },
{ label: 'Angebote & Aktionen', value: 'offers' },
{ label: 'Events', value: 'events' },
],
admin: {
condition: (data, siblingData) => siblingData?.showInterests,
},
},
{
name: 'buttonText',
type: 'text',
defaultValue: 'Anmelden',
label: 'Button-Text',
localized: true,
},
{
name: 'placeholderEmail',
type: 'text',
defaultValue: 'Ihre E-Mail-Adresse',
label: 'Placeholder E-Mail',
localized: true,
},
{
name: 'successMessage',
type: 'textarea',
defaultValue:
'Vielen Dank! Bitte bestätigen Sie Ihre E-Mail-Adresse über den Link in der Bestätigungsmail.',
label: 'Erfolgsmeldung',
localized: true,
},
{
name: 'errorMessage',
type: 'text',
defaultValue: 'Es ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.',
label: 'Fehlermeldung',
localized: true,
},
{
name: 'privacyText',
type: 'textarea',
defaultValue:
'Mit der Anmeldung akzeptieren Sie unsere Datenschutzerklärung. Sie können sich jederzeit abmelden.',
label: 'Datenschutz-Hinweis',
localized: true,
},
{
name: 'privacyLink',
type: 'text',
defaultValue: '/datenschutz',
label: 'Link zur Datenschutzerklärung',
},
{
name: 'source',
type: 'text',
defaultValue: 'website',
label: 'Tracking-Quelle',
admin: {
description: 'Wird gespeichert um zu tracken, wo die Anmeldung erfolgte',
},
},
{
name: 'backgroundColor',
type: 'select',
defaultValue: 'accent',
label: 'Hintergrund',
options: [
{ label: 'Weiß', value: 'white' },
{ label: 'Hell (Grau)', value: 'light' },
{ label: 'Dunkel', value: 'dark' },
{ label: 'Akzentfarbe', value: 'accent' },
],
},
],
}