From 3b19ddcd0051f094b4659a35107646d678c2fd0c Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Tue, 14 Mar 2023 17:18:16 +0700 Subject: product detail --- src/lib/product/components/Product.jsx | 300 +-------------------------------- 1 file changed, 5 insertions(+), 295 deletions(-) (limited to 'src/lib/product/components/Product.jsx') diff --git a/src/lib/product/components/Product.jsx b/src/lib/product/components/Product.jsx index ae476b80..d1586ef9 100644 --- a/src/lib/product/components/Product.jsx +++ b/src/lib/product/components/Product.jsx @@ -1,105 +1,15 @@ -import Badge from '@/core/components/elements/Badge/Badge' -import Divider from '@/core/components/elements/Divider/Divider' -import Image from '@/core/components/elements/Image/Image' -import Link from '@/core/components/elements/Link/Link' -import currencyFormat from '@/core/utils/currencyFormat' -import { useEffect, useState } from 'react' -import Select from 'react-select' -import ProductSimilar from './ProductSimilar' -import LazyLoad from 'react-lazy-load' import { toast } from 'react-hot-toast' -import { updateItemCart } from '@/core/utils/cart' import useWishlist from '@/lib/wishlist/hooks/useWishlist' -import { HeartIcon } from '@heroicons/react/24/outline' +import createOrDeleteWishlistApi from '@/lib/wishlist/api/createOrDeleteWishlistApi' +import ProductDesktop from './ProductDesktop' import useAuth from '@/core/hooks/useAuth' +import ProductMobile from './ProductMobile' import { useRouter } from 'next/router' -import createOrDeleteWishlistApi from '@/lib/wishlist/api/createOrDeleteWishlistApi' - -const informationTabOptions = [ - { value: 'specification', label: 'Spesifikasi' }, - { value: 'description', label: 'Deskripsi' }, - { value: 'important', label: 'Info Penting' } -] const Product = ({ product }) => { const auth = useAuth() const router = useRouter() const { wishlist } = useWishlist({ productId: product?.id }) - const [quantity, setQuantity] = useState('1') - const [selectedVariant, setSelectedVariant] = useState(null) - const [informationTab, setInformationTab] = useState(null) - - const [activeVariant, setActiveVariant] = useState({ - id: product.id, - code: product.code, - name: product.name, - price: product.lowestPrice, - stock: product.stockTotal, - weight: product.weight - }) - - const variantOptions = product.variants?.map((variant) => ({ - value: variant.id, - label: - (variant.code ? `[${variant.code}] ` : '') + - (variant.attributes.length > 0 ? variant.attributes.join(', ') : product.name) - })) - - useEffect(() => { - if (!selectedVariant && variantOptions.length == 1) { - setSelectedVariant(variantOptions[0]) - } - }, [selectedVariant, variantOptions]) - - useEffect(() => { - if (selectedVariant) { - const variant = product.variants.find((variant) => variant.id == selectedVariant.value) - const variantAttributes = - variant.attributes.length > 0 ? ' - ' + variant.attributes.join(', ') : '' - - setActiveVariant({ - id: variant.id, - code: variant.code, - name: variant.parent.name + variantAttributes, - price: variant.price, - stock: variant.stock, - weight: variant.weight - }) - } - }, [selectedVariant, product]) - - useEffect(() => { - if (!informationTab) { - setInformationTab(informationTabOptions[0].value) - } - }, [informationTab]) - - const validAction = () => { - let isValid = true - if (!selectedVariant) { - toast.error('Pilih varian terlebih dahulu') - isValid = false - } - if (!quantity || quantity < 1 || isNaN(parseInt(quantity))) { - toast.error('Jumlah barang minimal 1') - isValid = false - } - return isValid - } - - const handleClickCart = () => { - if (!validAction()) return - updateItemCart({ - productId: activeVariant.id, - quantity - }) - toast.success('Berhasil menambahkan ke keranjang') - } - - const handleClickBuy = () => { - if (!validAction()) return - router.push(`/shop/checkout?productId=${activeVariant.id}&quantity=${quantity}`) - } const toggleWishlist = async () => { if (!auth) { @@ -118,210 +28,10 @@ const Product = ({ product }) => { return ( <> - {product.name} - -
-
- {product.manufacture?.name ? ( - {product.manufacture?.name} - ) : ( -
-
- )} - -
-

{activeVariant?.name}

- {activeVariant?.price?.discountPercentage > 0 && ( -
-
- {currencyFormat(activeVariant?.price?.price)} -
- {activeVariant?.price?.discountPercentage}% -
- )} -

- {activeVariant?.price?.priceDiscount > 0 ? ( - currencyFormat(activeVariant?.price?.priceDiscount) - ) : ( - - Hubungi kami untuk dapatkan harga terbaik,  - - klik disini - - - )} -

-
- - - -
-
- - setQuantity(e.target.value)} - /> -
- - -
- - - - -
-

Informasi Produk

-
- {informationTabOptions.map((option) => ( - setInformationTab(option.value)} - > - {option.label} - - ))} -
- - - - {product?.variantTotal} Varian - - - SKU-{product?.id} - - - {activeVariant?.code || '-'} - - - {activeVariant?.stock > 0 && ( - -
Ready Stock
-
{activeVariant?.stock > 5 ? '> 5' : '< 5'}
-
- )} - {activeVariant?.stock == 0 && ( - - Tanya Stok - - )} -
- - {activeVariant?.weight > 0 && {activeVariant?.weight} KG} - {activeVariant?.weight == 0 && ( - - Tanya Berat - - )} - -
- - -
- - - -
-

Kamu Mungkin Juga Suka

- - - -
+ + ) } -const TabButton = ({ children, active, ...props }) => { - const activeClassName = active ? 'text-red_r-11 underline underline-offset-4' : 'text-gray_r-11' - return ( - - ) -} - -const TabContent = ({ children, active, className, ...props }) => ( -
- {children} -
-) - -const SpecificationContent = ({ children, label }) => ( -
- {label} - {children} -
-) - export default Product -- cgit v1.2.3