From c426145c488cc37d8224070726b7c0e5641c7040 Mon Sep 17 00:00:00 2001 From: Jandl-hostacny Date: Wed, 21 Oct 2026 10:52:09 +0200 Subject: [PATCH] feat: klik na produkt v nahlade otvori jeho editor (harmonika) - v paneli je otvoreny vzdy len jeden produkt, ostatne su zbalene - klik na kartu produktu v nahlade vyberie sekciu aj produkt, panel sa posunie na jeho editor a karta sa v nahlade zvyrazni - odkazy v nahlade sa klikom neotvaraju Co-Authored-By: Claude Opus 5.5 --- src/app/page.tsx | 25 +++++++++++++++++++++++-- src/components/editor/ConfigPanel.tsx | 13 ++++++++++--- src/components/editor/ProductEditor.tsx | 21 +++++++++++++++------ src/lib/productCard.ts | 2 +- 4 files changed, 49 insertions(+), 12 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index 1f3d30a..73f8ccb 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -20,6 +20,8 @@ import { ChevronUp, ChevronDown, Copy, Trash2, Anchor, Lock } from 'lucide-react export default function Home() { const [campaign, setCampaign] = useState(DEFAULT_CAMPAIGN); const [selectedModuleId, setSelectedModuleId] = useState('mod-products-fantasticky'); + // Produkt otvorený v paneli (harmonika); nastaví sa aj klikom na produkt v náhľade + const [selectedProductId, setSelectedProductId] = useState(null); const [isSaving, setIsSaving] = useState(false); const [isExportingBrevo, setIsExportingBrevo] = useState(false); const [brevoUrl, setBrevoUrl] = useState(null); @@ -667,6 +669,10 @@ export default function Home() { backgroundImage: 'linear-gradient(135deg, #005bb5 0%, #000d1a 100%)' }} > + {/* Zvýraznenie produktu otvoreného v paneli */} + {selectedProductId && ( + + )} {/* E-mail Container 1:1 k originálu */}
{campaign.modules.map((mod, idx) => { @@ -683,7 +689,16 @@ export default function Home() { return (
setSelectedModuleId(mod.id)} + onClick={(e) => { + // Klik na kartu produktu otvorí v paneli práve tento produkt + const card = (e.target as HTMLElement).closest('[data-product-id]'); + if (card) { + setSelectedProductId(card.getAttribute('data-product-id')); + } else if (mod.id !== selectedModuleId) { + setSelectedProductId(null); + } + setSelectedModuleId(mod.id); + }} className={`relative cursor-pointer transition-all duration-150 rounded-2xl ${ isSelected ? 'ring-2 ring-offset-4 ring-offset-[#001a33] ring-red-500 shadow-2xl' @@ -866,7 +881,11 @@ export default function Home() { dangerouslySetInnerHTML={{ __html: renderSingleModuleHtml(mod, campaign) }} - className="pointer-events-none" + onClick={(e) => { + // odkazy v náhľade neotvárame, klik slúži na výber modulu / produktu + if ((e.target as HTMLElement).closest('a')) e.preventDefault(); + }} + className="[&_[data-product-id]]:cursor-pointer" /> )}
@@ -879,6 +898,8 @@ export default function Home() {