From af6494b92528cee8fae7173e8290c4ebbc334efa Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Wed, 28 Aug 2024 09:47:39 +0700 Subject: handling ready to ship --- src/lib/product/components/ProductSearch.jsx | 4 +++- src/pages/api/shop/search.js | 30 +++++++++++++++++++++++----- 2 files changed, 28 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/lib/product/components/ProductSearch.jsx b/src/lib/product/components/ProductSearch.jsx index eaeac71a..d6e649a8 100644 --- a/src/lib/product/components/ProductSearch.jsx +++ b/src/lib/product/components/ProductSearch.jsx @@ -382,6 +382,8 @@ const ProductSearch = ({ }; const isNotReadyStockPage = router.asPath !== '/shop/search?orderBy=stock'; + + console.log('is spelling', spellings); return ( <> @@ -575,7 +577,7 @@ const ProductSearch = ({ />
- {!spellings ? ( + {spellings?.length < 1 || !spellings ? ( <> Menampilkan  {pageCount > 1 ? ( diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index 6f98efcb..a19224df 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -1,6 +1,7 @@ import { productMappingSolr } from '@/utils/solrMapping'; import axios from 'axios'; import camelcaseObjectDeep from 'camelcase-object-deep'; +import searchSuggestApi from '@/core/api/searchSuggestApi'; export default async function handler(req, res) { const { @@ -42,10 +43,29 @@ export default async function handler(req, res) { paramOrderBy += ''; break; } - + + // let suggestWord = null; + // let keywords = q; + // let checkQ = null; + + // if (q != '*') { + // checkQ = q.trim().split(/[\s\+\-\!\(\)\{\}\[\]\^"~\*\?:\\\/]+/); + // if (checkQ.length > 1) { + // const dataSearchSuggest = await axios( + // `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/suggest?q=${checkQ[1]}` + // ); + // suggestWord = dataSearchSuggest.data.suggestions[0]; + // } + // if (suggestWord && suggestWord?.term.split(' ').length <= 1) { + // keywords = `"${escapeSolrQuery(checkQ[0] + ' ' + suggestWord?.term)}"`; + // } + // } + + // let newQ = keywords; + let checkQ = q.trim().split(/[\s\+\-\!\(\)\{\}\[\]\^"~\*\?:\\\/]+/); let newQ = checkQ.length > 1 ? escapeSolrQuery(q) + '*' : escapeSolrQuery(q); - + let offset = (page - 1) * limit; let parameter = [ 'facet.field=manufacture_name_s', @@ -54,7 +74,7 @@ export default async function handler(req, res) { 'indent=true', `facet.query=${escapeSolrQuery(q)}`, `q.op=${operation}`, - `q=${newQ}`, + `q=name_s:${newQ}`, 'qf=name_s', `start=${parseInt(offset)}`, `rows=${limit}`, @@ -105,6 +125,7 @@ export default async function handler(req, res) { let result = await axios( process.env.SOLR_HOST + '/solr/product/select?' + parameter.join('&') ); + console.log('ini search', parameter.join('&')); try { result.data.response.products = productMappingSolr( result.data.response.docs, @@ -126,7 +147,7 @@ export default async function handler(req, res) { const escapeSolrQuery = (query) => { if (query == '*') return query; - + query = query.replace(/-/g, ' '); const specialChars = /([\+\!\(\)\{\}\[\]\^"~\*\?:\\\/])/g; @@ -141,7 +162,6 @@ const escapeSolrQuery = (query) => { return escapedWords.join(' '); }; - /*const productResponseMap = (products, pricelist) => { return products.map((product) => { let price = product.price_tier1_v2_f || 0 -- cgit v1.2.3 From 47c66a1c432feaf898e3285520dfa892d22d4ad2 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Fri, 30 Aug 2024 10:25:04 +0700 Subject: search eenggin --- src/pages/api/shop/search.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index a19224df..61f5bf2d 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -65,6 +65,7 @@ export default async function handler(req, res) { let checkQ = q.trim().split(/[\s\+\-\!\(\)\{\}\[\]\^"~\*\?:\\\/]+/); let newQ = checkQ.length > 1 ? escapeSolrQuery(q) + '*' : escapeSolrQuery(q); + let excludeDescription = checkQ.map(term => `-description_t:"${term}"`).join(', '); let offset = (page - 1) * limit; let parameter = [ @@ -74,12 +75,12 @@ export default async function handler(req, res) { 'indent=true', `facet.query=${escapeSolrQuery(q)}`, `q.op=${operation}`, - `q=name_s:${newQ}`, + `q=${newQ}`, 'qf=name_s', `start=${parseInt(offset)}`, `rows=${limit}`, `sort=${paramOrderBy}`, - `fq=-publish_b:false, product_rating_f:[8 TO *], price_tier1_v2_f:[1 TO *]`, + `fq=-publish_b:false, product_rating_f:[8 TO *], price_tier1_v2_f:[1 TO *], ${excludeDescription}`, ]; if (priceFrom > 0 || priceTo > 0) { -- cgit v1.2.3 From 58a8e3c000c6364f81e37a38f1cf6031b7430985 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Mon, 2 Sep 2024 13:05:46 +0700 Subject: update --- src/pages/api/shop/search.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index 61f5bf2d..0227a7eb 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -75,12 +75,14 @@ export default async function handler(req, res) { 'indent=true', `facet.query=${escapeSolrQuery(q)}`, `q.op=${operation}`, - `q=${newQ}`, - 'qf=name_s', + `q=tool box`, + `defType=dismax`, + 'qf=name_s^2, description_s, category_name, manufacture_name_s', + `mm=${checkQ.length}`, `start=${parseInt(offset)}`, `rows=${limit}`, `sort=${paramOrderBy}`, - `fq=-publish_b:false, product_rating_f:[8 TO *], price_tier1_v2_f:[1 TO *], ${excludeDescription}`, + `fq=-publish_b:false, product_rating_f:[8 TO *], price_tier1_v2_f:[1 TO *]`, ]; if (priceFrom > 0 || priceTo > 0) { -- cgit v1.2.3 From 277f7eea312492c66ec8d942199dba65593e78b8 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Mon, 2 Sep 2024 15:12:58 +0700 Subject: new --- src/pages/api/shop/search.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index 0227a7eb..d0343fb8 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -2,6 +2,7 @@ import { productMappingSolr } from '@/utils/solrMapping'; import axios from 'axios'; import camelcaseObjectDeep from 'camelcase-object-deep'; import searchSuggestApi from '@/core/api/searchSuggestApi'; +import { ECDH } from 'crypto'; export default async function handler(req, res) { const { @@ -65,7 +66,7 @@ export default async function handler(req, res) { let checkQ = q.trim().split(/[\s\+\-\!\(\)\{\}\[\]\^"~\*\?:\\\/]+/); let newQ = checkQ.length > 1 ? escapeSolrQuery(q) + '*' : escapeSolrQuery(q); - let excludeDescription = checkQ.map(term => `-description_t:"${term}"`).join(', '); + let excludeDescription = checkQ.map(term => escapeSolrQuery(term)).join(' AND '); let offset = (page - 1) * limit; let parameter = [ @@ -75,10 +76,8 @@ export default async function handler(req, res) { 'indent=true', `facet.query=${escapeSolrQuery(q)}`, `q.op=${operation}`, - `q=tool box`, - `defType=dismax`, + `q=${excludeDescription}*`, 'qf=name_s^2, description_s, category_name, manufacture_name_s', - `mm=${checkQ.length}`, `start=${parseInt(offset)}`, `rows=${limit}`, `sort=${paramOrderBy}`, -- cgit v1.2.3 From fc635c6ce35d8b40baffb456e25342957a781940 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 6 Sep 2024 10:47:09 +0700 Subject: update solr mapping category management --- src/lib/home/api/categoryManagementApi.js | 70 ++++++++++++++++++++++++++--- src/lib/home/components/CategoryDynamic.jsx | 21 +++++++++ 2 files changed, 85 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/lib/home/api/categoryManagementApi.js b/src/lib/home/api/categoryManagementApi.js index b70d60ce..54a6c1ac 100644 --- a/src/lib/home/api/categoryManagementApi.js +++ b/src/lib/home/api/categoryManagementApi.js @@ -1,8 +1,66 @@ -import odooApi from '@/core/api/odooApi' +// import odooApi from '@/core/api/odooApi' -const categoryManagementApi = async () => { - const dataCategoryManagement = await odooApi('GET', '/api/v1/categories_management') - return dataCategoryManagement -} +// const categoryManagementApi = async () => { +// const dataCategoryManagement = await odooApi('GET', '/api/v1/categories_management') +// return dataCategoryManagement +// } -export default categoryManagementApi +// export default categoryManagementApi + + + +export const fetchPopulerProductSolr = async () => { + let sort ='sort=sequence_i asc'; + try { + const response = await fetch(`/solr/category_management/query?q=*:*&q.op=OR&indent=true&${sort}`); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + const data = await response.json(); + const promotions = await map(data.response.docs); + return promotions; + } catch (error) { + console.error("Error fetching promotion data:", error); + return []; + } + }; + + const map = async (promotions) => { + console.log("promotions",promotions) + const result = []; + for (const promotion of promotions) { + console.log("promotion",promotion) + const mappedCategories = promotion.categories.map((level2) => { + console.log("level2",JSON.parse(level2)) + const childFrontend = level2.child_frontend_id_i.map((level3) => { + return { + id_level_3: level3.id_level_3, + name: level3.name, + numFound: level3.numFound, + image: level3.image + }; + }); + + return { + id_level_2: level2.id_level_2, + name: level2.name, + numFound: level2.numFound, + image: level2.image, + child_frontend_id_i: childFrontend + }; + }); + + const data = { + id: promotion.id, + category_id_i: promotion.category_id_i, + name: promotion.name_s, + sequence: promotion.sequence_i, + numFound: promotion.numFound_i, + image: promotion.image_s, + categories: mappedCategories + }; + result.push(data); + } + return result; + }; + \ No newline at end of file diff --git a/src/lib/home/components/CategoryDynamic.jsx b/src/lib/home/components/CategoryDynamic.jsx index 14015e28..11a15d6d 100644 --- a/src/lib/home/components/CategoryDynamic.jsx +++ b/src/lib/home/components/CategoryDynamic.jsx @@ -14,6 +14,27 @@ import { Navigation, Pagination, Autoplay } from 'swiper'; const CategoryDynamic = () => { + const [manufactures, setManufactures] = useState([]) + const loadBrand = useCallback(async () => { + // setIsLoading(true) + //Get brand from odoo + /*const result = await odooApi( + 'GET', + `/api/v1/manufacture?limit=0&offset=${manufactures.length}&name=${name}` + )*/ + + // Change get brands from solr + const items = await fetchPopulerProductSolr(); + + console.log("items",items) + + // setIsLoading(false) + // setManufactures((manufactures) => [...result.data]) + }, []) + + useEffect(() => { + loadBrand() + }, [loadBrand]) const { categoryManagement } = useCategoryManagement(); // const [categoryData, setCategoryData] = useState({}); // const [subCategoryData, setSubCategoryData] = useState({}); -- cgit v1.2.3 From f7ad601638549f024201d3ee1fa920abe7c74f64 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 6 Sep 2024 14:59:17 +0700 Subject: update mapping solr data fetch --- src/lib/home/api/categoryManagementApi.js | 82 ++++++++--------------- src/lib/home/components/CategoryDynamic.jsx | 38 ++++------- src/lib/home/components/CategoryDynamicMobile.jsx | 45 ++++++++----- src/lib/home/hooks/useCategoryManagement.js | 13 ---- 4 files changed, 71 insertions(+), 107 deletions(-) delete mode 100644 src/lib/home/hooks/useCategoryManagement.js (limited to 'src') diff --git a/src/lib/home/api/categoryManagementApi.js b/src/lib/home/api/categoryManagementApi.js index 54a6c1ac..3723681c 100644 --- a/src/lib/home/api/categoryManagementApi.js +++ b/src/lib/home/api/categoryManagementApi.js @@ -1,66 +1,40 @@ -// import odooApi from '@/core/api/odooApi' - -// const categoryManagementApi = async () => { -// const dataCategoryManagement = await odooApi('GET', '/api/v1/categories_management') -// return dataCategoryManagement -// } - -// export default categoryManagementApi - - - -export const fetchPopulerProductSolr = async () => { +export const fetchCategoryManagementSolr = async () => { let sort ='sort=sequence_i asc'; try { - const response = await fetch(`/solr/category_management/query?q=*:*&q.op=OR&indent=true&${sort}`); + const response = await fetch(`/solr/category_management/query?q=*:*&q.op=OR&indent=true&${sort}&fq=categories:%5B*%20TO%20*%5D`); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); - const promotions = await map(data.response.docs); - return promotions; - } catch (error) { - console.error("Error fetching promotion data:", error); - return []; - } - }; - - const map = async (promotions) => { - console.log("promotions",promotions) - const result = []; - for (const promotion of promotions) { - console.log("promotion",promotion) - const mappedCategories = promotion.categories.map((level2) => { - console.log("level2",JSON.parse(level2)) - const childFrontend = level2.child_frontend_id_i.map((level3) => { - return { - id_level_3: level3.id_level_3, - name: level3.name, - numFound: level3.numFound, - image: level3.image - }; - }); - - return { - id_level_2: level2.id_level_2, - name: level2.name, - numFound: level2.numFound, - image: level2.image, - child_frontend_id_i: childFrontend - }; + const promotions = await map(data.response.docs); + return promotions; + } catch (error) { + console.error("Error fetching promotion data:", error); + return []; + } + }; + + const map = async (promotions) => { + return promotions.map((promotion) =>{ + let parsedCategories = promotion.categories.map(category => { + // Parse string JSON utama + let parsedCategory = JSON.parse(category); + + // Parse setiap elemen di child_frontend_id_i jika ada + if (parsedCategory.child_frontend_id_i) { + parsedCategory.child_frontend_id_i = parsedCategory.child_frontend_id_i.map(child => JSON.parse(child)); + } + + return parsedCategory; }); - - const data = { + let productMapped = { id: promotion.id, - category_id_i: promotion.category_id_i, name: promotion.name_s, + image: promotion.image_s, sequence: promotion.sequence_i, numFound: promotion.numFound_i, - image: promotion.image_s, - categories: mappedCategories + categories: parsedCategories }; - result.push(data); - } - return result; - }; - \ No newline at end of file + return productMapped; + }) + }; \ No newline at end of file diff --git a/src/lib/home/components/CategoryDynamic.jsx b/src/lib/home/components/CategoryDynamic.jsx index 11a15d6d..ca104ada 100644 --- a/src/lib/home/components/CategoryDynamic.jsx +++ b/src/lib/home/components/CategoryDynamic.jsx @@ -1,6 +1,5 @@ import React, { useEffect, useState, useCallback } from 'react'; -import useCategoryManagement from '../hooks/useCategoryManagement'; -import {fetchPopulerProductSolr} from '../api/categoryManagementApi' +import {fetchCategoryManagementSolr} from '../api/categoryManagementApi' import NextImage from 'next/image'; import Link from "next/link"; import { createSlug } from '@/core/utils/slug'; @@ -14,28 +13,20 @@ import { Navigation, Pagination, Autoplay } from 'swiper'; const CategoryDynamic = () => { - const [manufactures, setManufactures] = useState([]) + const [categoryManagement, setCategoryManagement] = useState([]) + const [isLoading, setIsLoading] = useState(false) const loadBrand = useCallback(async () => { - // setIsLoading(true) - //Get brand from odoo - /*const result = await odooApi( - 'GET', - `/api/v1/manufacture?limit=0&offset=${manufactures.length}&name=${name}` - )*/ - - // Change get brands from solr - const items = await fetchPopulerProductSolr(); - - console.log("items",items) + setIsLoading(true) + const items = await fetchCategoryManagementSolr(); - // setIsLoading(false) - // setManufactures((manufactures) => [...result.data]) + setIsLoading(false) + setCategoryManagement(items) }, []) useEffect(() => { loadBrand() }, [loadBrand]) - const { categoryManagement } = useCategoryManagement(); + // const [categoryData, setCategoryData] = useState({}); // const [subCategoryData, setSubCategoryData] = useState({}); @@ -76,18 +67,17 @@ const CategoryDynamic = () => { return (
- {categoryManagement && categoryManagement.data?.map((category) => { + {categoryManagement && categoryManagement?.map((category) => { // const countLevel1 = categoryData[category.categoryIdI] || 0; - return ( - +
{category.name}
{/*

{countLevel1} Produk tersedia

*/} - Lihat Semua + Lihat Semua
{/* Swiper for SubCategories */} @@ -115,13 +105,13 @@ const CategoryDynamic = () => { {countLevel2} Produk tersedia

*/} - Lihat Semua + Lihat Semua
- {subCategory.childFrontendIdI.map((childCategory) => ( + {subCategory.child_frontend_id_i.map((childCategory) => (
- + { - const { categoryManagement } = useCategoryManagement() const [selectedCategory, setSelectedCategory] = useState({}); + const [categoryManagement, setCategoryManagement] = useState([]) + const [isLoading, setIsLoading] = useState(false) + + const loadBrand = useCallback(async () => { + setIsLoading(true) + const items = await fetchCategoryManagementSolr(); + + setIsLoading(false) + setCategoryManagement(items) + }, []) + + useEffect(() => { + loadBrand() + }, [loadBrand]) useEffect(() => { const loadPromo = async () => { try { - if (categoryManagement.data?.length > 0) { - const initialSelections = categoryManagement.data.reduce((acc, category) => { + if (categoryManagement?.length > 0) { + const initialSelections = categoryManagement.reduce((acc, category) => { if (category.categories.length > 0) { - acc[category.id] = category.categories[0].idLevel2; + acc[category.id] = category.categories[0].id_level_2; } return acc; }, {}); @@ -28,7 +41,7 @@ const CategoryDynamicMobile = () => { }; loadPromo(); - }, [categoryManagement.data]); + }, [categoryManagement]); const handleCategoryLevel2Click = (categoryIdI, idLevel2) => { setSelectedCategory(prev => ({ @@ -39,18 +52,18 @@ const CategoryDynamicMobile = () => { return (
- {categoryManagement.data && categoryManagement.data.map((category) => ( + {categoryManagement && categoryManagement?.map((category) => (
-
{category.name}
- Lihat Semua +
{category?.name}
+ Lihat Semua
{category.categories.map((index) => (
handleCategoryLevel2Click(category.id, index?.idLevel2)} - className={`border flex justify-start items-center max-w-48 max-h-16 rounded ${selectedCategory[category.id] === index?.idLevel2 ? 'bg-red-50 border-red-500 text-red-500' : 'border-gray-200 text-gray-900'}`} + onClick={() => handleCategoryLevel2Click(category.id, index?.id_level_2)} + className={`border flex justify-start items-center max-w-48 max-h-16 rounded ${selectedCategory[category.id] === index?.id_level_2 ? 'bg-red-50 border-red-500 text-red-500' : 'border-gray-200 text-gray-900'}`} >
@@ -62,7 +75,7 @@ const CategoryDynamicMobile = () => { className='' />
-
{index.name}
+
{index?.name}
@@ -73,9 +86,9 @@ const CategoryDynamicMobile = () => {
{category.categories.map((index) => ( - selectedCategory[category.id] === index?.idLevel2 && index.childFrontendIdI.map((x) => ( + selectedCategory[category.id] === index?.id_level_2 && index?.child_frontend_id_i.map((x) => (
- + { className='p-2' />
-
{x.name}
+
{x?.name}
diff --git a/src/lib/home/hooks/useCategoryManagement.js b/src/lib/home/hooks/useCategoryManagement.js deleted file mode 100644 index c1dda585..00000000 --- a/src/lib/home/hooks/useCategoryManagement.js +++ /dev/null @@ -1,13 +0,0 @@ -import categoryManagementApi from '../api/categoryManagementApi' -import { useQuery } from 'react-query' - -const useCategoryManagement = () => { - const fetchCategoryManagement = async () => await categoryManagementApi() - const { isLoading, data } = useQuery('categoryManagementApi', fetchCategoryManagement) - - return { - categoryManagement: { data, isLoading } - } -} - -export default useCategoryManagement \ No newline at end of file -- cgit v1.2.3 From e1753f5cb16ce4094a6106a829339b8db2b99dd2 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Fri, 6 Sep 2024 16:38:12 +0700 Subject: search --- src/pages/api/shop/search.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index d0343fb8..089a1722 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -66,7 +66,6 @@ export default async function handler(req, res) { let checkQ = q.trim().split(/[\s\+\-\!\(\)\{\}\[\]\^"~\*\?:\\\/]+/); let newQ = checkQ.length > 1 ? escapeSolrQuery(q) + '*' : escapeSolrQuery(q); - let excludeDescription = checkQ.map(term => escapeSolrQuery(term)).join(' AND '); let offset = (page - 1) * limit; let parameter = [ @@ -76,12 +75,13 @@ export default async function handler(req, res) { 'indent=true', `facet.query=${escapeSolrQuery(q)}`, `q.op=${operation}`, - `q=${excludeDescription}*`, - 'qf=name_s^2, description_s, category_name, manufacture_name_s', + `q=${newQ}`, + `defType=edismax`, + 'qf=name_s description_clean_t category_name manufacture_name_s variants_code_t variants_name_t category_id_ids default_code_s', `start=${parseInt(offset)}`, `rows=${limit}`, `sort=${paramOrderBy}`, - `fq=-publish_b:false, product_rating_f:[8 TO *], price_tier1_v2_f:[1 TO *]`, + `fq=-publish_b:false, product_rating_f:[8 TO *], price_tier1_v2_f:[1 TO *]` ]; if (priceFrom > 0 || priceTo > 0) { @@ -127,7 +127,7 @@ export default async function handler(req, res) { let result = await axios( process.env.SOLR_HOST + '/solr/product/select?' + parameter.join('&') ); - console.log('ini search', parameter.join('&')); + try { result.data.response.products = productMappingSolr( result.data.response.docs, -- cgit v1.2.3 From 492db3e7515b2af3770e01c28d3aab76ea7755ee Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 9 Sep 2024 10:13:28 +0700 Subject: update code to get all data --- src/lib/home/api/categoryManagementApi.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/lib/home/api/categoryManagementApi.js b/src/lib/home/api/categoryManagementApi.js index 3723681c..0aeb2aac 100644 --- a/src/lib/home/api/categoryManagementApi.js +++ b/src/lib/home/api/categoryManagementApi.js @@ -1,7 +1,7 @@ export const fetchCategoryManagementSolr = async () => { let sort ='sort=sequence_i asc'; try { - const response = await fetch(`/solr/category_management/query?q=*:*&q.op=OR&indent=true&${sort}&fq=categories:%5B*%20TO%20*%5D`); + const response = await fetch(`/solr/category_management/query?q=*:*&q.op=OR&indent=true&${sort}&&rows=20`); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } -- cgit v1.2.3 From fefcfc05fd83421cedc76e0f690129fd9a057f77 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 9 Sep 2024 14:57:09 +0700 Subject: update fetch data all promo --- src/pages/api/shop/promo.js | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src') diff --git a/src/pages/api/shop/promo.js b/src/pages/api/shop/promo.js index 221a9adb..983f8fae 100644 --- a/src/pages/api/shop/promo.js +++ b/src/pages/api/shop/promo.js @@ -52,6 +52,7 @@ export default async function handler(req, res) { 'facet.field=category_name', 'facet=true', 'indent=true', + `facet.limit=-1`, // `facet.query=${escapeSolrQuery(q)}`, `q.op=${operation}`, `q=${q}`, @@ -60,6 +61,7 @@ export default async function handler(req, res) { `rows=${limit}`, `sort=${paramOrderBy}`, `fq=product_ids:[* TO *]`, + `active_b:true`, ]; if (priceFrom > 0 || priceTo > 0) { -- cgit v1.2.3 From 782a54c1a57ed16f6b28be3c6c589b35cc2fbc97 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 9 Sep 2024 15:15:20 +0700 Subject: update field active_b --- src/pages/api/shop/promo.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/pages/api/shop/promo.js b/src/pages/api/shop/promo.js index 983f8fae..f90c8559 100644 --- a/src/pages/api/shop/promo.js +++ b/src/pages/api/shop/promo.js @@ -61,7 +61,7 @@ export default async function handler(req, res) { `rows=${limit}`, `sort=${paramOrderBy}`, `fq=product_ids:[* TO *]`, - `active_b:true`, + `fq=active_b:true`, ]; if (priceFrom > 0 || priceTo > 0) { -- cgit v1.2.3 From aff296d79cc148a919b33c2c589d6b803fb39a22 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Tue, 10 Sep 2024 14:58:24 +0700 Subject: update --- src/core/api/odooApi.js | 2 +- src/pages/api/shop/search.js | 3 ++- src/pages/index.jsx | 8 ++++---- 3 files changed, 7 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/core/api/odooApi.js b/src/core/api/odooApi.js index 3349ff4b..504d097a 100644 --- a/src/core/api/odooApi.js +++ b/src/core/api/odooApi.js @@ -64,7 +64,7 @@ const odooApi = async (method, url, data = {}, headers = {}) => { } return camelcaseObjectDeep(res.data.result) || []; } catch (error) { - console.log(error); + // console.log(error); } }; diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index 089a1722..1b6377f4 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -81,7 +81,8 @@ export default async function handler(req, res) { `start=${parseInt(offset)}`, `rows=${limit}`, `sort=${paramOrderBy}`, - `fq=-publish_b:false, product_rating_f:[8 TO *], price_tier1_v2_f:[1 TO *]` + `fq=-publish_b:false, product_rating_f:[8 TO *], price_tier1_v2_f:[1 TO *]`, + `mm=2` ]; if (priceFrom > 0 || priceTo > 0) { diff --git a/src/pages/index.jsx b/src/pages/index.jsx index 613950a6..0e87205e 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -10,7 +10,7 @@ import { FlashSaleSkeleton } from '@/lib/flashSale/skeleton/FlashSaleSkeleton'; import PreferredBrandSkeleton from '@/lib/home/components/Skeleton/PreferredBrandSkeleton'; import BannerPromoSkeleton from '@/lib/home/components/Skeleton/BannerPromoSkeleton'; import PromotinProgram from '@/lib/promotinProgram/components/HomePage'; -import PagePopupIformation from '~/modules/popup-information'; +import PagePopupIformation from '~/modules/popup-information'; // need change to dynamic and ssr : false import CategoryPilihan from '../lib/home/components/CategoryPilihan'; import odooApi from '@/core/api/odooApi'; import { getAuth } from '~/libs/auth'; @@ -56,7 +56,7 @@ const ProgramPromotion = dynamic(() => const BannerSection = dynamic(() => import('@/lib/home/components/BannerSection') -); +); const CategoryHomeId = dynamic(() => import('@/lib/home/components/CategoryHomeId') ); @@ -71,8 +71,8 @@ import('@/lib/home/components/CategoryDynamicMobile') const CustomerReviews = dynamic(() => import('@/lib/review/components/CustomerReviews') -); -const ServiceList = dynamic(() => import('@/lib/home/components/ServiceList')); +); // need to ssr:false +const ServiceList = dynamic(() => import('@/lib/home/components/ServiceList')); // need to ssr: false -- cgit v1.2.3 From 46faf7e7ba398a4137e93559b2efa5abf3df9663 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Tue, 10 Sep 2024 15:15:09 +0700 Subject: [Renca testing google crowler] --- src/pages/shop/brands/[slug].jsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/pages/shop/brands/[slug].jsx b/src/pages/shop/brands/[slug].jsx index 88e9b302..ed6724ea 100644 --- a/src/pages/shop/brands/[slug].jsx +++ b/src/pages/shop/brands/[slug].jsx @@ -18,9 +18,10 @@ export default function BrandDetail() { const brandName = getNameFromSlug(slug) const id = getIdFromSlug(slug) const {brand} = useBrand({id}) - if ( !brand.isLoading && _.isEmpty(brand.data)) { - return ; - } + // if ( !brand.isLoading && _.isEmpty(brand.data)) { + // console.log('ini masuk pak') + // return ; + // } return ( Date: Wed, 11 Sep 2024 10:02:37 +0700 Subject: cr - operation , handle minimum match --- src/pages/api/shop/search.js | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index 1b6377f4..550217d8 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -16,6 +16,7 @@ export default async function handler(req, res) { operation = 'AND', fq = '', limit = 30, + source = '', } = req.query; let { stock = '' } = req.query; @@ -65,7 +66,18 @@ export default async function handler(req, res) { // let newQ = keywords; let checkQ = q.trim().split(/[\s\+\-\!\(\)\{\}\[\]\^"~\*\?:\\\/]+/); - let newQ = checkQ.length > 1 ? escapeSolrQuery(q) + '*' : escapeSolrQuery(q); + let newQ = escapeSolrQuery(q); + + const formattedQuery = `(${newQ.split(' ').map(term => `${term}*`).join(' ') })`; + const mm = checkQ.length > 2 ? checkQ.length > 5 ? '65%' : '85%' : `${checkQ.length}`; + + const filterQueries = [ + '-publish_b:false', + 'product_rating_f:[8 TO *]', + 'price_tier1_v2_f:[1 TO *]' + ]; + + const fq_ = filterQueries.join('AND '); let offset = (page - 1) * limit; let parameter = [ @@ -74,15 +86,15 @@ export default async function handler(req, res) { 'facet=true', 'indent=true', `facet.query=${escapeSolrQuery(q)}`, - `q.op=${operation}`, - `q=${newQ}`, + `q.op=OR`, + `q=${source == 'similar' || checkQ.length < 3 ? newQ + '*' : formattedQuery }`, `defType=edismax`, 'qf=name_s description_clean_t category_name manufacture_name_s variants_code_t variants_name_t category_id_ids default_code_s', `start=${parseInt(offset)}`, `rows=${limit}`, `sort=${paramOrderBy}`, - `fq=-publish_b:false, product_rating_f:[8 TO *], price_tier1_v2_f:[1 TO *]`, - `mm=2` + `fq=${encodeURIComponent(fq_)}`, + `mm=${encodeURIComponent(mm)}`, ]; if (priceFrom > 0 || priceTo > 0) { @@ -120,10 +132,12 @@ export default async function handler(req, res) { if (stock) parameter.push(`fq=stock_total_f:{1 TO *}`); // Single fq in url params - if (typeof fq === 'string') parameter.push(`fq=${fq}`); + if (typeof fq === 'string') parameter.push(`fq=${encodeURIComponent(fq)}`); // Multi fq in url params if (Array.isArray(fq)) - parameter = parameter.concat(fq.map((val) => `fq=${val}`)); + parameter = parameter.concat(fq.map((val) => `fq=${encodeURIComponent(val)}`)); + + console.log('ini params', parameter); let result = await axios( process.env.SOLR_HOST + '/solr/product/select?' + parameter.join('&') -- cgit v1.2.3 From 0112efd7ce539f4276c66e5ad553288a9bf61343 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Wed, 11 Sep 2024 10:36:32 +0700 Subject: handle if leng 1 --- src/pages/api/shop/search.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index 550217d8..68a9abcd 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -87,7 +87,7 @@ export default async function handler(req, res) { 'indent=true', `facet.query=${escapeSolrQuery(q)}`, `q.op=OR`, - `q=${source == 'similar' || checkQ.length < 3 ? newQ + '*' : formattedQuery }`, + `q=${source == 'similar' || checkQ.length < 3 ? checkQ.length < 2 ? newQ : newQ + '*' : formattedQuery }`, `defType=edismax`, 'qf=name_s description_clean_t category_name manufacture_name_s variants_code_t variants_name_t category_id_ids default_code_s', `start=${parseInt(offset)}`, -- cgit v1.2.3 From 3918b401286243a6ceb376d267b802b87f1b1a2f Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Thu, 12 Sep 2024 10:16:12 +0700 Subject: handling similar --- src/pages/api/shop/search.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js index 68a9abcd..6269d3ed 100644 --- a/src/pages/api/shop/search.js +++ b/src/pages/api/shop/search.js @@ -69,7 +69,7 @@ export default async function handler(req, res) { let newQ = escapeSolrQuery(q); const formattedQuery = `(${newQ.split(' ').map(term => `${term}*`).join(' ') })`; - const mm = checkQ.length > 2 ? checkQ.length > 5 ? '65%' : '85%' : `${checkQ.length}`; + const mm = checkQ.length > 2 ? checkQ.length > 5 ? '55%' : '85%' : `${checkQ.length}`; const filterQueries = [ '-publish_b:false', @@ -136,9 +136,7 @@ export default async function handler(req, res) { // Multi fq in url params if (Array.isArray(fq)) parameter = parameter.concat(fq.map((val) => `fq=${encodeURIComponent(val)}`)); - - console.log('ini params', parameter); - + let result = await axios( process.env.SOLR_HOST + '/solr/product/select?' + parameter.join('&') ); -- cgit v1.2.3