From a82c2d5af85ab8067c4c4d6b7e704e745a040ce2 Mon Sep 17 00:00:00 2001 From: Jandl-hostacny Date: Thu, 8 Oct 2026 10:11:27 +0200 Subject: [PATCH] feat: zarovnanie vysky produktovych kariet v riadku (uloha 7) --- src/components/editor/ConfigPanel.tsx | 31 +++++++++++++++++++++++++++ src/lib/emailRenderer.ts | 31 ++++++++++++++++++++------- src/types/newsletter.ts | 1 + 3 files changed, 55 insertions(+), 8 deletions(-) diff --git a/src/components/editor/ConfigPanel.tsx b/src/components/editor/ConfigPanel.tsx index 440f1b0..b7da117 100644 --- a/src/components/editor/ConfigPanel.tsx +++ b/src/components/editor/ConfigPanel.tsx @@ -342,6 +342,37 @@ export const ConfigPanel: React.FC = ({ /> + {/* Rozloženie produktov (Počet produktov na riadok) */} +
+ +
+ + +
+
+ {/* Farba pozadia skupiny produktov */}
diff --git a/src/lib/emailRenderer.ts b/src/lib/emailRenderer.ts index 8b1768a..55b3fd4 100644 --- a/src/lib/emailRenderer.ts +++ b/src/lib/emailRenderer.ts @@ -309,13 +309,27 @@ function renderModule(m: any, campaign: NewsletterCampaign): string { const badgePrcColor = m.data.badgePriceColor || '#fefefe'; const badgeCustomTxt = m.data.badgeHeaderCustomText || null; + const cols = m.data.columns === 1 ? 1 : 2; const rows: ProductItem[][] = []; - for (let i = 0; i < products.length; i += 2) { - rows.push(products.slice(i, i + 2)); + for (let i = 0; i < products.length; i += cols) { + rows.push(products.slice(i, i + cols)); } - const rowsHtml = rows.map((row) => ` - + const rowsHtml = rows.map((row) => { + if (cols === 1) { + const p = row[0]; + return ` +
+ + + +
+ ${renderExactProductCard(p, globalValidity, cardBg, cardBorder, badgeHdrBg, badgeHdrColor, badgePrcBg, badgePrcColor, badgeCustomTxt, m.data.sectionTitle)} +
`; + } + + return ` + ${row.map((p, idx) => ` ' : ''}
@@ -324,7 +338,8 @@ function renderModule(m: any, campaign: NewsletterCampaign): string { ${row.length === 1 ? '
- `).join('\n'); + `; + }).join('\n'); return ` @@ -634,13 +649,13 @@ function renderExactProductCard( - - + + ${escapeHtml(p.title || sectionTitle || 'Produkt')} - +

${escapeHtml(p.title)}

diff --git a/src/types/newsletter.ts b/src/types/newsletter.ts index d8528db..79c50e1 100644 --- a/src/types/newsletter.ts +++ b/src/types/newsletter.ts @@ -93,6 +93,7 @@ export interface ProductsGridModuleData { products: ProductItem[]; cardBgColor?: string; cardBorderColor?: string; + columns?: 1 | 2; } export interface LoyaltyClubModuleData {