"use client"; import React, { useContext, useEffect, useState } from "react"; import { Trash2, Plus } from "lucide-react"; import authAxios, { backendUrl } from "@/utils/axios"; import ProductContext from "@/app/contexts/productContext"; import EmptyCart from "./emptyCart"; import { PayPalScriptProvider, PayPalButtons } from "@paypal/react-paypal-js"; import axios from "axios"; import { useRouter } from "next/navigation"; import PaymentComponent from "../payment/paymentComponent"; import { useCurrency } from "@/app/contexts/currencyContext"; import Link from "next/link"; import Image from "next/image"; import toast from "react-hot-toast"; const ShoppingCart = () => { const [cartItems, setCartItems] = useState(null); const [error, setError] = useState(null); const [shippingAddress, setShippingAddress] = useState(""); // New state for address const router = useRouter(); const { cartFn } = useContext(ProductContext); const { formatPrice } = useCurrency(); const getCart = async () => { const token = localStorage.getItem("token"); if (!token) { console.log("User not logged in, setting empty cart"); setCartItems([]); return; } try { const response = await authAxios.get("/orders/cart/"); setCartItems(response.data); } catch (error) { console.error("Error fetching cart:", error); setCartItems([]); } }; useEffect(() => { getCart(); }, []); const handleQuantityChange = async (variantId, designId, quantityChange) => { const response = await cartFn(variantId, designId, quantityChange); console.log(response) if (response?.status == 200 || response?.status == 204) { setCartItems((prev) => { if (!prev) return prev; const updatedItems = prev[0].items.map((item) => { if (item.variant.id === variantId && item?.design?.id === designId) { const updatedQuantity = item.quantity + quantityChange; const updatedTotalPrice = (item.variant.price + (item?.design?.design_price || 0)) * updatedQuantity; if (updatedQuantity <= 0) { return null; } return { ...item, quantity: updatedQuantity, total_price: updatedTotalPrice, }; } return item; }); const filteredItems = updatedItems.filter((item) => item !== null); return [ { ...prev[0], items: filteredItems, total_amount: filteredItems.reduce( (sum, item) => sum + item.total_price, 0 ), }, ]; }); } }; if (!cartItems) { return null; } if (!cartItems[0]?.items?.length) { return ; } const handleRazorpayPaymentSuccess = async (response) => { console.log("Razorpay Payment Successful", response); try { const paymentData = { paymentId: response.razorpay_payment_id, orderId: response.razorpay_order_id, signature: response.razorpay_signature, cartId: cartItems[0].id, address: response.address, }; const apiResponse = await authAxios.post("/orders/payment/", paymentData); router.push("/accounts/profile/orders"); toast.success("Your Order Is Successful!"); console.log(apiResponse); } catch (error) { console.error("Error processing Razorpay payment:", error); toast.error("Payment processing failed. Please try again."); } }; const handlePayPalPaymentSuccess = async (order) => { console.log("PayPal Payment Successful", order); try { const paymentData = { paymentId: order.id, payerEmail: order.payer.email_address, orderId: order.id, cartId: cartItems[0].id, address: order.address, }; const apiResponse = await authAxios.post("/orders/payment/", paymentData); router.push("/accounts/profile/orders"); toast.success("Your Order Is Successful!"); console.log(apiResponse); } catch (error) { console.error("Error processing PayPal payment:", error); toast.error("Payment processing failed. Please try again."); } }; if (!cartItems) { return null; } if (!cartItems[0]?.items?.length) { return ; } return (

SHOPPING CART

Price
Quantity
Total
{cartItems[0]?.items?.map((item) => (
Siddha Mala

{item.variant.product.product_name}

{item.variant.size?.size_name && (

Size: {item.variant.size.size_name}

)} {item?.design?.design_name && (

Your Design: {item.design.design_name}

)}
{formatPrice( item.variant.price + (item.design?.design_price || 0) )}
{item.quantity > 1 && ( )} {item.quantity}
{formatPrice(item.total_price)}
))}
SUBTOTAL {formatPrice(cartItems[0].total_amount)}
GRAND TOTAL {formatPrice(cartItems[0].total_amount)}
{/* Payment Component for Razorpay and PayPal */} { if (response.razorpay_payment_id) { handleRazorpayPaymentSuccess(response); } else { handlePayPalPaymentSuccess(response); } }} />
); }; export default ShoppingCart;