import Badge from '@/core/components/elements/Badge/Badge' import Divider from '@/core/components/elements/Divider/Divider' import Image from '@/core/components/elements/Image/Image' import Link from '@/core/components/elements/Link/Link' import currencyFormat from '@/core/utils/currencyFormat' import { useEffect, useState } from 'react' import Select from 'react-select' import ProductSimilar from './ProductSimilar' import LazyLoad from 'react-lazy-load' import { toast } from 'react-hot-toast' import { updateItemCart } from '@/core/utils/cart' import useWishlist from '@/lib/wishlist/hooks/useWishlist' import { HeartIcon } from '@heroicons/react/24/outline' import useAuth from '@/core/hooks/useAuth' import { useRouter } from 'next/router' import createOrDeleteWishlistApi from '@/lib/wishlist/api/createOrDeleteWishlistApi' const informationTabOptions = [ { value: 'specification', label: 'Spesifikasi' }, { value: 'description', label: 'Deskripsi' }, { value: 'important', label: 'Info Penting' } ] const Product = ({ product }) => { const auth = useAuth() const router = useRouter() const { wishlist } = useWishlist({ productId: product?.id }) const [quantity, setQuantity] = useState('1') const [selectedVariant, setSelectedVariant] = useState(null) const [informationTab, setInformationTab] = useState(null) const [activeVariant, setActiveVariant] = useState({ id: product.id, code: product.code, name: product.name, price: product.lowestPrice, stock: product.stockTotal, weight: product.weight }) const variantOptions = product.variants?.map((variant) => ({ value: variant.id, label: (variant.code ? `[${variant.code}] ` : '') + (variant.attributes.length > 0 ? variant.attributes.join(', ') : product.name) })) useEffect(() => { if (!selectedVariant && variantOptions.length == 1) { setSelectedVariant(variantOptions[0]) } }, [selectedVariant, variantOptions]) useEffect(() => { if (selectedVariant) { const variant = product.variants.find((variant) => variant.id == selectedVariant.value) const variantAttributes = variant.attributes.length > 0 ? ' - ' + variant.attributes.join(', ') : '' setActiveVariant({ id: variant.id, code: variant.code, name: variant.parent.name + variantAttributes, price: variant.price, stock: variant.stock, weight: variant.weight }) } }, [selectedVariant, product]) useEffect(() => { if (!informationTab) { setInformationTab(informationTabOptions[0].value) } }, [informationTab]) const validAction = () => { let isValid = true if (!selectedVariant) { toast.error('Pilih varian terlebih dahulu') isValid = false } if (!quantity || quantity < 1 || isNaN(parseInt(quantity))) { toast.error('Jumlah barang minimal 1') isValid = false } return isValid } const handleClickCart = () => { if (!validAction()) return updateItemCart({ productId: activeVariant.id, quantity }) toast.success('Berhasil menambahkan ke keranjang') } const handleClickBuy = () => { if (!validAction()) return router.push(`/shop/checkout?productId=${activeVariant.id}&quantity=${quantity}`) } const toggleWishlist = async () => { if (!auth) { router.push('/login') return } const data = { product_id: product.id } await createOrDeleteWishlistApi({ data }) if (wishlist.data.productTotal > 0) { toast.success('Berhasil menghapus dari wishlist') } else { toast.success('Berhasil menambahkan ke wishlist') } wishlist.refetch() } return ( <> {product.name}
{product.manufacture?.name ? ( {product.manufacture?.name} ) : (
-
)}

{activeVariant?.name}

{activeVariant?.price?.discountPercentage > 0 && (
{currencyFormat(activeVariant?.price?.price)}
{activeVariant?.price?.discountPercentage}%
)}

{activeVariant?.price?.priceDiscount > 0 ? ( currencyFormat(activeVariant?.price?.priceDiscount) ) : ( Hubungi kami untuk dapatkan harga terbaik,  klik disini )}

setQuantity(e.target.value)} />

Informasi Produk

{informationTabOptions.map((option) => ( setInformationTab(option.value)} > {option.label} ))}
{product?.variantTotal} Varian SKU-{product?.id} {activeVariant?.code || '-'} {activeVariant?.stock > 0 && (
Ready Stock
{activeVariant?.stock > 5 ? '> 5' : '< 5'}
)} {activeVariant?.stock == 0 && ( Tanya Stok )}
{activeVariant?.weight > 0 && {activeVariant?.weight} KG} {activeVariant?.weight == 0 && ( Tanya Berat )}

Kamu Mungkin Juga Suka

) } const TabButton = ({ children, active, ...props }) => { const activeClassName = active ? 'text-red_r-11 underline underline-offset-4' : 'text-gray_r-11' return ( ) } const TabContent = ({ children, active, className, ...props }) => (
{children}
) const SpecificationContent = ({ children, label }) => (
{label} {children}
) export default Product