From 3f070a917666b5838fb433fa5d5e93d9753eb6fb Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 1 Aug 2025 09:11:12 +0700 Subject: export xls&csv --- src/lib/home/components/MediaBrand.jsx | 90 ++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/lib/home/components/MediaBrand.jsx (limited to 'src/lib/home/components') diff --git a/src/lib/home/components/MediaBrand.jsx b/src/lib/home/components/MediaBrand.jsx new file mode 100644 index 00000000..b7a30503 --- /dev/null +++ b/src/lib/home/components/MediaBrand.jsx @@ -0,0 +1,90 @@ +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 = ''; + 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/preferredBrand?rows=20` + ); + setIsLoading(false); + setManufactures((manufactures) => [...result.data]); + }, [startWith]); + + const toggleStartWith = (alphabet) => { + setManufactures([]); + if (alphabet == startWith) { + setStartWith(null); + return; + } + setStartWith(alphabet); + }; + + useEffect(() => { + loadBrand(); + }, []); + + // 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, + }, + }; + const preferredBrandsData = manufactures ? manufactures.slice(0, 20) : []; + return ( +
+
+

+ + Brand Pilihan + +

+ {isDesktop && ( + + Lihat Semua + + )} +
+
+ {manufactures.isLoading && } + {!manufactures.isLoading && ( + + {preferredBrandsData.map((manufacture) => ( + + + + ))} + + )} +
+
+ ); +}; + +export default PreferredBrand; -- cgit v1.2.3