Warenkorb/Produktseite: nie mehr in den Warenkorb legen können als auf Lager ist
- Produktseite: Mengen-Stepper und manuelle Eingabe sind jetzt auf den tatsächlichen Lagerbestand begrenzt (zählt bereits im Warenkorb liegende Menge desselben Produkts mit). Ist das Maximum schon erreicht, wird der "In den Warenkorb"-Button deaktiviert und zeigt "Maximale verfügbare Menge ist bereits im Warenkorb"; bei wenig Rest- bestand (≤5) erscheint stattdessen "Nur noch X auf Lager". - Warenkorb-Seite: der "+"-Button bei der Mengenauswahl ist ebenfalls auf den Lagerbestand begrenzt. - Als zusätzliche Absicherung greift das Limit jetzt auch direkt in addToCart()/updateQuantity() selbst (cart.ts) — unabhängig davon, welche Oberfläche die Funktion aufruft, kann so nie mehr Menge als Bestand ins localStorage gelangen. Verifiziert per Puppeteer an einem Produkt mit Bestand 2: 6× auf "+" klicken bleibt bei 2, manuelles Eintippen von 999 wird auf 2 geklemmt, nach dem Hinzufügen ist der Button deaktiviert, der "+"-Button im Warenkorb erhöht nicht weiter — keine Konsolenfehler.
This commit is contained in:
+12
-2
@@ -38,19 +38,29 @@ export function saveCart(items: CartItem[]) {
|
||||
window.dispatchEvent(new CustomEvent("cart:changed", { detail: items }));
|
||||
}
|
||||
|
||||
/** Nie mehr als tatsächlich auf Lager ist — greift unabhängig davon, welche Oberfläche
|
||||
* addToCart()/updateQuantity() aufruft, damit diese Regel garantiert eingehalten wird und
|
||||
* nicht nur an einer einzelnen Stelle in der UI. */
|
||||
function maxBestand(slug: string): number {
|
||||
const produkt = getProduct(slug);
|
||||
return produkt ? produkt.bestand : Infinity;
|
||||
}
|
||||
|
||||
export function addToCart(item: Omit<CartItem, "menge">, menge = 1) {
|
||||
const cart = getCart();
|
||||
const max = maxBestand(item.slug);
|
||||
const existing = cart.find((i) => i.slug === item.slug);
|
||||
if (existing) {
|
||||
existing.menge += menge;
|
||||
existing.menge = Math.min(existing.menge + menge, max);
|
||||
} else {
|
||||
cart.push({ ...item, menge });
|
||||
cart.push({ ...item, menge: Math.min(Math.max(1, menge), max) });
|
||||
}
|
||||
saveCart(cart);
|
||||
}
|
||||
|
||||
export function updateQuantity(slug: string, menge: number) {
|
||||
let cart = getCart();
|
||||
menge = Math.min(menge, maxBestand(slug));
|
||||
if (menge <= 0) {
|
||||
cart = cart.filter((i) => i.slug !== slug);
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user