UNPKG

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
"use strict"; 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, }; }