import { useCallback, useEffect, useMemo, useState } from 'react'; import { getCartApi } from '../api/CartApi'; import currencyFormat from '@/core/utils/currencyFormat'; import { createSlug } from '@/core/utils/slug'; import useAuth from '@/core/hooks/useAuth'; import { useRouter } from 'next/router'; import odooApi from '@/core/api/odooApi'; import { useProductCartContext } from '@/contexts/ProductCartContext'; import Image from '@/core/components/elements/Image/Image'; import whatsappUrl from '@/core/utils/whatsappUrl'; import { AnimatePresence, motion } from 'framer-motion'; import style from '../../../../src-migrate/modules/cart/styles/item-promo.module.css'; const { ShoppingCartIcon, PhotoIcon } = require('@heroicons/react/24/outline'); const { default: Link } = require('next/link'); const Cardheader = (cartCount) => { const PPN = process.env.NEXT_PUBLIC_PPN const router = useRouter(); const [subTotal, setSubTotal] = useState(null); const [buttonLoading, SetButtonTerapkan] = useState(false); const itemLoading = [1, 2, 3]; const auth = useAuth(); const [countCart, setCountCart] = useState(null); const { productCart, setRefreshCart, setProductCart, refreshCart, isLoading, setIsloading, } = useProductCartContext(); const [isHovered, setIsHovered] = useState(false); const [isTop, setIsTop] = useState(true); const products = useMemo(() => { return productCart?.products || []; }, [productCart]); const handleMouseEnter = () => { setIsHovered(true); getCart(); }; const handleMouseLeave = () => { setIsHovered(false); }; const getCart = () => { if (!productCart && auth) { refreshCartf(); } }; const refreshCartf = useCallback(async () => { setIsloading(true); let cart = await getCartApi(); setProductCart(cart); setCountCart(cart?.products?.length); setIsloading(false); }, [setProductCart, setIsloading]); useEffect(() => { if (!products) return; let calculateTotalPriceBeforeTax = 0; let calculateTotalTaxAmount = 0; let calculateTotalDiscountAmount = 0; for (const product of products) { if (product.quantity == '') continue; let priceBeforeTax = product.price.price / PPN; calculateTotalPriceBeforeTax += priceBeforeTax * product.quantity; calculateTotalTaxAmount += (product.price.price - priceBeforeTax) * product.quantity; calculateTotalDiscountAmount += (product.price.price - product.price.priceDiscount) * product.quantity; } let subTotal = calculateTotalPriceBeforeTax - calculateTotalDiscountAmount + calculateTotalTaxAmount; setSubTotal(subTotal); }, [products]); useEffect(() => { if (refreshCart) { refreshCartf(); } setRefreshCart(false); }, [refreshCart, refreshCartf, setRefreshCart]); useEffect(() => { setCountCart(cartCount.cartCount); setRefreshCart(false); }, [cartCount]); useEffect(() => { const handleScroll = () => { setIsTop(window.scrollY === 0); }; window.addEventListener('scroll', handleScroll); return () => { window.removeEventListener('scroll', handleScroll); }; }, []); const handleCheckout = async () => { SetButtonTerapkan(true); let checkoutAll = await odooApi( 'POST', `/api/v1/user/${auth.id}/cart/select-all` ); router.push('/shop/checkout'); }; return (
0 && 'mr-2'}`}> {countCart > 0 && ( {countCart} )}
Keranjang
Belanja
{isHovered && ( <>
Keranjang Belanja
Lihat Semua

{!auth && (

Silahkan{' '} Login {' '} Untuk Melihat Daftar Keranjang Belanja Anda

)} {isLoading && itemLoading.map((item) => (
))} {auth && products.length === 0 && !isLoading && (

Tidak Ada Produk di Keranjang Belanja Anda

)} {auth && products.length > 0 && !isLoading && ( <>
    {products && products?.map((product, index) => ( <>
  • {product.cartType === 'promotion' && ( {product.name} )} {product.cartType === 'product' && ( {product?.name} )}
    {product.cartType === 'promotion' && (

    {product.name}

    )} {product.cartType === 'product' && ( {' '}

    {product.parent.name}

    )} {product?.hasFlashsale && (
    {product?.price?.discountPercentage}%
    {currencyFormat( product?.price?.price )}
    )}
    {product?.price?.priceDiscount > 0 ? ( currencyFormat( product?.price?.priceDiscount ) ) : ( Call For Price )}
    {product.products?.map((product) => (
    {product?.image && ( {product.name} )}
    {product.displayName}
    {/*
    {product.code}
    */}
    Berat Barang:{' '} {product.packageWeight} Kg
    ))} {product.freeProducts?.map((product) => (
    {product?.image && ( {product.name} )}
    {product.displayName}
    {/*
    {product.code}
    */}
    Berat Barang:{' '} {product.packageWeight} Kg
    ))}
  • ))}

)}
{auth && products.length > 0 && !isLoading && ( <>
Subtotal Sebelum PPN :{' '} {currencyFormat(subTotal)}
)}
)}
); }; export default Cardheader;