diff options
Diffstat (limited to 'src/lib/product/components/ProductCard.jsx')
| -rw-r--r-- | src/lib/product/components/ProductCard.jsx | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/lib/product/components/ProductCard.jsx b/src/lib/product/components/ProductCard.jsx new file mode 100644 index 00000000..86ac3a64 --- /dev/null +++ b/src/lib/product/components/ProductCard.jsx @@ -0,0 +1,68 @@ +import Image from "@/core/components/elements/Image/Image" +import Link from "@/core/components/elements/Link/Link" +import currencyFormat from "@/core/utils/currencyFormat" +import { createSlug } from "@/core/utils/slug" + +const ProductCard = ({ product, simpleTitle }) => { + return ( + <> + <div className="rounded shadow-sm border border-gray_r-4"> + <Link + href={createSlug('/shop/product/', product?.name, product?.id)} + className="border-b border-gray_r-4 relative" + > + <Image + src={product?.image} + alt={product?.name} + className="w-full object-contain object-center h-36 bg-white" + /> + { product.variantTotal > 1 && ( + <div className="absolute badge-gray bottom-1.5 left-1.5">{ product.variantTotal } Varian</div> + ) } + </Link> + <div className="p-2 pb-3 text-caption-2 leading-5 bg-white"> + <Link + href={createSlug('/shop/brands/', product?.manufacture?.name, product?.manufacture.id)} + className="mb-1" + > + {product?.manufacture?.name} + </Link> + <Link + href={createSlug('/shop/product/', product?.name, product?.id)} + className={`font-medium mb-2 !text-gray_r-12 ${simpleTitle ? 'line-clamp-2' : 'line-clamp-3'}`} + > + {product?.name} + </Link> + { product?.lowestPrice?.discountPercentage > 0 && ( + <div className="flex gap-x-1 mb-1 items-center"> + <div className="text-gray_r-11 line-through text-[11px]"> + {currencyFormat(product?.lowestPrice?.price)} + </div> + <div className="badge-solid-red"> + {product?.lowestPrice?.discountPercentage}% + </div> + </div> + ) } + + <div className="text-red_r-11 font-semibold mb-2"> + { product?.lowestPrice?.priceDiscount > 0 ? currencyFormat(product?.lowestPrice?.priceDiscount) : ( + <a href="https://wa.me/">Call for price</a> + ) } + </div> + { product?.stockTotal > 0 && ( + <div className="flex gap-x-1"> + <div className="badge-solid-red"> + Ready Stock + </div> + <div className="badge-gray"> + { product?.stockTotal > 5 ? '> 5' : '< 5' } + </div> + </div> + ) } + </div> + </div> + </> + ) +} + +export default ProductCard
\ No newline at end of file |
