Feat: adjustable superscript index, loyalty badges, centered unit price, global badge apply, brevo url fix
This commit is contained in:
1 parent
245e3f8471
commit
4e4e5e5af3
10 files changed
+539
-290
No files matched your search
@@ -63,8 +63,8 @@ export async function POST(req: NextRequest) {
|
||||
success: true,
|
||||
updated: true,
|
||||
campaignId: Number(existingCampaignId),
|
||||
brevoUrl: `https://app.brevo.com/campaigns/email/edit/${existingCampaignId}`,
|
||||
brevoListingUrl: 'https://app.brevo.com/campaigns/listing',
|
||||
brevoUrl: 'https://app.brevo.com/campaigns',
|
||||
brevoListingUrl: 'https://app.brevo.com/campaigns',
|
||||
message: 'Kampaň bola úspešne aktualizovaná v Brevo!'
|
||||
});
|
||||
}
|
||||
@@ -113,8 +113,8 @@ export async function POST(req: NextRequest) {
|
||||
success: true,
|
||||
updated: false,
|
||||
campaignId: data.id,
|
||||
brevoUrl: `https://app.brevo.com/campaigns/email/edit/${data.id}`,
|
||||
brevoListingUrl: 'https://app.brevo.com/campaigns/listing',
|
||||
brevoUrl: 'https://app.brevo.com/campaigns',
|
||||
brevoListingUrl: 'https://app.brevo.com/campaigns',
|
||||
message: 'Kampaň bola úspešne vytvorená v Brevo!'
|
||||
});
|
||||
} catch (error: any) {
|
||||
|
||||
@@ -51,8 +51,8 @@ export async function GET(req: NextRequest) {
|
||||
name: data.name,
|
||||
status: data.status,
|
||||
subject: data.subject,
|
||||
brevoUrl: `https://app.brevo.com/campaigns/email/edit/${data.id}`,
|
||||
brevoListingUrl: 'https://app.brevo.com/campaigns/listing'
|
||||
brevoUrl: 'https://app.brevo.com/campaigns',
|
||||
brevoListingUrl: 'https://app.brevo.com/campaigns'
|
||||
});
|
||||
} catch (err: any) {
|
||||
console.error('Brevo verify error:', err);
|
||||
|
||||
+37
-8
@@ -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);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user