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"
const informationTabOptions = [
{ value: 'specification', label: 'Spesifikasi' },
{ value: 'description', label: 'Deskripsi' },
{ value: 'important', label: 'Info Penting' },
]
const Product = ({ product }) => {
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 handleClickCart = () => {
if (!selectedVariant) {
toast.error('Pilih varian terlebih dahulu')
return
}
if (!quantity || quantity < 1 || isNaN(parseInt(quantity))) {
toast.error('Jumlah barang minimal 1')
return
}
updateItemCart({
productId: activeVariant.id,
quantity
})
toast.success('Berhasil menambahkan ke keranjang')
}
return (
<>