diff options
| author | HATEC\SPVDEV001 <tri.susilo@altama.co.id> | 2023-08-01 17:07:20 +0700 |
|---|---|---|
| committer | HATEC\SPVDEV001 <tri.susilo@altama.co.id> | 2023-08-01 17:07:20 +0700 |
| commit | 942b4c3548891f25198140b80192e9190a403ee5 (patch) | |
| tree | f1f4d7ca6d7ff998179cb72e1814b7f65d9b56fe /src | |
| parent | e1c6052ffc9887e792f19f99d900189647845c69 (diff) | |
flash sale
Diffstat (limited to 'src')
| -rw-r--r-- | src/api/productApi.js | 16 | ||||
| -rw-r--r-- | src/core/components/layouts/BasicLayout.jsx | 1 | ||||
| -rw-r--r-- | src/lib/product/api/productSimilarApi.js | 20 | ||||
| -rw-r--r-- | src/lib/product/components/Product/ProductDesktop.jsx | 34 | ||||
| -rw-r--r-- | src/lib/product/components/ProductCard.jsx | 7 | ||||
| -rw-r--r-- | src/lib/product/components/ProductSimilar.jsx | 3 | ||||
| -rw-r--r-- | src/lib/product/hooks/useProductSimilar.js | 5 |
7 files changed, 55 insertions, 31 deletions
diff --git a/src/api/productApi.js b/src/api/productApi.js index 6d043172..feb91257 100644 --- a/src/api/productApi.js +++ b/src/api/productApi.js @@ -1,26 +1,10 @@ -import odooApi from '@/core/api/odooApi' -import productSearchApi from '@/lib/product/api/productSearchApi' import axios from 'axios' -import { useState } from 'react' export const popularProductApi = () => { - let dataFlashSale = null return async () => { - const flashSale = await odooApi('GET', '/api/v1/flashsale/header') - if(flashSale){ - const dataProducts = await productSearchApi({ - query: `fq=flashsale_id_i:${flashSale[0].pricelistId}&fq=flashsale_price_f:[1 TO *]&limit=2`, - operation: 'AND' - }) - dataFlashSale = dataProducts.response.products - } const dataPopularProducts = await axios( `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/search?q=*&page=1&orderBy=popular-weekly` ) - dataPopularProducts.data.response.products = [ - ...dataFlashSale, - ...dataPopularProducts.data.response.products, - ]; return dataPopularProducts.data.response } } diff --git a/src/core/components/layouts/BasicLayout.jsx b/src/core/components/layouts/BasicLayout.jsx index 073303fe..c6029f39 100644 --- a/src/core/components/layouts/BasicLayout.jsx +++ b/src/core/components/layouts/BasicLayout.jsx @@ -37,7 +37,6 @@ const BasicLayout = ({ children }) => { const { slug } = router.query const getProduct = async () => { let product = await productApi({ id: getIdFromSlug(slug), headers: { Token: authToken } }) - console.log('ini product', product) setPayloadWa({ name: product[0]?.name, manufacture: product[0]?.manufacture.name, diff --git a/src/lib/product/api/productSimilarApi.js b/src/lib/product/api/productSimilarApi.js index 2470937d..f9599e86 100644 --- a/src/lib/product/api/productSimilarApi.js +++ b/src/lib/product/api/productSimilarApi.js @@ -2,21 +2,27 @@ import odooApi from '@/core/api/odooApi' import axios from 'axios' import productSearchApi from './productSearchApi' -const productSimilarApi = async ({ query }) => { - let dataFlashSale = null +const productSimilarApi = async ({ query, source }) => { + let dataflashSale = null const flashSale = await odooApi('GET', '/api/v1/flashsale/header') - if(flashSale){ - const dataProducts = await productSearchApi({ - query: `fq=flashsale_id_i:${flashSale[0].pricelistId}&fq=flashsale_price_f:[1 TO *]&limit=2`, + if (flashSale && flashSale.length > 0) { + const dataFlash = await productSearchApi({ + query: `fq=flashsale_id_i:${flashSale[0].pricelistId}&fq=flashsale_price_f:[1 TO *]&limit=${ + source === 'bottom' ? '4' : '2' + }`, operation: 'AND' }) - dataFlashSale = dataProducts.response.products + if (source === 'bottom') { + dataflashSale = dataFlash.response.products.slice('2', '4') + } else { + dataflashSale = dataFlash.response.products + } } const dataProductSimilar = await axios( `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/search?q=${query}&page=1&orderBy=popular-weekly&operation=OR` ) dataProductSimilar.data.response.products = [ - ...dataFlashSale, + ...dataflashSale, ...dataProductSimilar.data.response.products, ]; return dataProductSimilar.data.response diff --git a/src/lib/product/components/Product/ProductDesktop.jsx b/src/lib/product/components/Product/ProductDesktop.jsx index 7e1d0d3b..e13e2ab1 100644 --- a/src/lib/product/components/Product/ProductDesktop.jsx +++ b/src/lib/product/components/Product/ProductDesktop.jsx @@ -18,8 +18,10 @@ import odooApi from '@/core/api/odooApi' import { Button, Spinner } from 'flowbite-react' import PromotionType from '@/lib/promotinProgram/components/PromotionType' import useAuth from '@/core/hooks/useAuth' +import ImageNext from 'next/image' const ProductDesktop = ({ products, wishlist, toggleWishlist }) => { + console.log('ini product', products) const router = useRouter() const auth = useAuth() const { slug } = router.query @@ -96,7 +98,7 @@ const ProductDesktop = ({ products, wishlist, toggleWishlist }) => { router.push(`/login?next=/shop/product/${slug}`) return } - + const quantity = variantQuantityRefs.current[variantId].value if (!validQuantity(quantity)) return @@ -142,7 +144,8 @@ const ProductDesktop = ({ products, wishlist, toggleWishlist }) => { useEffect(() => { const loadProductSimilarInBrand = async () => { const productSimilarQuery = [product?.name, `fq=-product_id_i:${product.id}`].join('&') - const dataProductSimilar = await productSimilarApi({ query: productSimilarQuery }) + const source = 'right' + const dataProductSimilar = await productSimilarApi({ query: productSimilarQuery, source }) setProductSimilarInBrand(dataProductSimilar.products) } if (!productSimilarInBrand) loadProductSimilarInBrand() @@ -170,7 +173,22 @@ const ProductDesktop = ({ products, wishlist, toggleWishlist }) => { <div className='container mx-auto pt-10'> <div className='flex'> <div className='w-full flex flex-wrap'> - <div className='w-5/12'> + <div className='w-5/12 relative'> + <div className='absolute bottom-0 bg-red-600 w-full'> + <div className='flex gap-x-2 items-center p-2'> + <div className='bg-yellow-400 rounded-full p-1 h-10 w-14 flex items-center justify-center '> + <span className='text-lg font-bold'>40%</span> + </div> + <div className='bg-red-600 border border-solid border-yellow-400 rounded-full h-10 p-2 flex w-[50%] items-center justify-center gap-x-4'> + <ImageNext + src='/images/ICON_FLASH_SALE_WEBSITE_INDOTEKNIK.svg' + width={20} + height={10} + /> + <span className='text-white text-lg font-semibold'>FLASH SALE</span> + </div> + </div> + </div> <Image src={product.image} alt={product.name} @@ -375,6 +393,16 @@ const ProductDesktop = ({ products, wishlist, toggleWishlist }) => { <div className='text-gray_r-11 line-through text-caption-1'> {currencyFormat(lowestPrice?.price)} </div> + {product.flashSale.remainingTime > 0 && ( + <div className='bg-red-600 rounded-full mb-1 p-2 pl-3 pr-3 flex w-fit items-center gap-x-1'> + <ImageNext + src='/images/ICON_FLASH_SALE_WEBSITE_INDOTEKNIK.svg' + width={15} + height={10} + /> + <span className='text-white text-xs font-semibold'>FLASH SALE</span> + </div> + )} </div> )} <h3 className='text-danger-500 font-semibold mt-1 text-title-md'> diff --git a/src/lib/product/components/ProductCard.jsx b/src/lib/product/components/ProductCard.jsx index a8964310..c85a76e9 100644 --- a/src/lib/product/components/ProductCard.jsx +++ b/src/lib/product/components/ProductCard.jsx @@ -3,6 +3,7 @@ import Link from '@/core/components/elements/Link/Link' import currencyFormat from '@/core/utils/currencyFormat' import { createSlug } from '@/core/utils/slug' import whatsappUrl from '@/core/utils/whatsappUrl' +import ImageNext from 'next/image' const ProductCard = ({ product, simpleTitle, variant = 'vertical' }) => { const callForPriceWhatsapp = whatsappUrl('product', { @@ -101,6 +102,12 @@ const ProductCard = ({ product, simpleTitle, variant = 'vertical' }) => { </Link> </div> <div className='w-8/12 p-2'> + {product.flashSale.id > 0 && ( + <div className='bg-red-600 rounded-full mb-1 p-2 pl-3 pr-3 flex w-fit items-center gap-x-1'> + <ImageNext src='/images/ICON_FLASH_SALE_WEBSITE_INDOTEKNIK.svg' width={15} height={10} /> + <span className='text-white text-xs font-semibold'>FLASH SALE</span> + </div> + )} {product?.manufacture?.name ? ( <Link href={createSlug( diff --git a/src/lib/product/components/ProductSimilar.jsx b/src/lib/product/components/ProductSimilar.jsx index 63a33089..1b82c2e5 100644 --- a/src/lib/product/components/ProductSimilar.jsx +++ b/src/lib/product/components/ProductSimilar.jsx @@ -3,7 +3,8 @@ import useProductSimilar from '../hooks/useProductSimilar' import ProductSlider from './ProductSlider' const ProductSimilar = ({ query }) => { - const { productSimilar } = useProductSimilar({ query }) + const source = "bottom" + const { productSimilar } = useProductSimilar({ query, source }) if (productSimilar.isLoading) { return <PopularProductSkeleton /> diff --git a/src/lib/product/hooks/useProductSimilar.js b/src/lib/product/hooks/useProductSimilar.js index d16e4c58..712d07ad 100644 --- a/src/lib/product/hooks/useProductSimilar.js +++ b/src/lib/product/hooks/useProductSimilar.js @@ -1,10 +1,9 @@ import productSimilarApi from '../api/productSimilarApi' import { useQuery } from 'react-query' -const useProductSimilar = ({ query }) => { - const fetchProductSimilar = async () => await productSimilarApi({ query }) +const useProductSimilar = ({ query, source }) => { + const fetchProductSimilar = async () => await productSimilarApi({ query, source }) const { data, isLoading } = useQuery(`productSimilar-${query}`, fetchProductSimilar) - return { productSimilar: { data, isLoading } } |
