summaryrefslogtreecommitdiff
path: root/src/lib/product/components/ProductCard.jsx
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-02-17 17:07:50 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-02-17 17:07:50 +0700
commitf99e0aba70efad0deb907d8e27f09fc9f527c8a4 (patch)
treef0ac96e4e736a1d385e32553f0e641ee27e11fd3 /src/lib/product/components/ProductCard.jsx
parent90e1edab9b6a8ccc09a49fed3addbec2cbc4e4c3 (diff)
Refactor
Diffstat (limited to 'src/lib/product/components/ProductCard.jsx')
-rw-r--r--src/lib/product/components/ProductCard.jsx68
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