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:
1 parent
d43a1dae40
commit
92dc2081d0
2 files changed
+28
-2
No files matched your search
@@ -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);
|
||||
|
||||
@@ -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 */}
|
||||
|
||||
Reference in new issue
Block a user