import style from '../styles/price-action.module.css'; import Image from 'next/image'; import Link from 'next/link'; import { useEffect, useState } from 'react'; import formatCurrency from '~/libs/formatCurrency'; import { IProductDetail } from '~/types/product'; import { useProductDetail } from '../stores/useProductDetail'; import AddToCart from './AddToCart'; import AddToQuotation from './AddToQuotation'; import { getAuth } from '~/libs/auth'; import useDevice from '@/core/hooks/useDevice'; import odooApi from '~/libs/odooApi'; import { Button, Skeleton } from '@chakra-ui/react'; import DesktopView from '@/core/components/views/DesktopView'; import MobileView from '@/core/components/views/MobileView'; type Props = { product: IProductDetail; }; const PPN: number = process.env.NEXT_PUBLIC_PPN ? parseFloat(process.env.NEXT_PUBLIC_PPN) : 0; const PriceAction = ({ product }: Props) => { const { activePrice, setActive, activeVariantId, quantityInput, setQuantityInput, askAdminUrl, isApproval, setIsApproval, selectedVariant, sla, } = useProductDetail(); const [qtyPickUp, setQtyPickUp] = useState(0); const { isDesktop, isMobile } = useDevice(); useEffect(() => { setActive(selectedVariant); if (product.variants.length > 2 && product.variants[0].price.price === 0) { const variants = product.variants; for (let i = 0; i < variants.length; i++) { if (variants[i].price.price > 0) { setActive(variants[i]); break; } } } }, [product, setActive, selectedVariant]); useEffect(() => { const fetchData = async () => { const qty_available = await odooApi( 'GET', `/api/v1/product_variant/${selectedVariant.id}/qty_available` ); setQtyPickUp(qty_available?.qty); }; fetchData(); }, [selectedVariant]); useEffect(() => { setQuantityInput('1'); }, [selectedVariant]); let voucherPastiHemat = 0; if ( product?.voucher_pasti_hemat ? product?.voucher_pasti_hemat.length : voucherPastiHemat > 0 ) { const stringVoucher = product?.voucher_pasti_hemat[0]; const validJsonString = stringVoucher.replace(/'/g, '"'); voucherPastiHemat = JSON.parse(validJsonString); } return (
{!!activePrice && activePrice.price > 0 && ( <>
{activePrice.discount_percentage > 0 && ( <>
{Math.floor(activePrice.discount_percentage)}%
Rp {formatCurrency(activePrice.price || 0)}
)}
Rp {formatCurrency(activePrice.price_discount || 0)}
Termasuk PPN: Rp{' '} {formatCurrency(Math.round(activePrice.price_discount * PPN))}
{activePrice.discount_percentage > 0 ? ( <>
{Math.floor(activePrice.discount_percentage)}%
{/* harga setelah diskon (main-price) di kiri */}
Rp {formatCurrency(activePrice.price_discount || 0)}
{/* harga coret di kanan */}
Rp {formatCurrency(activePrice.price || 0)}
) : ( // kalau tidak ada diskon, tampilkan harga normal saja
Rp {formatCurrency(activePrice.price || 0)}
)}
Termasuk PPN: Rp{' '} {formatCurrency(Math.round(activePrice.price_discount * PPN))}
)} {!!activePrice && activePrice.price === 0 && ( Hubungi kami untuk dapatkan harga terbaik,{' '} klik disini )}
{/* Qty */}
setQuantityInput(e.target.value)} className={style['quantity-input']} />
{/* Stok */}
Stock : {sla?.qty}{' '}
{/* Pickup badge */}
{qtyPickUp > 0 && (
pickup now
)}
* {qtyPickUp} barang bisa di pickup {/* ===== MOBILE: grid kiri-kanan, kanan hanya qty ===== */}
{/* Kiri */}
Stock : {sla?.qty} {qtyPickUp > 0 && ( pickup now )}
{qtyPickUp > 0 && (
* {qtyPickUp} barang bisa di pickup
)}
{/* Kanan: hanya qty, rata kanan */}
setQuantityInput(e.target.value)} className='h-11 md:h-12 w-16 md:w-20 text-center text-lg md:text-xl outline-none border-x [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none' />
{!isApproval && ( )}
{!isApproval && ( )}
); }; export default PriceAction;