summaryrefslogtreecommitdiff
path: root/src/lib/home
diff options
context:
space:
mode:
authorit-fixcomart <it@fixcomart.co.id>2024-07-29 15:23:01 +0700
committerit-fixcomart <it@fixcomart.co.id>2024-07-29 15:23:01 +0700
commita59ed6e73a599a82d6ef248c57ad29f2ab9cb15d (patch)
treed87d37a5dafda05e44123be8a0cf1791d086e3ae /src/lib/home
parentb951ed0de4285076a71f57a0e440b5e68d4a44bd (diff)
<iman> Merge branch 'Feature/category-management' into development
Diffstat (limited to 'src/lib/home')
-rw-r--r--src/lib/home/api/CategoryPilihanApi.js8
-rw-r--r--src/lib/home/components/CategoryDynamic.jsx50
-rw-r--r--src/lib/home/components/CategoryPilihan.jsx14
-rw-r--r--src/lib/home/hooks/useCategoryPilihan.js13
4 files changed, 63 insertions, 22 deletions
diff --git a/src/lib/home/api/CategoryPilihanApi.js b/src/lib/home/api/CategoryPilihanApi.js
new file mode 100644
index 00000000..8a0b38d3
--- /dev/null
+++ b/src/lib/home/api/CategoryPilihanApi.js
@@ -0,0 +1,8 @@
+import odooApi from '@/core/api/odooApi'
+
+const categoryPilihanApi = async () => {
+ const dataCategoryPilihan = await odooApi('GET', '/api/v1/lob_homepage')
+ return dataCategoryPilihan
+}
+
+export default categoryPilihanApi
diff --git a/src/lib/home/components/CategoryDynamic.jsx b/src/lib/home/components/CategoryDynamic.jsx
index fa1df286..6ab03ec3 100644
--- a/src/lib/home/components/CategoryDynamic.jsx
+++ b/src/lib/home/components/CategoryDynamic.jsx
@@ -2,38 +2,58 @@ import React, { useEffect, useState } from 'react';
import useCategoryManagement from '../hooks/useCategoryManagement';
import NextImage from 'next/image';
import Link from "next/link";
-import router from 'next/router';
import { createSlug } from '@/core/utils/slug';
+import odooApi from '@/core/api/odooApi';
const CategoryDynamic = () => {
const { categoryManagement } = useCategoryManagement();
+ const [categoryData, setCategoryData] = useState({});
+ const [subCategoryData, setSubCategoryData] = useState({});
+
+ useEffect(() => {
+ const fetchCategoryData = async () => {
+ if (categoryManagement && categoryManagement.data) {
+ const updatedCategoryData = {};
+ const updatedSubCategoryData = {};
+
+ for (const category of categoryManagement.data) {
+ // Calculate level 1 products
+ const countLevel1 = await odooApi('GET', `/api/v1/category/numFound?parent_id=${category.categoryIdI}`);
+ // console.log("countLevel1.child",countLevel1)
+
+ updatedCategoryData[category.categoryIdI] = countLevel1?.numFound;
+
+
+ // Calculate level 2 products for each sub-category
+ for (const subCategory of countLevel1.children) {
+ updatedSubCategoryData[subCategory.id] = subCategory.numFound;
+ }
+ }
- const calculateLevel3Products = (category) => {
- return category.childFrontendIdI.reduce((total, child) => total + (child.numFound || 0), 0);
- };
+ setCategoryData(updatedCategoryData);
+ setSubCategoryData(updatedSubCategoryData);
+ }
+ };
- const calculateLevel2Products = (category) => {
- return category.categories.reduce((total, subCategory) => {
- const level3Products = calculateLevel3Products(subCategory);
- return total + (subCategory.numFound || 0) + level3Products;
- }, 0);
- };
+ fetchCategoryData();
+ }, [categoryManagement, categoryData]);
+
return (
<div>
{categoryManagement && categoryManagement.data?.map((category) => {
- const countLevel2 = calculateLevel2Products(category);
-
+ const countLevel1 = categoryData[category.categoryIdI] || 0;
+
return (
<div key={category.id}>
<div className='bagian-judul flex flex-row justify-start items-center gap-3 mb-4 mt-4'>
<div className='font-semibold sm:text-h-lg mr-2'>{category.name}</div>
- <p className='text-gray_r-10 text-sm'>{countLevel2} Produk tersedia</p>
+ <p className='text-gray_r-10 text-sm'>{countLevel1} Produk tersedia</p>
<Link href={createSlug('/shop/category/', category?.name, category?.categoryIdI)} className="!text-red-500 font-semibold">Lihat Semua</Link>
</div>
<div className='grid grid-cols-3 gap-2'>
{category.categories.map((subCategory) => {
- const countLevel3 = calculateLevel3Products(subCategory);
+ const countLevel2 = subCategoryData[subCategory.idLevel2] || 0;
return (
<div key={subCategory.id} className='border rounded justify-start items-start'>
@@ -48,7 +68,7 @@ const CategoryDynamic = () => {
/>
<div className='bagian-judul flex flex-col justify-center items-start gap-2 ml-2'>
<div className='font-semibold text-lg mr-2'>{subCategory.name}</div>
- <p className='text-gray_r-10 text-sm'>{(subCategory.numFound || 0) + countLevel3} Produk</p>
+ <p className='text-gray_r-10 text-sm'>{countLevel2} Produk tersedia</p>
<Link href={createSlug('/shop/category/', subCategory?.name, subCategory?.idLevel2)} className="!text-red-500 font-semibold">Lihat Semua</Link>
</div>
</div>
diff --git a/src/lib/home/components/CategoryPilihan.jsx b/src/lib/home/components/CategoryPilihan.jsx
index 5aa1fbcc..6efc1070 100644
--- a/src/lib/home/components/CategoryPilihan.jsx
+++ b/src/lib/home/components/CategoryPilihan.jsx
@@ -6,11 +6,11 @@ import { useEffect, useState } from 'react';
import { bannerApi } from '../../../api/bannerApi';
const { useQuery } = require('react-query')
import { HeroBannerSkeleton } from '../../../components/skeleton/BannerSkeleton';
-
+import useCategoryPilihan from '../hooks/useCategoryPilihan';
const CategoryPilihan = ({ id, categories }) => {
+ const { categoryPilihan } = useCategoryPilihan();
const heroBanner = useQuery('categoryPilihan', bannerApi({ type: 'banner-category-list' }));
-
return (
<section>
<div className='flex flex-row items-center mb-4'>
@@ -38,19 +38,19 @@ const CategoryPilihan = ({ id, categories }) => {
)}
</div>
<div className="group/item grid grid-cols-6 gap-y-2 w-full h-full col-span-2 ">
- {categories.map((category) => (
- <div key={category.id} className="KartuInti h-48 w-60 max-w-sm lg:max-w-full flex flex-col border-[1px] border-gray-200 relative group">
+ {categoryPilihan?.data?.map((category) => (
+ <div className="KartuInti h-48 w-60 max-w-sm lg:max-w-full flex flex-col border-[1px] border-gray-200 relative group">
<div className='KartuB absolute h-48 w-60 inset-0 flex items-center justify-center '>
<div className="group/edit flex items-center justify-end h-48 w-60 flex-col group-hover/item:visible">
<div className=' h-36 flex justify-end items-end'>
- <Image className='group-hover:scale-105 transition-transform duration-300 ' src={category?.image1920? category?.image1920 : '/images/noimage.jpeg'} width={120} height={120} alt={category?.name} />
+ <Image className='group-hover:scale-105 transition-transform duration-300 ' src={category?.image? category?.image : '/images/noimage.jpeg'} width={120} height={120} alt={category?.name} />
</div>
- <h2 className="text-gray-700 content-center h-12 border-t-[1px] px-1 w-60 border-gray-200 font-normal text-sm text-center">{category?.name}</h2>
+ <h2 className="text-gray-700 content-center h-12 border-t-[1px] px-1 w-60 border-gray-200 font-normal text-sm text-center">{category?.industries}</h2>
</div>
</div>
<div className='KartuA relative inset-0 flex h-36 w-60 items-center justify-center opacity-0 group-hover:opacity-75 group-hover:bg-[#E20613] transition-opacity '>
<Link
- href={createSlug('/shop/category/', category?.name, category?.id)}
+ href={createSlug('/shop/lob/', category?.industries, category?.id)}
className='category-mega-box__parent text-white rounded-lg'
>
Lihat semua
diff --git a/src/lib/home/hooks/useCategoryPilihan.js b/src/lib/home/hooks/useCategoryPilihan.js
new file mode 100644
index 00000000..12a86f7e
--- /dev/null
+++ b/src/lib/home/hooks/useCategoryPilihan.js
@@ -0,0 +1,13 @@
+import categoryPilihanApi from '../api/CategoryPilihanApi'
+import { useQuery } from 'react-query'
+
+const useCategoryPilihan = () => {
+ const fetchCategoryPilihan = async () => await categoryPilihanApi()
+ const { isLoading, data } = useQuery('categoryPilihanApi', fetchCategoryPilihan)
+
+ return {
+ categoryPilihan: { data, isLoading }
+ }
+}
+
+export default useCategoryPilihan \ No newline at end of file