import Image from '@/core/components/elements/Image/Image'
import Link from '@/core/components/elements/Link/Link'
import DesktopView from '@/core/components/views/DesktopView'
import currencyFormat from '@/core/utils/currencyFormat'
import { HeartIcon } from '@heroicons/react/24/outline'
import { useCallback, useEffect, useRef, useState } from 'react'
import LazyLoad from 'react-lazy-load'
import ProductSimilar from '../ProductSimilar'
import { toast } from 'react-hot-toast'
import { updateItemCart } from '@/core/utils/cart'
import { useRouter } from 'next/router'
import { createSlug } from '@/core/utils/slug'
import BottomPopup from '@/core/components/elements/Popup/BottomPopup'
import ProductCard from '../ProductCard'
import productSimilarApi from '../../api/productSimilarApi'
import whatsappUrl from '@/core/utils/whatsappUrl'
import useAuth from '@/core/hooks/useAuth'
import odooApi from '@/core/api/odooApi'
import { useProductCartContext } from '@/contexts/ProductCartContext'
import { Box, Skeleton, Tooltip } from '@chakra-ui/react'
import { Info } from 'lucide-react'
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}
{currencyFormat(lowestPrice?.priceDiscount * 1.11)}