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:
1 parent
bd67fc7020
commit
fa824c541e
6 files changed
+173
-11
No files matched your search
@@ -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.
|
||||
|
||||
Reference in new issue
Block a user