From 1a3bef5d01fb50ad731f269f0a76b5c5fd52813d Mon Sep 17 00:00:00 2001
From: it-fixcomart <it@fixcomart.co.id>
Date: Mon, 22 Jul 2024 16:56:30 +0700
Subject: <update brand view

---
 src/lib/home/components/PreferredBrand.jsx | 41 ++++++++++++++++++++++--------
 1 file changed, 30 insertions(+), 11 deletions(-)

(limited to 'src/lib/home/components/PreferredBrand.jsx')

diff --git a/src/lib/home/components/PreferredBrand.jsx b/src/lib/home/components/PreferredBrand.jsx
index 571c4745..fc899665 100644
--- a/src/lib/home/components/PreferredBrand.jsx
+++ b/src/lib/home/components/PreferredBrand.jsx
@@ -1,4 +1,5 @@
-import { Swiper, SwiperSlide } from 'swiper/react'
+import { Swiper, SwiperProps, SwiperSlide }  from 'swiper/react';
+import  { Navigation, Pagination, Autoplay } from 'swiper';
 import usePreferredBrand from '../hooks/usePreferredBrand'
 import PreferredBrandSkeleton from './Skeleton/PreferredBrandSkeleton'
 import BrandCard from '@/lib/brand/components/BrandCard'
@@ -10,6 +11,22 @@ const PreferredBrand = () => {
   let params = 'prioritas'
   const { preferredBrands } = usePreferredBrand(query)
   const { isMobile, isDesktop } = useDevice()
+  const swiperBanner = {
+    modules:[Navigation, Pagination, Autoplay],
+    autoplay: {
+      delay: 4000,
+      disableOnInteraction: false
+    },
+    loop: true,
+    className: 'h-[70px] md:h-[100px] w-full',
+    slidesPerView: isMobile ? 4 : 8,
+    spaceBetween: isMobile ? 12 : 0,
+    pagination: {
+      dynamicBullets: true,
+      dynamicMainBullets: isMobile ? 6 : 8,
+      clickable: true,
+    }
+  }
 
   return (
     <div className='px-4 sm:px-0'>
@@ -21,16 +38,18 @@ const PreferredBrand = () => {
           </Link>
         )}
       </div>
-      {preferredBrands.isLoading && <PreferredBrandSkeleton />}
-      {!preferredBrands.isLoading && (
-        <Swiper slidesPerView={isMobile ? 3.5 : 7.5} spaceBetween={isMobile ? 12 : 24} freeMode>
-          {preferredBrands.data?.data.map((brand) => (
-            <SwiperSlide key={brand.id}>
-              <BrandCard brand={brand} />
-            </SwiperSlide>
-          ))}
-        </Swiper>
-      )}
+      <div className='border rounded border-gray_r-6'>
+        {preferredBrands.isLoading && <PreferredBrandSkeleton />}
+        {!preferredBrands.isLoading && (
+          <Swiper {...swiperBanner}>
+            {preferredBrands.data?.data.map((brand) => (
+              <SwiperSlide key={brand.id}>
+                <BrandCard brand={brand} />
+              </SwiperSlide>
+            ))}
+          </Swiper>
+        )}
+      </div>
     </div>
   )
 }
-- 
cgit v1.2.3


From b1341b76e94da9e64549768646bb54d2836976d0 Mon Sep 17 00:00:00 2001
From: it-fixcomart <it@fixcomart.co.id>
Date: Tue, 23 Jul 2024 14:29:08 +0700
Subject: <iman> update categories management

---
 src/lib/home/components/PreferredBrand.jsx | 44 ++++++++++++++++++++++++------
 1 file changed, 36 insertions(+), 8 deletions(-)

(limited to 'src/lib/home/components/PreferredBrand.jsx')

diff --git a/src/lib/home/components/PreferredBrand.jsx b/src/lib/home/components/PreferredBrand.jsx
index fc899665..ae12505d 100644
--- a/src/lib/home/components/PreferredBrand.jsx
+++ b/src/lib/home/components/PreferredBrand.jsx
@@ -1,14 +1,42 @@
-import { Swiper, SwiperProps, SwiperSlide }  from 'swiper/react';
+import { Swiper, SwiperSlide } from 'swiper/react'
 import  { Navigation, Pagination, Autoplay } from 'swiper';
+import { useCallback, useEffect, useState } from 'react'
 import usePreferredBrand from '../hooks/usePreferredBrand'
 import PreferredBrandSkeleton from './Skeleton/PreferredBrandSkeleton'
 import BrandCard from '@/lib/brand/components/BrandCard'
 import useDevice from '@/core/hooks/useDevice'
 import Link from '@/core/components/elements/Link/Link'
+import axios from 'axios'
 
 const PreferredBrand = () => {
   let query = 'level_s'
   let params = 'prioritas'
+  const [isLoading, setIsLoading] = useState(true)
+  const [startWith, setStartWith] = useState(null)
+  const [manufactures, setManufactures] = useState([])
+
+  const loadBrand = useCallback(async () => {
+    setIsLoading(true)
+    const name = startWith ? `${startWith}*` : ''
+    const result = await axios(`${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/brands?params=${name}`)
+    
+    setIsLoading(false)
+    setManufactures((manufactures) => [...result.data])
+  }, [startWith])
+
+  const toggleStartWith = (alphabet) => {
+    setManufactures([])
+    if (alphabet == startWith) {
+      setStartWith(null)
+      return
+    }
+    setStartWith(alphabet)
+  }
+
+  useEffect(() => {
+    loadBrand()
+  }, [loadBrand])
+
   const { preferredBrands } = usePreferredBrand(query)
   const { isMobile, isDesktop } = useDevice()
   const swiperBanner = {
@@ -27,7 +55,7 @@ const PreferredBrand = () => {
       clickable: true,
     }
   }
-
+  const preferredBrandsData = manufactures ? manufactures.slice(0, 20) : []
   return (
     <div className='px-4 sm:px-0'>
       <div className='flex justify-between items-center mb-4'>
@@ -39,12 +67,12 @@ const PreferredBrand = () => {
         )}
       </div>
       <div className='border rounded border-gray_r-6'>
-        {preferredBrands.isLoading && <PreferredBrandSkeleton />}
-        {!preferredBrands.isLoading && (
+        {manufactures.isLoading && <PreferredBrandSkeleton />}
+        {!manufactures.isLoading && (
           <Swiper {...swiperBanner}>
-            {preferredBrands.data?.data.map((brand) => (
-              <SwiperSlide key={brand.id}>
-                <BrandCard brand={brand} />
+            {preferredBrandsData.map((manufacture) => (
+              <SwiperSlide key={manufacture.id}>
+                <BrandCard brand={manufacture} />
               </SwiperSlide>
             ))}
           </Swiper>
@@ -54,4 +82,4 @@ const PreferredBrand = () => {
   )
 }
 
-export default PreferredBrand
+export default PreferredBrand
\ No newline at end of file
-- 
cgit v1.2.3

