app-dreamy-armadillo-flit/lib/use-cart.ts

50 lines
1.3 KiB
TypeScript

"use client";
import { useState, useEffect } from "react";
import { Product } from "@/lib/data";
type CartItem = Product & { quantity: number };
export function useCart() {
const [cart, setCart] = useState<CartItem[]>([]);
useEffect(() => {
const savedCart = localStorage.getItem("cart");
if (savedCart) setCart(JSON.parse(savedCart));
}, []);
const saveCart = (newCart: CartItem[]) => {
setCart(newCart);
localStorage.setItem("cart", JSON.stringify(newCart));
};
const addToCart = (product: Product) => {
const existing = cart.find((item) => item.id === product.id);
if (existing) {
saveCart(
cart.map((item) =>
item.id === product.id ? { ...item, quantity: item.quantity + 1 } : item
)
);
} else {
saveCart([...cart, { ...product, quantity: 1 }]);
}
};
const removeFromCart = (id: string) => {
saveCart(cart.filter((item) => item.id !== id));
};
const updateQuantity = (id: string, quantity: number) => {
if (quantity < 1) return removeFromCart(id);
saveCart(
cart.map((item) => (item.id === id ? { ...item, quantity } : item))
);
};
const clearCart = () => saveCart([]);
const total = cart.reduce((sum, item) => sum + item.price * item.quantity, 0);
return { cart, addToCart, removeFromCart, updateQuantity, clearCart, total };
}