summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHATEC\SPVDEV001 <tri.susilo@altama.co.id>2023-10-17 14:57:48 +0700
committerHATEC\SPVDEV001 <tri.susilo@altama.co.id>2023-10-17 14:57:48 +0700
commit6bd88bdb765c1ecc0518abeca77eca25bde2857b (patch)
treed78bdeff99a8634a15a7c7b0149a6f51a9408213 /src
parent954be13467b02889414db600fee8e8b7b76cc2aa (diff)
add lebel product terjual di product card dan product detail, bugfix queri solr untuk filter brand
Diffstat (limited to 'src')
-rw-r--r--src/core/utils/formatValue.js10
-rw-r--r--src/lib/product/components/Product/ProductDesktop.jsx9
-rw-r--r--src/lib/product/components/Product/ProductMobile.jsx11
-rw-r--r--src/lib/product/components/ProductCard.jsx23
-rw-r--r--src/lib/product/components/ProductSearch.jsx6
-rw-r--r--src/pages/api/shop/search.js6
-rw-r--r--src/utils/solrMapping.js6
7 files changed, 46 insertions, 25 deletions
diff --git a/src/core/utils/formatValue.js b/src/core/utils/formatValue.js
new file mode 100644
index 00000000..dc78df5b
--- /dev/null
+++ b/src/core/utils/formatValue.js
@@ -0,0 +1,10 @@
+const sellingProductFormat = (value) => {
+ if (value > 1000) {
+ const formattedValue = (value / 1000).toFixed(1).replace('.', ',')
+ return `${formattedValue.replace(/\.0$/, '')}rb+`
+ } else {
+ return value.toString()
+ }
+}
+
+export { sellingProductFormat }
diff --git a/src/lib/product/components/Product/ProductDesktop.jsx b/src/lib/product/components/Product/ProductDesktop.jsx
index 701750b2..ab4943eb 100644
--- a/src/lib/product/components/Product/ProductDesktop.jsx
+++ b/src/lib/product/components/Product/ProductDesktop.jsx
@@ -25,6 +25,7 @@ import { useProductCartContext } from '@/contexts/ProductCartContext'
import { Box, Skeleton, Tooltip } from '@chakra-ui/react'
import { Info } from 'lucide-react'
import Breadcrumb from './Breadcrumb'
+import { sellingProductFormat } from '@/core/utils/formatValue'
const ProductDesktop = ({ products, wishlist, toggleWishlist }) => {
const router = useRouter()
@@ -418,7 +419,7 @@ const ProductDesktop = ({ products, wishlist, toggleWishlist }) => {
</div>
</div>
- <div className='w-[25%]'>
+ <div className='w-[30%]'>
{product.variants.length > 1 && product.lowestPrice.priceDiscount > 0 && (
<div className='text-gray_r-12/80'>Harga mulai dari: </div>
)}
@@ -447,7 +448,11 @@ const ProductDesktop = ({ products, wishlist, toggleWishlist }) => {
)}
</div>
)} */}
-
+ {product?.qtySold > 0 && (
+ <div className='text-gray_r-9'>
+ {sellingProductFormat(product?.qtySold) + ' Terjual'}
+ </div>
+ )}
{lowestPrice?.isFlashsale && lowestPrice?.price.discountPercentage > 0 ? (
<>
<div className='flex gap-x-1 items-center mt-2'>
diff --git a/src/lib/product/components/Product/ProductMobile.jsx b/src/lib/product/components/Product/ProductMobile.jsx
index 70ac1cbc..ef2c0002 100644
--- a/src/lib/product/components/Product/ProductMobile.jsx
+++ b/src/lib/product/components/Product/ProductMobile.jsx
@@ -21,6 +21,7 @@ import ImageNext from 'next/image'
import CountDown2 from '@/core/components/elements/CountDown/CountDown2'
import Breadcrumb from './Breadcrumb'
import useAuth from '@/core/hooks/useAuth'
+import { sellingProductFormat } from '@/core/utils/formatValue'
const ProductMobile = ({ product, wishlist, toggleWishlist }) => {
const router = useRouter()
@@ -62,7 +63,8 @@ const ProductMobile = ({ product, wishlist, toggleWishlist }) => {
price: getLowestPrice(),
stock: product.stockTotal,
weight: product.weight,
- hasProgram: false
+ hasProgram: false,
+ qtySold: product.qtySold
})
const variantOptions = product.variants?.map((variant) => {
@@ -105,7 +107,8 @@ const ProductMobile = ({ product, wishlist, toggleWishlist }) => {
stock: variant.stock,
weight: variant.weight,
hasProgram: variant.hasProgram,
- isFlashsale: variant.isFlashsale
+ isFlashsale: variant.isFlashsale,
+ qtySold: variant.qtySold
}
setActiveVariant(newActiveVariant)
@@ -245,7 +248,9 @@ const ProductMobile = ({ product, wishlist, toggleWishlist }) => {
</button>
</div>
<h1 className='leading-6 font-medium mb-3'>{activeVariant?.name}</h1>
-
+ {product?.qtySold > 0 && (
+ <div className='text-gray_r-9'>{sellingProductFormat(activeVariant?.qtySold) + ' Terjual'}</div>
+ )}
{product.variants.length > 1 &&
activeVariant.price.priceDiscount > 0 &&
!selectedVariant && (
diff --git a/src/lib/product/components/ProductCard.jsx b/src/lib/product/components/ProductCard.jsx
index 3b96ac32..72a3260e 100644
--- a/src/lib/product/components/ProductCard.jsx
+++ b/src/lib/product/components/ProductCard.jsx
@@ -1,6 +1,7 @@
import Image from '@/core/components/elements/Image/Image'
import Link from '@/core/components/elements/Link/Link'
import currencyFormat from '@/core/utils/currencyFormat'
+import { sellingProductFormat } from '@/core/utils/formatValue'
import { createSlug } from '@/core/utils/slug'
import whatsappUrl from '@/core/utils/whatsappUrl'
import ImageNext from 'next/image'
@@ -123,12 +124,11 @@ const ProductCard = ({ product, simpleTitle, variant = 'vertical' }) => {
</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 className='flex w-full items-center gap-x-1 '>
+ {product?.stockTotal > 0 && <div className='badge-solid-red'>Ready Stock</div>}
+ {/* <div className='badge-gray'>{product?.stockTotal > 5 ? '> 5' : '< 5'}</div> */}
+ {product?.qtySold > 0 && <div className='text-gray_r-9 text-sm'>{sellingProductFormat(product?.qtySold) + ' Terjual'}</div>}
+ </div>
</div>
</div>
)
@@ -229,12 +229,11 @@ const ProductCard = ({ product, simpleTitle, variant = 'vertical' }) => {
</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 className='flex w-full items-center gap-x-1 '>
+ {product?.stockTotal > 0 && <div className='badge-solid-red'>Ready Stock</div>}
+ {/* <div className='badge-gray'>{product?.stockTotal > 5 ? '> 5' : '< 5'}</div> */}
+ {product?.qtySold > 0 && <div className='text-gray_r-9 text-sm'>{sellingProductFormat(product?.qtySold) + ' Terjual'}</div>}
+ </div>
</div>
</div>
)
diff --git a/src/lib/product/components/ProductSearch.jsx b/src/lib/product/components/ProductSearch.jsx
index fd75d587..dc9796f2 100644
--- a/src/lib/product/components/ProductSearch.jsx
+++ b/src/lib/product/components/ProductSearch.jsx
@@ -70,11 +70,11 @@ const ProductSearch = ({ query, prefixUrl, defaultBrand = null }) => {
const brands = []
for (
let i = 0;
- i < productSearch.data?.facetCounts?.facetFields?.manufactureName.length;
+ i < productSearch.data?.facetCounts?.facetFields?.manufactureNameS.length;
i += 2
) {
- const brand = productSearch.data?.facetCounts?.facetFields?.manufactureName[i]
- const qty = productSearch.data?.facetCounts?.facetFields?.manufactureName[i + 1]
+ const brand = productSearch.data?.facetCounts?.facetFields?.manufactureNameS[i]
+ const qty = productSearch.data?.facetCounts?.facetFields?.manufactureNameS[i + 1]
if (qty > 0) {
brands.push({ brand, qty })
}
diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js
index fd7a215a..31497c51 100644
--- a/src/pages/api/shop/search.js
+++ b/src/pages/api/shop/search.js
@@ -13,7 +13,7 @@ export default async function handler(req, res) {
orderBy = '',
operation = 'AND',
fq = '',
- limit = 0,
+ limit = 30,
stock = ''
} = req.query
@@ -41,7 +41,7 @@ export default async function handler(req, res) {
let offset = (page - 1) * limit
let parameter = [
- 'facet.field=manufacture_name',
+ 'facet.field=manufacture_name_s',
'facet.field=category_name',
'facet=true',
'indent=true',
@@ -49,7 +49,7 @@ export default async function handler(req, res) {
`q.op=${operation}`,
`q=${escapeSolrQuery(q)}`,
'qf=name_s',
- `start=${offset}`,
+ `start=${parseInt(offset)}`,
`rows=${limit}`,
`sort=${paramOrderBy}`,
`fq=-publish_b:false`
diff --git a/src/utils/solrMapping.js b/src/utils/solrMapping.js
index 61816cf8..41d24b53 100644
--- a/src/utils/solrMapping.js
+++ b/src/utils/solrMapping.js
@@ -32,7 +32,8 @@ export const productMappingSolr = (products, pricelist) => {
remainingTime: flashsaleTime(product?.flashsale_end_date_s)?.remainingTime,
name: product?.product?.flashsale_name_s,
tag: product?.flashsale_tag_s || 'FLASH SALE'
- }
+ },
+ qtySold : product?.qty_sold_f || 0
}
if (product.manufacture_id_i && product.manufacture_name_s) {
@@ -85,7 +86,8 @@ export const variantsMappingSolr = (parent, products, pricelist) => {
stockTotal: product.stock_total_f || 0,
weight: product.weight_f || 0,
manufacture: {},
- parent: {}
+ parent: {},
+ qtySold : product?.qty_sold_f || 0
}
if (product.manufacture_id_i && product.manufacture_name_s) {