From 60e116965f42e7e8944c0adcc4bc7bc5fc3a485a Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Wed, 6 Aug 2025 10:58:15 +0700 Subject: media banner --- src/lib/home/api/mediaNews.js | 0 src/lib/home/components/MediaNews.jsx | 107 ++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 src/lib/home/api/mediaNews.js create mode 100644 src/lib/home/components/MediaNews.jsx diff --git a/src/lib/home/api/mediaNews.js b/src/lib/home/api/mediaNews.js new file mode 100644 index 00000000..e69de29b diff --git a/src/lib/home/components/MediaNews.jsx b/src/lib/home/components/MediaNews.jsx new file mode 100644 index 00000000..1e538d48 --- /dev/null +++ b/src/lib/home/components/MediaNews.jsx @@ -0,0 +1,107 @@ +import Link from '@/core/components/elements/Link/Link'; +import Image from 'next/image'; +import { bannerApi } from '@/api/bannerApi'; +import useDevice from '@/core/hooks/useDevice'; +import { Swiper, SwiperSlide } from 'swiper/react'; +import BannerPromoSkeleton from '../components/Skeleton/BannerPromoSkeleton'; + +import { useEffect, useState } from 'react'; +const { useQuery } = require('react-query'); +const BannerSection = () => { + const { isMobile, isDesktop } = useDevice(); + const [data, setData] = useState(null); + const [shouldFetch, setShouldFetch] = useState(false); + const [ isLoading, setIsLoading] = useState(true); + useEffect(() => { + const fetchData = async () => { + try { + const res = await fetch(`/api/hero-banner?type=banner-promotion`); + const { data } = await res.json(); + if (data) { + setData(data); + } + } catch (e) { + console.log(e); + } finally { + setIsLoading(false); + } + }; + + fetchData(); + }, []); + + const promotionProgram = data; + + if (isLoading) { + return ; + } + + if (!promotionProgram || promotionProgram.length === 0) { + return null; + } + + return ( +
+
+

+ {' '} + + Promo Tersedia + +

+ {isDesktop && ( + + Lihat Semua + + )} + {isMobile && ( + + Lihat Semua + + )} +
+ {isDesktop && promotionProgram && promotionProgram?.length > 0 && ( +
+ {promotionProgram?.map((banner) => ( + + {banner.name} + + ))} +
+ )} + + {isMobile && ( + + {promotionProgram?.map((banner) => ( + + + {banner.name} + + + ))} + + )} +
+ ); +}; + +export default BannerSection; -- cgit v1.2.3