feat: nahradenie produktov pri importe ZIP, mensia cena od 10 EUR v cenovke, prevod SVG cenoviek

- import ZIP: volba Vymazat doterajsie produkty v sekcii
- vrstva ceny: longPriceScale (Cena od 10 EUR) zmensi dvojciferne eura, uciaria ostava
- skript na prevod SVG z Illustratora na pozadia sablon (texty na krivky,
  jedinecne triedy a id, zarovnanie tela cenovky)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Jakub_HostacnyandClaude Opus 5.5 committed 2026-10-21 16:00:35 +02:00
1 parent bd67fc7020
commit fa824c541e
6 files changed
+173 -11

No files matched your search

+7 -2
View File
@@ -14,7 +14,7 @@ import { shrinkImage, uploadFile } from '@/lib/upload';
interface ImportModalProps {
isOpen: boolean;
onClose: () => void;
onImportProducts: (products: ProductItem[]) => void;
onImportProducts: (products: ProductItem[], options?: { replace?: boolean }) => void;
availableBadges?: BadgeTemplate[]; // šablóny cenoviek – stĺpec s kódom určí, ktorú použiť
}
@@ -56,6 +56,7 @@ export const ProductImportModal: React.FC<ImportModalProps> = ({
// ZIP s podkladmi z Databázy produktov (tabuľka + fotky) – pevný formát, bez mapovania stĺpcov
const [zip, setZip] = useState<{ products: (PodkladyProduct & { thumb: string })[]; info: string } | null>(null);
const [zipProgress, setZipProgress] = useState<string | null>(null);
const [replaceExisting, setReplaceExisting] = useState(false); // vymazať doterajšie produkty sekcie
if (!isOpen) return null;
@@ -179,7 +180,7 @@ export const ProductImportModal: React.FC<ImportModalProps> = ({
zip.products.forEach((p) => p.thumb && URL.revokeObjectURL(p.thumb));
setZip(null);
setFile(null);
onImportProducts(items);
onImportProducts(items, { replace: replaceExisting });
onClose();
};
@@ -340,6 +341,10 @@ export const ProductImportModal: React.FC<ImportModalProps> = ({
);
})}
</div>
<label className="flex items-center gap-2 rounded-lg border border-gray-200 bg-gray-50 px-3 py-2 text-xs font-semibold text-gray-700 cursor-pointer">
<input type="checkbox" checked={replaceExisting} onChange={(e) => setReplaceExisting(e.target.checked)} className="w-3.5 h-3.5 accent-red-600" />
Vymazať doterajšie produkty v sekcii (nahradiť novými zo ZIP-u)
</label>
<p className="text-[11px] text-gray-500">
Fotky sa pri importe zmenšia na najviac 1000 px, pozadie karty sa nastaví podľa farby cenovky. Rozloženie karty (veľkosť a poloha
cenovky, štítky predajní) sa prevezme z prvého produktu v sekcii.