import { Button, Spinner, useToast } from '@chakra-ui/react' import { CheckIcon, PlusIcon } from 'lucide-react' import { useRouter } from 'next/router' import { useEffect, useState } from 'react' import { getAuth } from '~/libs/auth' import { upsertUserCart } from '~/services/cart' import { IPromotion, IProductVariantPromo } from '~/types/promotion' import DesktopView from '../../../../src/core/components/views/DesktopView'; import MobileView from '../../../../src/core/components/views/MobileView'; import BottomPopup from '@/core/components/elements/Popup/BottomPopup' import ImageNext from 'next/image'; import Link from 'next/link' import LazyLoad from 'react-lazy-load' import ProductSimilar from '../../../../src/lib/product/components/ProductSimilar'; import { IProductDetail } from '~/types/product'; import { useProductCartContext } from '@/contexts/ProductCartContext' import { createSlug } from '~/libs/slug' import formatCurrency from '~/libs/formatCurrency' import { useProductDetail } from '../../product-detail/stores/useProductDetail'; type Props = { promotion: IPromotion product: IProductDetail variant: IProductVariantPromo, } type Status = 'idle' | 'loading' | 'success' const ProductPromoAddToCart = ({product, promotion, variant }: Props) => { const auth = getAuth() const toast = useToast() const router = useRouter() const {askAdminUrl} = useProductDetail(); const [status, setStatus] = useState('idle') const { productCart, setRefreshCart, setProductCart, refreshCart, isLoading, setIsloading } = useProductCartContext() const productSimilarQuery = [ promotion?.name, `fq=-product_id_i:${promotion.products[0].product_id}`, ].join('&'); const [addCartAlert, setAddCartAlert] = useState(false); const handleButton = async () => { if (typeof auth !== 'object') { const currentUrl = encodeURIComponent(router.asPath) router.push(`/login?next=${currentUrl}`) return } if (status === 'success') return setStatus('loading') await upsertUserCart({ userId: auth.id, type: 'promotion', id: promotion.id, qty: 1, selected: true, source: 'add_to_cart', qtyAppend: true }) setStatus('idle') setRefreshCart(true); setAddCartAlert(true); toast({ title: 'Tambah ke keranjang', description: 'Berhasil menambahkan barang ke keranjang belanja', status: 'success', duration: 3000, isClosable: true, position: 'top', }) } useEffect(() => { if (status === 'success') setTimeout(() => { setStatus('idle') }, 3000) }, [status]) return (
{ setAddCartAlert(false); }} >
{!!product?.manufacture?.name || variant?.manufacture && ( {product?.manufacture?.name ? product?.manufacture?.name : variant?.manufacture?.manufacture_name} )}

{product?.name ? product?.name : variant?.name}

{product?.code}

{(!!product?.lowest_price && product?.lowest_price?.price > 0) || variant?.price?.price > 0 && ( <>
{(product?.lowest_price?.discount_percentage > 0) || variant?.price?.discount_percentage > 0 && ( <>
{Math.floor(product?.lowest_price?.discount_percentage ? product?.lowest_price?.discount_percentage : variant?.price?.discount_percentage)}%
Rp {formatCurrency(product?.lowest_price?.price ? product?.lowest_price?.price || 0 : variant?.price?.price || 0)}
)}
Rp {formatCurrency(product?.lowest_price?.price_discount? product?.lowest_price?.price_discount || 0 : variant?.price?.price_discount)}
)} {(!!product?.lowest_price && product?.lowest_price?.price === 0) || variant?.price?.price === 0 && ( Hubungi kami untuk dapatkan harga terbaik,{' '} klik disini )}
Lihat Keranjang
Kamu Mungkin Juga Suka
) } export default ProductPromoAddToCart