feat: cena pre appkacov ({cena_app}), tag cenovky pre appkacov, doplnkove grafiky ako stitky

- premenna {cena_app} v cenovke a pole Pre appkacov v produkte (ked ju sablona pouziva)
- tag Appka v sablone; import da cenovku pre appkacov produktom s Cenou pre appkacov,
  bezny produkt ju nikdy nedostane
- stlpec Doplnkove grafiky sa pri importe zmeni na stitky na fotke

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Jakub_HostacnyandClaude Opus 5.5 committed 2026-10-21 15:48:25 +02:00
1 parent 11392722e2
commit bd67fc7020
8 files changed
+114 -34

No files matched your search

+7 -2
View File
@@ -205,7 +205,7 @@ export function cardVisualKey(p: CardProduct, ctx: CardContext): string {
p.customBadgePngUrl, badgeWidthFor(p, ctx.variant),
t ? [t.svgRaw, t.layersConfig, t.width] : null,
p.priceMain, p.priceSub, p.discountText, p.badgeText, p.unitPrice,
p.cardPriceMain, p.cardPriceSub, p.cardDiscount, p.cardUnitPrice,
p.cardPriceMain, p.cardPriceSub, p.cardDiscount, p.cardUnitPrice, p.appPriceMain, p.appPriceSub,
p.noCardPriceMain, p.noCardPriceSub, p.noCardDiscount, p.noCardUnitPrice,
p.stores, p.storesOffsetX ?? DEFAULT_STORES_OFFSET_X, p.storesOffsetY ?? DEFAULT_STORES_OFFSET_Y, p.storesSize ?? DEFAULT_STORES_SIZE,
p.labels || [], p.extraPhotos || [], photoStack(p)
@@ -339,6 +339,9 @@ function renderVisualPreview(p: CardProduct, ctx: CardContext, key: string): str
</div>`;
}
// Šablóna cenovky zobrazuje cenu pre appkáčov
export const usesAppPrice = (t?: BadgeTemplate) => !!t && JSON.stringify(t.layersConfig || []).includes('{cena_app}');
// Alt text obrázka karty: názov, gramáž a cena (ako v šablóne); ručne zadaný alt má prednosť
export function productCardAlt(p: CardProduct, variant: CardVariant): string {
const name = [pickAlt(p.title), p.quantity].filter(Boolean).join(' ');
@@ -355,9 +358,11 @@ export function productCardAlt(p: CardProduct, variant: CardVariant): string {
} else {
const main = price(p.priceMain, p.priceSub);
const card = price(p.cardPriceMain, p.cardPriceSub);
const app = usesAppPrice(p.badgeCustomTemplate) ? price(p.appPriceMain, p.appPriceSub) : '';
priceText = [
main ? `${main}${p.discountText ? `, zľava ${pct(p.discountText)}` : ''}` : '',
card ? `s kartou ${card}${p.cardDiscount ? ` (zľava ${pct(p.cardDiscount)})` : ''}` : ''
card ? `s kartou ${card}${p.cardDiscount ? ` (zľava ${pct(p.cardDiscount)})` : ''}` : '',
app ? `v aplikácii ${app}` : ''
].filter(Boolean).join(', ');
}
return pickAlt(p.imageAlt, [name, priceText].filter(Boolean).join(' – '), 'Produkt');