summaryrefslogtreecommitdiff
path: root/src2/components/variants/VariantCard.js
diff options
context:
space:
mode:
Diffstat (limited to 'src2/components/variants/VariantCard.js')
-rw-r--r--src2/components/variants/VariantCard.js92
1 files changed, 92 insertions, 0 deletions
diff --git a/src2/components/variants/VariantCard.js b/src2/components/variants/VariantCard.js
new file mode 100644
index 00000000..a821480c
--- /dev/null
+++ b/src2/components/variants/VariantCard.js
@@ -0,0 +1,92 @@
+import { createSlug } from "@/core/utils/slug";
+import Image from "../elements/Image";
+import Link from "../elements/Link";
+import currencyFormat from "@/core/utils/currencyFormat";
+import { useRouter } from "next/router";
+import { toast } from "react-hot-toast";
+import { createOrUpdateItemCart } from "@/core/utils/cart";
+
+export default function VariantCard({
+ data,
+ openOnClick = true,
+ buyMore = false
+}) {
+ let product = data;
+ const router = useRouter();
+
+ const addItemToCart = () => {
+ toast.success('Berhasil menambahkan ke keranjang', { duration: 1500 });
+ createOrUpdateItemCart(product.id, 1);
+ return;
+ };
+
+ const checkoutItem = () => {
+ router.push(`/shop/checkout?product_id=${product.id}&qty=${product.quantity}`);
+ }
+
+ const Card = () => (
+ <div className="flex gap-x-3">
+ <div className="w-4/12 flex items-center gap-x-2">
+ <Image
+ src={product.parent.image}
+ alt={product.parent.name}
+ className="object-contain object-center border border-gray_r-6 h-32 w-full rounded-md"
+ />
+ </div>
+ <div className="w-8/12 flex flex-col">
+ <p className="product-card__title wrap-line-ellipsis-2">
+ {product.parent.name}
+ </p>
+ <p className="text-caption-2 text-gray_r-11 mt-1">
+ {product.code || '-'}
+ {product.attributes.length > 0 ? ` ・ ${product.attributes.join(', ')}` : ''}
+ </p>
+ <div className="flex flex-wrap gap-x-1 items-center mt-auto">
+ {product.price.discount_percentage > 0 && (
+ <>
+ <p className="text-caption-2 text-gray_r-11 line-through">{currencyFormat(product.price.price)}</p>
+ <span className="badge-red">{product.price.discount_percentage}%</span>
+ </>
+ )}
+ <p className="text-caption-2 text-gray_r-12">{currencyFormat(product.price.price_discount)}</p>
+ </div>
+ <p className="text-caption-2 text-gray_r-11 mt-1">
+ {currencyFormat(product.price.price_discount)} × {product.quantity} Barang
+ </p>
+ <p className="text-caption-2 text-gray_r-12 font-bold mt-2">
+ {currencyFormat(product.quantity * product.price.price_discount)}
+ </p>
+ </div>
+ </div>
+ );
+
+ if (openOnClick) {
+ return (
+ <>
+ <Link href={'/shop/product/' + createSlug(product.parent.name, product.parent.id)}>
+ <Card />
+ </Link>
+ { buyMore && (
+ <div className="flex justify-end gap-x-2 mb-2">
+ <button
+ type="button"
+ onClick={addItemToCart}
+ className="btn-yellow text-gray_r-12 py-2 px-3"
+ >
+ Tambah Keranjang
+ </button>
+ <button
+ type="button"
+ onClick={checkoutItem}
+ className="btn-solid-red py-2 px-3"
+ >
+ Beli Lagi
+ </button>
+ </div>
+ ) }
+ </>
+ );
+ }
+
+ return <Card/>;
+} \ No newline at end of file