import style from '../styles/product-card.module.css'; import ImageNext from 'next/image'; import clsx from 'clsx'; import Link from 'next/link'; import React, { useEffect, useMemo, useState } from 'react'; import Image from '~/components/ui/image'; import useUtmSource from '~/hooks/useUtmSource'; import clsxm from '~/libs/clsxm'; import formatCurrency from '~/libs/formatCurrency'; import { formatToShortText } from '~/libs/formatNumber'; import { createSlug } from '~/libs/slug'; import { IProduct } from '~/types/product'; import useDevice from '@/core/hooks/useDevice'; type Props = { product: IProduct; layout?: 'vertical' | 'horizontal'; }; const PPN : number = process.env.NEXT_PUBLIC_PPN ? parseFloat(process.env.NEXT_PUBLIC_PPN) : 0; const ProductCard = ({ product, layout = 'vertical' }: Props) => { const utmSource = useUtmSource(); const { isDesktop, isMobile } = useDevice(); const URL = { product: createSlug('/shop/product/', product.name, product.id.toString()) + `?utm_source=${utmSource}`, manufacture: createSlug( '/shop/brands/', product.manufacture.name, product.manufacture.id.toString() ), }; const image = useMemo(() => { if (!isDesktop && product.image_mobile) { return product.image_mobile + '?ratio=square'; } else { if (product.image) return product.image + '?ratio=square'; return '/images/noimage.jpeg'; } }, [product.image, product.image_mobile]); return (
{product.name}
{product.isSni && ( )}
{product.isTkdn && ( )}
{product.variant_total > 1 && (
{product.variant_total} Varian
)}
{product.manufacture.name}
{product.name}
Rp {formatCurrency(product.lowest_price.price)}
Inc PPN: Rp{' '} {formatCurrency(Math.round(product.lowest_price.price * PPN))}
{product.stock_total > 0 && (
Ready Stock
)} {product.qty_sold > 0 && (
{formatToShortText(product.qty_sold)} Terjual
)}
); }; const classPrefix = ({ layout }: Props) => {}; export default ProductCard;