storenest-commerce
Version:
Complete e-commerce SDK for Storenest platform with React components, multi-language support, secure checkout, and enterprise-grade security
108 lines (107 loc) • 3.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useCart = useCart;
const react_1 = require("react");
const cart_1 = require("../cart");
function useCart(userId) {
const [cart, setCart] = (0, react_1.useState)(null);
const [isLoading, setIsLoading] = (0, react_1.useState)(false);
const [error, setError] = (0, react_1.useState)(null);
const refreshCart = (0, react_1.useCallback)(async () => {
if (!userId) {
setCart(null);
return;
}
setIsLoading(true);
setError(null);
try {
const cartData = await (0, cart_1.getCart)(userId);
setCart(cartData);
}
catch (err) {
const errorMessage = err instanceof Error ? err.message : 'Failed to load cart';
setError(errorMessage);
}
finally {
setIsLoading(false);
}
}, [userId]);
// Load cart when userId changes
(0, react_1.useEffect)(() => {
refreshCart();
}, [refreshCart]);
const addItem = (0, react_1.useCallback)(async (params) => {
if (!userId) {
throw new Error('User not authenticated');
}
setIsLoading(true);
setError(null);
try {
await (0, cart_1.addToCart)(params);
await refreshCart(); // Refresh cart after adding
}
catch (err) {
const errorMessage = err instanceof Error ? err.message : 'Failed to add item to cart';
setError(errorMessage);
throw err;
}
finally {
setIsLoading(false);
}
}, [userId, refreshCart]);
const updateItem = (0, react_1.useCallback)(async (params) => {
if (!userId) {
throw new Error('User not authenticated');
}
setIsLoading(true);
setError(null);
try {
await (0, cart_1.updateCartItem)(params);
await refreshCart(); // Refresh cart after updating
}
catch (err) {
const errorMessage = err instanceof Error ? err.message : 'Failed to update cart item';
setError(errorMessage);
throw err;
}
finally {
setIsLoading(false);
}
}, [userId, refreshCart]);
const removeItem = (0, react_1.useCallback)(async (params) => {
if (!userId) {
throw new Error('User not authenticated');
}
setIsLoading(true);
setError(null);
try {
await (0, cart_1.removeFromCart)(params);
await refreshCart(); // Refresh cart after removing
}
catch (err) {
const errorMessage = err instanceof Error ? err.message : 'Failed to remove item from cart';
setError(errorMessage);
throw err;
}
finally {
setIsLoading(false);
}
}, [userId, refreshCart]);
// Calculate cart totals
const cartItemCount = cart?.items?.reduce((total, item) => total + item.quantity, 0) || 0;
const cartTotal = cart?.items?.reduce((total, item) => {
const price = item.product?.price || 0;
return total + (price * item.quantity);
}, 0) || 0;
return {
cart,
isLoading,
error,
addItem,
updateItem,
removeItem,
refreshCart,
cartItemCount,
cartTotal,
};
}