import BottomPopup from '@/core/components/elements/Popup/BottomPopup'; import style from '../styles/price-action.module.css'; import { Button, Link, useToast } from '@chakra-ui/react'; // import { ScaleIcon } from '@heroicons/react/24/outline'; // Tidak perlu lagi import product from 'next-seo/lib/jsonld/product'; import { useRouter } from 'next/router'; import { useEffect, useState } from 'react'; import Image from '~/components/ui/image'; import { getAuth } from '~/libs/auth'; import { upsertUserCart } from '~/services/cart'; import LazyLoad from 'react-lazy-load'; import ProductSimilar from '../../../../src/lib/product/components/ProductSimilar'; import { IProductDetail } from '~/types/product'; import ImageNext from 'next/image'; import { useProductCartContext } from '@/contexts/ProductCartContext'; import { createSlug } from '~/libs/slug'; import formatCurrency from '~/libs/formatCurrency'; import { useProductDetail } from '../stores/useProductDetail'; import useDevice from '@/core/hooks/useDevice'; import DesktopView from '@/core/components/views/DesktopView'; import MobileView from '@/core/components/views/MobileView'; type Props = { variantId: number | null; quantity?: number; source?: 'buy' | 'add_to_cart'; products: IProductDetail; onCompare?: () => void; }; type Status = 'idle' | 'loading' | 'success'; const AddToQuotation = ({ variantId, quantity = 1, source = 'add_to_cart', products, onCompare }: Props) => { const auth = getAuth(); const router = useRouter(); const toast = useToast({ position: 'top', isClosable: true, }); const { askAdminUrl } = useProductDetail(); const { isMobile, isDesktop } = useDevice(); const [product, setProducts] = useState(products); const [status, setStatus] = useState('idle'); const { productCart, setRefreshCart, setProductCart, refreshCart, isLoading, setIsloading, } = useProductCartContext(); const productSimilarQuery = [ product?.name, `fq=-product_id_i:${product.id}`, `fq=-manufacture_id_i:${product.manufacture?.id || 0}`, ].join('&'); const [addCartAlert, setAddCartAlert] = useState(false); const hasPrice = !!product?.lowest_price && Number(product.lowest_price.price) > 0; const handleButton = async () => { if (typeof auth !== 'object') { const currentUrl = encodeURIComponent(router.asPath); router.push(`/login?next=${currentUrl}`); return; } if (!variantId || isNaN(quantity) || typeof auth !== 'object') return; if (status === 'success') return; setStatus('loading'); await upsertUserCart({ userId: auth.id, type: 'product', id: variantId, qty: quantity, selected: true, source: source, 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', }); if (source === 'buy') { router.push('/shop/quotation?source=buy'); } }; useEffect(() => { if (status === 'success') setTimeout(() => { setStatus('idle'); }, 3000); }, [status]); return (
{/* 3. TAMPILAN DESKTOP: GRID 2 KOLOM (Bandingkan & Penawaran) */}
{/* Tombol Kiri: Bandingkan */} {/* Tombol Kanan: Penawaran (Link WA) */}
{/* TAMPILAN MOBILE */} { setAddCartAlert(false); }} >
{!!product.manufacture.name ? ( {product.manufacture.name} ) : ( '-' )}

{product.name}

{product.code}

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