feat: lista platnosti akcie nad produktmi, platnost na kartach predvolene skryta

- novy blok Lista platnosti akcie (vzhlad ako oznamovacia lista, bez badge a CTA):
  text + globalna platnost, da sa skryt a posuvat, nie zmazat; do existujucich
  kampani sa vlozi automaticky nad prvu produktovu sekciu
- platnost na kartach produktov sa da zobrazit prepinacom (predvolene skryta),
  produkty s vlastnou platnostou ju zobrazia vzdy

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Jakub_HostacnyandClaude Opus 5.5 committed 2026-10-19 16:42:59 +02:00
1 parent 5f6a39debe
commit 98fdad535d
5 files changed
+213 -44

No files matched your search

+22 -1
View File
@@ -1,9 +1,29 @@
import { NewsletterCampaign, ProductItem } from '@/types/newsletter';
import { NewsletterCampaign, NewsletterModule, ProductItem } from '@/types/newsletter';
// Verejné úložisko statických obrázkov (logá, ikony, štítky predajní...) v Supabase projekte z .env.
// Súbory sú v supabase/assets/ a nahrajú sa príkazom: npm run db:upload-assets
export const SUPABASE_ASSETS_BASE = `${(process.env.NEXT_PUBLIC_SUPABASE_URL || '').replace(/\/$/, '')}/storage/v1/object/public/newsletter-assets/`;
// Lišta platnosti akcie nad produktmi – dá sa skryť a posúvať, nie zmazať
export const VALIDITY_BAR_MODULE: NewsletterModule = {
id: 'mod-validity-bar',
type: 'validity_bar',
title: 'Lišta platnosti akcie',
data: {
text: 'Akcia platí',
enabled: true
}
};
// Staršie kampane bez lišty platnosti: vloží ju nad prvú produktovú sekciu
export function ensureValidityBar(modules: NewsletterModule[]): NewsletterModule[] {
if (modules.some((m) => m.type === 'validity_bar')) return modules;
const idx = modules.findIndex((m) => m.type === 'products_grid' || m.type === 'loyalty_club');
const bar = { ...VALIDITY_BAR_MODULE, data: { ...VALIDITY_BAR_MODULE.data } };
if (idx === -1) return modules;
return [...modules.slice(0, idx), bar, ...modules.slice(idx)];
}
export const DEFAULT_CAMPAIGN: NewsletterCampaign = {
id: '',
title: 'COOP Jednota Newsletter',
@@ -67,6 +87,7 @@ export const DEFAULT_CAMPAIGN: NewsletterCampaign = {
buttonBgColor: '#003399'
}
},
VALIDITY_BAR_MODULE,
{
id: 'mod-products-fantasticky',
type: 'products_grid',