cms.c2sgmbh/src/blocks/FavoritesBlock.ts
Martin Porwoll 3ccb8bd585 feat(BlogWoman): add Favorites, Series collections and content blocks
Add new collections and blocks for BlogWoman affiliate and video content:

Collections:
- Favorites: Affiliate products with categories, badges, and price ranges
- Series: YouTube series with custom branding (logo, colors)

Blocks:
- FavoritesBlock: Grid/list/carousel display for affiliate products
- SeriesBlock: Series overview with filtering
- SeriesDetailBlock: Single series page with hero
- VideoEmbedBlock: YouTube/Vimeo embed with privacy mode
- FeaturedContentBlock: Curated mixed-content collections

Also includes documentation updates for deployment and API guides.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 14:57:58 +00:00

182 lines
4 KiB
TypeScript

import type { Block } from 'payload'
/**
* Background color options (shared with other blocks)
*/
const backgroundColorOptions = [
{ label: 'Weiß', value: 'white' },
{ label: 'Ivory', value: 'ivory' },
{ label: 'Sand', value: 'sand' },
{ label: 'Hell (Grau)', value: 'light' },
{ label: 'Dunkel', value: 'dark' },
]
/**
* Category options matching the Favorites collection
*/
const categoryFilterOptions = [
{ label: 'Alle Kategorien', value: 'all' },
{ label: 'Fashion', value: 'fashion' },
{ label: 'Beauty', value: 'beauty' },
{ label: 'Travel', value: 'travel' },
{ label: 'Tech', value: 'tech' },
{ label: 'Home', value: 'home' },
]
/**
* FavoritesBlock
*
* Zeigt Favoriten/Affiliate-Produkte aus der Favorites Collection.
* Unterstützt verschiedene Layouts und Filteroptionen.
*/
export const FavoritesBlock: Block = {
slug: 'favorites-block',
labels: {
singular: 'Favoriten',
plural: 'Favoriten',
},
imageURL: '/assets/blocks/favorites.png',
fields: [
// Header
{
name: 'title',
type: 'text',
label: 'Überschrift',
localized: true,
},
{
name: 'subtitle',
type: 'text',
label: 'Untertitel',
localized: true,
},
// Filtering
{
name: 'category',
type: 'select',
defaultValue: 'all',
options: categoryFilterOptions,
label: 'Kategorie-Filter',
admin: {
description: 'Nur Favoriten dieser Kategorie anzeigen',
},
},
{
name: 'showFeaturedOnly',
type: 'checkbox',
defaultValue: false,
label: 'Nur Featured anzeigen',
admin: {
description: 'Nur als "Featured" markierte Favoriten anzeigen',
},
},
{
name: 'limit',
type: 'number',
defaultValue: 8,
min: 1,
max: 50,
label: 'Anzahl',
admin: {
description: 'Maximale Anzahl der angezeigten Favoriten',
},
},
// Layout
{
name: 'layout',
type: 'select',
defaultValue: 'grid',
label: 'Layout',
options: [
{ label: 'Grid', value: 'grid' },
{ label: 'Liste', value: 'list' },
{ label: 'Karussell', value: 'carousel' },
],
},
{
name: 'columns',
type: 'select',
defaultValue: '4',
label: 'Spalten',
options: [
{ label: '2 Spalten', value: '2' },
{ label: '3 Spalten', value: '3' },
{ label: '4 Spalten', value: '4' },
],
admin: {
condition: (_, siblingData) =>
siblingData?.layout === 'grid' || siblingData?.layout === 'carousel',
},
},
// Display Options
{
name: 'showPrice',
type: 'checkbox',
defaultValue: true,
label: 'Preis anzeigen',
},
{
name: 'showBadge',
type: 'checkbox',
defaultValue: true,
label: 'Badge anzeigen',
},
{
name: 'showDescription',
type: 'checkbox',
defaultValue: false,
label: 'Beschreibung anzeigen',
},
{
name: 'showCategory',
type: 'checkbox',
defaultValue: false,
label: 'Kategorie anzeigen',
},
// Styling
{
name: 'backgroundColor',
type: 'select',
defaultValue: 'white',
options: backgroundColorOptions,
label: 'Hintergrundfarbe',
},
// CTA
{
name: 'cta',
type: 'group',
label: 'Call-to-Action',
fields: [
{
name: 'showCta',
type: 'checkbox',
defaultValue: false,
label: 'CTA-Button anzeigen',
},
{
name: 'ctaText',
type: 'text',
label: 'Button-Text',
defaultValue: 'Alle Favoriten ansehen',
localized: true,
admin: {
condition: (_, siblingData) => siblingData?.showCta,
},
},
{
name: 'ctaUrl',
type: 'text',
label: 'Button-Link',
admin: {
condition: (_, siblingData) => siblingData?.showCta,
},
},
],
},
],
}