From 56ba7cb194e8a664cb0144e7091159e10b8c56ab Mon Sep 17 00:00:00 2001 From: Miqdad Date: Fri, 6 Jun 2025 13:20:29 +0700 Subject: private banner section --- src/lib/home/components/BannerSection.jsx | 158 +++++++++++++++++++++--------- 1 file changed, 111 insertions(+), 47 deletions(-) (limited to 'src/lib/home/components/BannerSection.jsx') diff --git a/src/lib/home/components/BannerSection.jsx b/src/lib/home/components/BannerSection.jsx index 898f1bf5..1eac9592 100644 --- a/src/lib/home/components/BannerSection.jsx +++ b/src/lib/home/components/BannerSection.jsx @@ -1,62 +1,126 @@ import Link from '@/core/components/elements/Link/Link'; -import Image from 'next/image'; import { useEffect, useState } from 'react'; -import { bannerApi } from '../../../api/bannerApi'; - -const { useQuery } = require('react-query'); -const { default: bannerSectionApi } = require('../api/bannerSectionApi'); +import useDevice from '@/core/hooks/useDevice'; +import { Swiper, SwiperSlide } from 'swiper/react'; const BannerSection = () => { - const [data, setData] = useState(null); - const [shouldFetch, setShouldFetch] = useState(false); - + const [privateBrandData, setPrivateBrandData] = useState([]); + const [homeBannerData, setHomeBannerData] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + const { isMobile, isDesktop } = useDevice(); useEffect(() => { - const fetchCategoryData = async () => { - const res = await fetch('/api/banner-section'); - const { data } = await res.json(); - if (data) { - setData(data); + const fetchAllBanners = async () => { + try { + // Fetch private brand banners + const privateBrandRes = await fetch( + '/api/banner-section?type=private-brand' + ); + if (privateBrandRes.ok) { + const privateBrandResult = await privateBrandRes.json(); + setPrivateBrandData(privateBrandResult.data || []); + } + + // Fetch home banners + const homeBannerRes = await fetch( + '/api/banner-section?type=home-banner' + ); + if (homeBannerRes.ok) { + const homeBannerResult = await homeBannerRes.json(); + setHomeBannerData(homeBannerResult.data || []); + } + } catch (err) { + setError('Network error'); + } finally { + setLoading(false); } }; - fetchCategoryData(); + fetchAllBanners(); }, []); - // const fetchBannerSection = async () => await bannerSectionApi(); - const getBannerSection = useQuery( - 'bannerSection', - bannerApi({ type: 'home-banner' }), - { - enabled: shouldFetch, - onSuccess: (data) => { - if (data) { - localStorage.setItem('Homepage_bannerSection', JSON.stringify(data)); - setData(data); - } - }, - } - ); + // if (loading) return
Loading...
; + // if (error) return
Error: {error}
; - const bannerSection = data; return ( - bannerSection && - bannerSection?.length > 0 && ( -
- {bannerSection?.map((banner) => ( - - {banner.name} - - ))} -
- ) +
+ {/* Private Brand Section */} + {privateBrandData && privateBrandData.length > 0 && ( +
+
+ Private Brand +
+ + {/* Desktop Grid View */} + {isDesktop && ( +
+ {privateBrandData.map((banner, index) => ( + + {banner.name + + ))} +
+ )} + + {/* Mobile Swiper View */} + {isMobile && ( + + {privateBrandData.map((banner, index) => ( + + + {banner.name + + + ))} + + )} +
+ )} + + {/* Home Banner Section */} + {homeBannerData && homeBannerData.length > 0 && ( +
+ {homeBannerData.map((banner, index) => ( +
+ + {banner.name { + e.target.style.display = 'none'; + }} + /> + +
+ ))} +
+ )} +
); }; -- cgit v1.2.3