From 212fda06b5b956e9908c6eb83864990dd589ca8e Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Wed, 4 Sep 2024 11:07:52 +0700 Subject: update mobile view category --- src/lib/product/components/CategorySection.jsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/lib') diff --git a/src/lib/product/components/CategorySection.jsx b/src/lib/product/components/CategorySection.jsx index e8ebb095..a287fa78 100644 --- a/src/lib/product/components/CategorySection.jsx +++ b/src/lib/product/components/CategorySection.jsx @@ -63,7 +63,7 @@ const CategorySection = ({ categories }) => { {isMobile && (
- {displayedCategories.map((category) => ( + {categories.map((category) => (
@@ -74,6 +74,7 @@ const CategorySection = ({ categories }) => { width={56} height={48} alt={category?.name} + className="p-3" />

{category?.name} @@ -85,7 +86,7 @@ const CategorySection = ({ categories }) => { ))} - {categories.length > 10 && ( + {/* {categories.length > 10 && (
- )} + )} */}

)} -- cgit v1.2.3 From 3b466589463522ded2f172474a0de533ef02d92c Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 6 Sep 2024 09:52:38 +0700 Subject: back to code --- src/lib/home/api/categoryManagementApi.js | 47 ++++------------------------- src/lib/home/components/CategoryDynamic.jsx | 21 ------------- 2 files changed, 6 insertions(+), 62 deletions(-) (limited to 'src/lib') diff --git a/src/lib/home/api/categoryManagementApi.js b/src/lib/home/api/categoryManagementApi.js index 63edd629..b70d60ce 100644 --- a/src/lib/home/api/categoryManagementApi.js +++ b/src/lib/home/api/categoryManagementApi.js @@ -1,43 +1,8 @@ -// 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 const fetchPopulerProductSolr = async (category_id_ids) => { - let sort ='sort=qty_sold_f desc'; - try { - const queryParams = new URLSearchParams({ q: category_id_ids }); - const response = await fetch(`/solr/category_management/query?q=*:*&q.op=OR&indent=true`); - 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) => { - const result = []; - for (const promotion of promotions) { - const data = { - id: promotion.id, - name: promotion.name_s, - image: promotion.image_s, - sequence: promotion.sequence_i, - numFound: promotion.numFound_i, - categories_level_2:promotion.categories_level_2 - }; - result.push(data); - } - return result; - }; \ No newline at end of file +export default categoryManagementApi diff --git a/src/lib/home/components/CategoryDynamic.jsx b/src/lib/home/components/CategoryDynamic.jsx index 11a15d6d..14015e28 100644 --- a/src/lib/home/components/CategoryDynamic.jsx +++ b/src/lib/home/components/CategoryDynamic.jsx @@ -14,27 +14,6 @@ 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 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/lib') 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/lib') 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 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/lib') 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