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 topCount = campaign.modules.filter((m) => isTopModule(m)).length;
|
||||||
const firstBottomIdx = campaign.modules.findIndex((m) => isBottomModule(m));
|
const firstBottomIdx = campaign.modules.findIndex((m) => isBottomModule(m));
|
||||||
|
|
||||||
@@ -795,6 +808,7 @@ export default function Home() {
|
|||||||
module={selectedModule}
|
module={selectedModule}
|
||||||
onUpdateModule={handleUpdateModule}
|
onUpdateModule={handleUpdateModule}
|
||||||
onApplyBadgeToAll={handleApplyBadgeToAll}
|
onApplyBadgeToAll={handleApplyBadgeToAll}
|
||||||
|
onSetGlobalValidity={handleSetGlobalValidity}
|
||||||
availableBadges={availableBadges}
|
availableBadges={availableBadges}
|
||||||
onOpenBadgeManager={(pId) => {
|
onOpenBadgeManager={(pId) => {
|
||||||
setTargetProductIdForBadge(pId);
|
setTargetProductIdForBadge(pId);
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ interface ConfigPanelProps {
|
|||||||
module: NewsletterModule | null;
|
module: NewsletterModule | null;
|
||||||
onUpdateModule: (updated: NewsletterModule) => void;
|
onUpdateModule: (updated: NewsletterModule) => void;
|
||||||
onApplyBadgeToAll?: (badge: BadgeTemplate, badgeLayout?: 'below' | 'side') => 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;
|
onOpenBadgeManager?: (productId: string) => void;
|
||||||
onOpenImport?: () => void;
|
onOpenImport?: () => void;
|
||||||
availableBadges?: BadgeTemplate[];
|
availableBadges?: BadgeTemplate[];
|
||||||
@@ -29,6 +30,7 @@ export const ConfigPanel: React.FC<ConfigPanelProps> = ({
|
|||||||
module,
|
module,
|
||||||
onUpdateModule,
|
onUpdateModule,
|
||||||
onApplyBadgeToAll,
|
onApplyBadgeToAll,
|
||||||
|
onSetGlobalValidity,
|
||||||
onOpenBadgeManager,
|
onOpenBadgeManager,
|
||||||
onOpenImport,
|
onOpenImport,
|
||||||
availableBadges = []
|
availableBadges = []
|
||||||
@@ -343,10 +345,15 @@ export const ConfigPanel: React.FC<ConfigPanelProps> = ({
|
|||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
value={module.data.globalValidity || ''}
|
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"
|
placeholder="napr. 2. 5. – 15. 5. 2026"
|
||||||
className="w-full text-sm border border-gray-300 rounded-lg p-2"
|
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>
|
</div>
|
||||||
|
|
||||||
{/* Rozloženie produktov (Počet produktov na riadok) */}
|
{/* Rozloženie produktov (Počet produktov na riadok) */}
|
||||||
@@ -981,10 +988,15 @@ export const ConfigPanel: React.FC<ConfigPanelProps> = ({
|
|||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
value={module.data.globalValidity || ''}
|
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"
|
placeholder="napr. 2. 5. – 15. 5. 2026"
|
||||||
className="w-full text-sm border border-gray-300 rounded-lg p-2"
|
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>
|
</div>
|
||||||
|
|
||||||
{/* Farba pozadia vernostných kariet */}
|
{/* Farba pozadia vernostných kariet */}
|
||||||
|
|||||||
Reference in new issue
Block a user