This commit is contained in:
gpt-engineer-app[bot]
2025-12-18 08:06:31 +00:00
parent cbc0992554
commit bf7a9fad99
11 changed files with 1441 additions and 20 deletions

View File

@@ -0,0 +1,54 @@
import { createContext, useContext, useState, ReactNode } from 'react';
export interface CartItem {
id: string;
title: string;
price: number;
sale_price: number | null;
type: string;
}
interface CartContextType {
items: CartItem[];
addItem: (item: CartItem) => void;
removeItem: (id: string) => void;
clearCart: () => void;
total: number;
}
const CartContext = createContext<CartContextType | undefined>(undefined);
export function CartProvider({ children }: { children: ReactNode }) {
const [items, setItems] = useState<CartItem[]>([]);
const addItem = (item: CartItem) => {
setItems(prev => {
if (prev.find(i => i.id === item.id)) return prev;
return [...prev, item];
});
};
const removeItem = (id: string) => {
setItems(prev => prev.filter(item => item.id !== id));
};
const clearCart = () => {
setItems([]);
};
const total = items.reduce((sum, item) => sum + (item.sale_price ?? item.price), 0);
return (
<CartContext.Provider value={{ items, addItem, removeItem, clearCart, total }}>
{children}
</CartContext.Provider>
);
}
export function useCart() {
const context = useContext(CartContext);
if (context === undefined) {
throw new Error('useCart must be used within a CartProvider');
}
return context;
}