feat(F-102): completed feature

This commit is contained in:
chattie
2026-08-21 12:02:15 +02:00
parent e46faa869a
commit 027cacd871
31 changed files with 510 additions and 80 deletions

View File

@@ -8,6 +8,8 @@ export interface CartItem {
quantity: number;
priceCents: number;
imageUrl?: string;
/** Cantidad mínima de compra del producto (F-102). */
minPurchaseQty?: number;
}
interface CartContextValue {
@@ -39,7 +41,15 @@ export function CartProvider({ children }: { children: React.ReactNode }) {
setItems((prev) => {
const existing = prev.find((i) => i.variantId === item.variantId);
const next = existing
? prev.map((i) => i.variantId === item.variantId ? { ...i, quantity: i.quantity + item.quantity } : i)
? prev.map((i) =>
i.variantId === item.variantId
? {
...i,
quantity: i.quantity + item.quantity,
minPurchaseQty: Math.max(i.minPurchaseQty ?? 1, item.minPurchaseQty ?? 1),
}
: i,
)
: [...prev, item];
localStorage.setItem('mdv_cart', JSON.stringify(next));
return next;
@@ -56,9 +66,14 @@ export function CartProvider({ children }: { children: React.ReactNode }) {
const changeQuantity = useCallback((variantId: string, quantity: number) => {
setItems((prev) => {
const next = quantity <= 0
? prev.filter((i) => i.variantId !== variantId)
: prev.map((i) => i.variantId === variantId ? { ...i, quantity } : i);
const next =
quantity <= 0
? prev.filter((i) => i.variantId !== variantId)
: prev.map((i) =>
i.variantId === variantId
? { ...i, quantity: Math.max(quantity, i.minPurchaseQty ?? 1) }
: i,
);
localStorage.setItem('mdv_cart', JSON.stringify(next));
return next;
});