Feat: adjustable superscript index, loyalty badges, centered unit price, global badge apply, brevo url fix

This commit is contained in:
Jakub_Hostacny committed 2026-09-24 12:33:39 +02:00
1 parent 245e3f8471
commit 4e4e5e5af3
10 files changed
+539 -290

No files matched your search

+37 -8
View File
@@ -144,7 +144,7 @@ export default function Home() {
modules: enforceAnchors(dbItem.data.modules)
});
if (dbItem.brevo_campaign_id) {
setBrevoUrl(`https://app.brevo.com/campaigns/email/edit/${dbItem.brevo_campaign_id}`);
setBrevoUrl('https://app.brevo.com/campaigns');
}
}
}
@@ -522,14 +522,14 @@ export default function Home() {
};
// Vybraný produkt pre editor cenoviek
let targetProduct: ProductItem | null = null;
let targetProduct: any = null;
if (targetProductIdForBadge && selectedModule?.data?.products) {
targetProduct = selectedModule.data.products.find((p: any) => p.id === targetProductIdForBadge) || null;
}
const handleApplyBadgeToProduct = (badge: BadgeTemplate, renderedPngUrl?: string) => {
if (!targetProductIdForBadge || !selectedModule) return;
const updatedProducts = (selectedModule.data.products || []).map((p: ProductItem) => {
const updatedProducts = (selectedModule.data.products || []).map((p: any) => {
if (p.id === targetProductIdForBadge) {
return {
...p,
@@ -561,6 +561,34 @@ export default function Home() {
});
};
// Hromadná aplikácia cenovky na všetky produkty v celej kampani (všetky sekcie + vernostné zľavy)
const handleApplyBadgeToAll = (badge: BadgeTemplate) => {
setCampaign((prev) => ({
...prev,
modules: prev.modules.map((m) => {
if (m.type === 'products_grid' || m.type === 'loyalty_club') {
return {
...m,
data: {
...m.data,
products: (m.data.products || []).map((prod: any) => ({
...prod,
badgeId: badge.id,
badgeCustomTemplate: badge,
badgeWidth: badge.width ?? prod.badgeWidth ?? 110,
badgeAlign: badge.align ?? prod.badgeAlign ?? 'center',
badgePaddingTop: badge.paddingTop ?? prod.badgePaddingTop ?? 4,
badgePaddingBottom: badge.paddingBottom ?? prod.badgePaddingBottom ?? 4,
customBadgePngUrl: undefined
}))
}
};
}
return m;
})
}));
};
const topCount = campaign.modules.filter((m) => isTopModule(m)).length;
const firstBottomIdx = campaign.modules.findIndex((m) => isBottomModule(m));
@@ -722,6 +750,7 @@ export default function Home() {
<ConfigPanel
module={selectedModule}
onUpdateModule={handleUpdateModule}
onApplyBadgeToAll={handleApplyBadgeToAll}
availableBadges={availableBadges}
onOpenBadgeManager={(pId) => {
setTargetProductIdForBadge(pId);
@@ -744,10 +773,10 @@ export default function Home() {
isOpen={isBadgeEditorOpen}
onClose={() => setIsBadgeEditorOpen(false)}
onSelectBadge={handleApplyBadgeToProduct}
currentDiscount={targetProduct?.discountText || '25%'}
currentPriceMain={targetProduct?.priceMain || '1'}
currentPriceSub={targetProduct?.priceSub || '99'}
currentUnitPrice={targetProduct?.unitPrice || '1kg = 4,91 €'}
currentDiscount={targetProduct?.discountText || targetProduct?.cardDiscount || '25%'}
currentPriceMain={targetProduct?.priceMain || targetProduct?.cardPriceMain || '1'}
currentPriceSub={targetProduct?.priceSub || targetProduct?.cardPriceSub || '99'}
currentUnitPrice={targetProduct?.unitPrice || targetProduct?.cardUnitPrice || '1kg = 4,91 €'}
/>
{/* Modál Moje newslettre (Ukladanie, duplikácia, vytváranie a prepínanie) */}
@@ -759,7 +788,7 @@ export default function Home() {
setCampaign({ ...selected, modules: enforceAnchors(selected.modules) });
setSelectedModuleId(selected.modules[1]?.id || selected.modules[0]?.id || null);
if (selected.brevoCampaignId) {
setBrevoUrl(`https://app.brevo.com/campaigns/email/edit/${selected.brevoCampaignId}`);
setBrevoUrl('https://app.brevo.com/campaigns');
} else {
setBrevoUrl(null);
}