From 0de043b180c1529b2d57d900523eece703e543a2 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Fri, 31 Mar 2023 16:39:25 +0700 Subject: cart, product --- .../product/components/Product/ProductDesktop.jsx | 74 ++++++++------- .../product/components/Product/ProductMobile.jsx | 101 +++++++-------------- 2 files changed, 77 insertions(+), 98 deletions(-) (limited to 'src/lib/product/components/Product') diff --git a/src/lib/product/components/Product/ProductDesktop.jsx b/src/lib/product/components/Product/ProductDesktop.jsx index c7554242..e0d2a959 100644 --- a/src/lib/product/components/Product/ProductDesktop.jsx +++ b/src/lib/product/components/Product/ProductDesktop.jsx @@ -3,19 +3,32 @@ import Link from '@/core/components/elements/Link/Link' import DesktopView from '@/core/components/views/DesktopView' import currencyFormat from '@/core/utils/currencyFormat' import { HeartIcon } from '@heroicons/react/24/outline' -import { useRef, useState } from 'react' +import { useCallback, useEffect, useRef, useState } from 'react' import LazyLoad from 'react-lazy-load' import ProductSimilar from '../ProductSimilar' import { toast } from 'react-hot-toast' import { updateItemCart } from '@/core/utils/cart' -import useProductPrice from '../../hooks/useProductPrice' -import PriceSkeleton from '@/core/components/elements/Skeleton/PriceSkeleton' import { useRouter } from 'next/router' import { createSlug } from '@/core/utils/slug' const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { const router = useRouter() - const { productPrice } = useProductPrice({ id: product.id }) + + const [lowestPrice, setLowestPrice] = useState(null) + + const getLowestPrice = useCallback(() => { + const prices = product.variants.map((variant) => variant.price) + const lowest = prices.reduce((lowest, price) => { + return price.priceDiscount < lowest.priceDiscount ? price : lowest + }, prices[0]) + return lowest + }, [product]) + + useEffect(() => { + const lowest = getLowestPrice() + setLowestPrice(lowest) + }, [getLowestPrice]) + const [informationTab, setInformationTab] = useState(informationTabOptions[0].value) const variantQuantityRefs = useRef([]) @@ -63,8 +76,8 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { const productSimilarQuery = [ product?.name.replace(/[()/"&]/g, ''), - `fq=-product_id:${product.id}`, - `fq=-manufacture_id:${product.manufacture?.id || 0}` + `fq=-product_id_i:${product.id}`, + `fq=-manufacture_id_i:${product.manufacture?.id || 0}` ].join('&') return ( @@ -125,33 +138,30 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { {product.variants.length > 1 && product.lowestPrice.priceDiscount > 0 && (
Harga mulai dari:
)} - {productPrice.isLoading && } - {productPrice.isFetched && ( - <> - {productPrice?.data?.discount > 0 && ( -
-
- {productPrice?.data?.discount}% -
-
- {currencyFormat(productPrice?.data?.priceExclude)} -
-
- )} -

- {productPrice?.data?.priceExcludeAfterDiscount > 0 ? ( - currencyFormat(productPrice?.data?.priceExcludeAfterDiscount) - ) : ( - - Hubungi kami untuk dapatkan harga terbaik,  - - klik disini - - - )} -

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

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

+ -

{activeVariant?.name}

- {activeVariant.id && } - {product.variants?.length > 1 && !activeVariant.id && productPrice.isLoading && ( - +

{activeVariant?.name}

+ + {product.variants.length > 1 && activeVariant.price.priceDiscount > 0 && !selectedVariant && ( +
Harga mulai dari:
)} - {product.variants?.length > 1 && !activeVariant.id && productPrice.isFetched && ( - <> -
Harga mulai dari:
- {productPrice?.data?.discount > 0 && ( -
-
- {currencyFormat(productPrice?.data?.priceExclude)} -
-
{productPrice?.data?.discount}%
-
- )} -

- {productPrice?.data?.priceExcludeAfterDiscount > 0 ? ( - currencyFormat(productPrice?.data?.priceExcludeAfterDiscount) - ) : ( - - Hubungi kami untuk dapatkan harga terbaik,  - - klik disini - - - )} -

- + + {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 + + + )} +

@@ -268,37 +268,6 @@ const ProductMobile = ({ product, wishlist, toggleWishlist }) => { ) } -const VariantPrice = ({ id }) => { - const { variantPrice } = useVariantPrice({ id }) - - if (variantPrice.isLoading) return - - return ( - <> - {variantPrice?.data?.discount > 0 && ( -
-
- {currencyFormat(variantPrice?.data?.priceExclude)} -
-
{variantPrice?.data?.discount}%
-
- )} -

- {variantPrice?.data?.priceExcludeAfterDiscount > 0 ? ( - currencyFormat(variantPrice?.data?.priceExcludeAfterDiscount) - ) : ( - - Hubungi kami untuk dapatkan harga terbaik,  - - klik disini - - - )} -

- - ) -} - const informationTabOptions = [ { value: 'specification', label: 'Spesifikasi' }, { value: 'description', label: 'Deskripsi' }, -- cgit v1.2.3