feat: globalna platnost akcie sa prepisuje do vsetkych produktovych sekcii (uloha 15)

Zmena v ktorejkolvek produktovej sekcii alebo vo vernostnych zlavach
nastavi platnost vsade; produkty s vlastnou platnostou si ju ponechaju.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Jakub_HostacnyandClaude Opus 5.5 committed 2026-10-19 10:25:35 +02:00
1 parent d43a1dae40
commit 92dc2081d0
2 files changed
+28 -2

No files matched your search

+14
View File
@@ -591,6 +591,19 @@ export default function Home() {
}));
};
// Globálna platnosť akcie: prepíše sa do všetkých produktových sekcií aj vernostných zliav
// (produkty s vlastnou platnosťou validityOverride si ju ponechajú)
const handleSetGlobalValidity = (validity: string) => {
setCampaign((prev) => ({
...prev,
modules: prev.modules.map((m) =>
m.type === 'products_grid' || m.type === 'loyalty_club'
? { ...m, data: { ...m.data, globalValidity: validity } }
: m
)
}));
};
const topCount = campaign.modules.filter((m) => isTopModule(m)).length;
const firstBottomIdx = campaign.modules.findIndex((m) => isBottomModule(m));
@@ -795,6 +808,7 @@ export default function Home() {
module={selectedModule}
onUpdateModule={handleUpdateModule}
onApplyBadgeToAll={handleApplyBadgeToAll}
onSetGlobalValidity={handleSetGlobalValidity}
availableBadges={availableBadges}
onOpenBadgeManager={(pId) => {
setTargetProductIdForBadge(pId);
+14 -2
View File
@@ -20,6 +20,7 @@ interface ConfigPanelProps {
module: NewsletterModule | null;
onUpdateModule: (updated: NewsletterModule) => void;
onApplyBadgeToAll?: (badge: BadgeTemplate, badgeLayout?: 'below' | 'side') => void;
onSetGlobalValidity?: (validity: string) => void; // nastaví platnosť vo všetkých produktových sekciách
onOpenBadgeManager?: (productId: string) => void;
onOpenImport?: () => void;
availableBadges?: BadgeTemplate[];
@@ -29,6 +30,7 @@ export const ConfigPanel: React.FC<ConfigPanelProps> = ({
module,
onUpdateModule,
onApplyBadgeToAll,
onSetGlobalValidity,
onOpenBadgeManager,
onOpenImport,
availableBadges = []
@@ -343,10 +345,15 @@ export const ConfigPanel: React.FC<ConfigPanelProps> = ({
<input
type="text"
value={module.data.globalValidity || ''}
onChange={(e) => updateData({ globalValidity: e.target.value })}
onChange={(e) =>
onSetGlobalValidity
? onSetGlobalValidity(e.target.value)
: updateData({ globalValidity: e.target.value })
}
placeholder="napr. 2. 5. – 15. 5. 2026"
className="w-full text-sm border border-gray-300 rounded-lg p-2"
/>
<p className="text-[10px] text-gray-500 mt-1">Platí pre všetky produktové sekcie aj vernostné zľavy. Produkty s vlastnou platnosťou si ju ponechajú.</p>
</div>
{/* Rozloženie produktov (Počet produktov na riadok) */}
@@ -981,10 +988,15 @@ export const ConfigPanel: React.FC<ConfigPanelProps> = ({
<input
type="text"
value={module.data.globalValidity || ''}
onChange={(e) => updateData({ globalValidity: e.target.value })}
onChange={(e) =>
onSetGlobalValidity
? onSetGlobalValidity(e.target.value)
: updateData({ globalValidity: e.target.value })
}
placeholder="napr. 2. 5. – 15. 5. 2026"
className="w-full text-sm border border-gray-300 rounded-lg p-2"
/>
<p className="text-[10px] text-gray-500 mt-1">Platí pre všetky produktové sekcie aj vernostné zľavy. Produkty s vlastnou platnosťou si ju ponechajú.</p>
</div>
{/* Farba pozadia vernostných kariet */}