import { Box, Skeleton, Tooltip } from '@chakra-ui/react'; import { HeartIcon } from '@heroicons/react/24/outline'; import { Info } from 'lucide-react'; import { useRouter } from 'next/router'; import { useCallback, useEffect, useRef, useState } from 'react'; import { toast } from 'react-hot-toast'; import LazyLoad from 'react-lazy-load'; import { useProductCartContext } from '@/contexts/ProductCartContext'; import odooApi from '@/core/api/odooApi'; import Image from '@/core/components/elements/Image/Image'; import Link from '@/core/components/elements/Link/Link'; import BottomPopup from '@/core/components/elements/Popup/BottomPopup'; import DesktopView from '@/core/components/views/DesktopView'; import useAuth from '@/core/hooks/useAuth'; import { updateItemCart } from '@/core/utils/cart'; import currencyFormat from '@/core/utils/currencyFormat'; import { createSlug } from '@/core/utils/slug'; import whatsappUrl from '@/core/utils/whatsappUrl'; import productSimilarApi from '../../api/productSimilarApi'; import ProductCard from '../ProductCard'; import ProductSimilar from '../ProductSimilar'; const ProductDesktopVariant = ({ product, wishlist, toggleWishlist, isVariant, }) => { const router = useRouter(); const auth = useAuth(); const { slug } = router.query; const [lowestPrice, setLowestPrice] = useState(null); const [addCartAlert, setAddCartAlert] = useState(false); const [isLoadingSLA, setIsLoadingSLA] = useState(true); const { setRefreshCart } = useProductCartContext(); const getLowestPrice = useCallback(() => { const lowest = product.price; /* const lowest = prices.reduce((lowest, price) => { return price.priceDiscount < lowest.priceDiscount ? price : lowest }, prices[0])*/ return lowest; }, [product]); useEffect(() => { const lowest = getLowestPrice(); setLowestPrice(lowest); }, [getLowestPrice]); const [informationTab, setInformationTab] = useState( informationTabOptions[0].value ); const variantQuantityRefs = useRef([]); const setVariantQuantityRef = (variantId) => (element) => { variantQuantityRefs.current[variantId] = element; }; const validQuantity = (quantity) => { let isValid = true; if (!quantity || quantity < 1 || isNaN(parseInt(quantity))) { toast.error('Jumlah barang minimal 1'); isValid = false; } return isValid; }; const handleAddToCart = (variant) => { if (!auth) { router.push(`/login?next=/shop/product/${slug}`); return; } const quantity = variantQuantityRefs.current[product.id].value; if (!validQuantity(quantity)) return; updateItemCart({ productId: product.id, quantity, programLineId: null, selected: true, source: null, }).then(() => { setRefreshCart(true); }); setAddCartAlert(true); }; const handleBuy = (variant) => { const quantity = variantQuantityRefs.current[product.id].value; if (!validQuantity(quantity)) return; updateItemCart({ productId: variant, quantity, programLineId: null, selected: true, source: 'buy', }); router.push(`/shop/checkout?source=buy`); }; const variantSectionRef = useRef(null); const goToVariantSection = () => { if (variantSectionRef.current) { const position = variantSectionRef.current.getBoundingClientRect(); window.scrollTo({ top: position.top - 120 + window.pageYOffset, behavior: 'smooth', }); } }; const productSimilarQuery = [ product?.name, `fq=-product_id_i:${product.id}`, `fq=-manufacture_id_i:${product.manufacture?.id || 0}`, ].join('&'); const [productSimilarInBrand, setProductSimilarInBrand] = useState(null); useEffect(() => { const loadProductSimilarInBrand = async () => { const productSimilarQuery = [ product?.name, `fq=-product_id_i:${product.id}`, ].join('&'); const dataProductSimilar = await productSimilarApi({ query: productSimilarQuery, }); setProductSimilarInBrand(dataProductSimilar.products); }; if (!productSimilarInBrand) loadProductSimilarInBrand(); }, [product, productSimilarInBrand]); useEffect(() => { const fetchData = async () => { const dataSLA = await odooApi( 'GET', `/api/v1/product_variant/${product.id}/stock` ); product.sla = dataSLA; setIsLoadingSLA(false); }; fetchData(); }, [product]); return (
{product.name}

{product?.name}

Nomor SKU
SKU-{product.id}
Part Number
{product.code || '-'}
Manufacture
{product.manufacture?.name ? ( {product.manufacture?.name} ) : (
-
)}
Persiapan Barang
{!product?.sla && } {product?.sla && ( {product?.sla?.slaDate} )}
Stock
{!product?.sla && } {product?.sla?.qty > 0 && {product?.sla?.qty}} {product?.sla?.qty == 0 && ( Tanya Admin )}
Berat Barang
{product?.weight > 0 && {product?.weight} KG} {product?.weight == 0 && ( Tanya Berat )}

Informasi Produk


' ? 'Belum ada deskripsi' : product.parent.description, }} />
{product?.isFlashsale > 0 && product?.price?.discountPercentage > 0 ? ( <>
{product?.price?.discountPercentage}%
{currencyFormat(product?.price?.price)}
{currencyFormat(product?.price?.priceDiscount)}
Termasuk PPN:{' '} {currencyFormat( product?.price?.priceDiscount * process.env.NEXT_PUBLIC_PPN )}
) : (

{product?.price?.price > 0 ? ( <> {currencyFormat(product?.price?.price)}
Termasuk PPN:{' '} {currencyFormat( product?.price?.price * process.env.NEXT_PUBLIC_PPN )}
) : ( Hubungi kami untuk dapatkan harga terbaik,  klik disini )}

)}
Produk Serupa
{productSimilarInBrand && productSimilarInBrand?.map((product) => (
))}
Kamu Mungkin Juga Suka
setAddCartAlert(false)} >
{product.name}
{product.name}
Lihat Keranjang
Kamu Mungkin Juga Suka
); }; const informationTabOptions = [ { value: 'description', label: 'Deskripsi' }, { value: 'information', label: 'Info Penting' }, ]; const TabButton = ({ children, active, ...props }) => { const activeClassName = active ? 'text-danger-500 underline underline-offset-4' : 'text-gray_r-12/80'; return ( ); }; const TabContent = ({ children, active, className = '', ...props }) => (
{children}
); export default ProductDesktopVariant;