summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorit-fixcomart <it@fixcomart.co.id>2024-07-08 16:08:21 +0700
committerit-fixcomart <it@fixcomart.co.id>2024-07-08 16:08:21 +0700
commit8ce480fedfa91e16d9adb997311a999aaabaafb2 (patch)
tree9e397abb27dab563f9c7c389afcdbccb61fe9350
parent2fbf5023e0d29765458b3385f354b416d08c42c4 (diff)
<iman> update testing swiper
-rw-r--r--src-migrate/modules/promo/components/PromoList.tsx (renamed from src-migrate/modules/promo/components/PromoList.jsx)86
1 files changed, 52 insertions, 34 deletions
diff --git a/src-migrate/modules/promo/components/PromoList.jsx b/src-migrate/modules/promo/components/PromoList.tsx
index a7356d71..1b359857 100644
--- a/src-migrate/modules/promo/components/PromoList.jsx
+++ b/src-migrate/modules/promo/components/PromoList.tsx
@@ -1,14 +1,23 @@
import React, { useEffect, useState } from 'react';
-import ProductPromoCard from '../../../../src-migrate/modules/product-promo/components/Card';
+import ProductPromoCard from '../../product-promo/components/Card';
import { fetchPromoItemsSolr } from '../../../../src/api/promoApi';
-import { Swiper, SwiperSlide } from 'swiper/react';
+import { Swiper, SwiperProps, SwiperSlide } from 'swiper/react';
import useDevice from '@/core/hooks/useDevice';
import LogoSpinner from '../../../../src/core/components/elements/Spinner/LogoSpinner';
import usePromoStore from './promoStore';
import { ChevronRightIcon } from '@heroicons/react/24/outline';
-import Link from '@/core/components/elements/Link/Link'
+import Link from "next/link"
+import SwiperCore, { Navigation, Pagination } from 'swiper';
+import { IPromotion } from '~/types/promotion';
-const PromoList = ({ selectedPromo }) => {
+SwiperCore.use([Navigation, Pagination]);
+
+interface PromoListProps {
+ selectedPromo: string; // Tipe selectedPromo ditetapkan sebagai string
+}
+
+const PromoList: React.FC<PromoListProps> = ({ selectedPromo }) => {
+ const { isMobile } = useDevice();
const {
title,
slug,
@@ -21,9 +30,8 @@ const PromoList = ({ selectedPromo }) => {
setPromoData,
setIsLoading,
} = usePromoStore();
-
- const { isMobile } = useDevice();
-
+
+
useEffect(() => {
if (selectedPromo === 'Bundling') {
setTitle('Kombinasi Kilat Pilihan Kami!');
@@ -41,7 +49,7 @@ const PromoList = ({ selectedPromo }) => {
const fetchPromotions = async () => {
setIsLoading(true);
try {
- const items = await fetchPromoItemsSolr(`type_value_s:${slug}`, 0, 10);
+ const items = await fetchPromoItemsSolr(`type_value_s:${slug}`, 0, 10);
setPromoItems(items);
const promoDataPromises = items.map(async (item) => {
@@ -52,7 +60,7 @@ const PromoList = ({ selectedPromo }) => {
return [];
}
});
-
+
const promoDataArray = await Promise.all(promoDataPromises);
const mergedPromoData = promoDataArray.reduce((accumulator, currentValue) => accumulator.concat(currentValue), []);
setPromoData(mergedPromoData);
@@ -71,34 +79,44 @@ const PromoList = ({ selectedPromo }) => {
fetchPromotions();
}
}, [slug, setPromoItems, setPromoData, setIsLoading]);
-
+
+ const swiperBanner: SwiperProps = {
+ modules: [Navigation],
+ className: 'h-[400px] w-full',
+ slidesPerView: isMobile ? 1.1 : 3.25,
+ spaceBetween: 10,
+ navigation:isMobile? true : false,
+ allowTouchMove:isMobile? false : true,
+ };
return (
- <div className='min-h-[360px]'>
- <div className='flex justify-between items-center'>
- <h1 className='text-h-sm md:text-h-lg font-semibold py-4'>{title}</h1>
- <div>
- <Link href={`/shop/promo/${slug}`} className='!text-red-500 font-semibold'>
- Lihat Semua
- </Link>
+ <>
+ <div className='min-h-[360px]'>
+ <div className='flex justify-between items-center'>
+ <h1 className='text-h-sm md:text-h-lg font-semibold py-4'>{title}</h1>
+ <div>
+ <Link href={`/shop/promo/${slug}`} className='!text-red-500 font-semibold'>
+ Lihat Semua
+ </Link>
+ </div>
</div>
+ {isLoading ? (
+ <div className="loading-spinner flex justify-center">
+ <LogoSpinner width={48} height={48} />
+ </div>
+ ) : (
+ <Swiper {...swiperBanner}>
+ {promoData?.map((promotion: IPromotion) => (
+ <SwiperSlide key={promotion.id}>
+ <div className="min-w-36 max-w-[400px] mb-[20px] sm:w-full md:w-full lg:w-full xl:w-full">
+ <ProductPromoCard promotion={promotion} />
+ </div>
+ </SwiperSlide>
+ ))}
+ </Swiper>
+ )}
</div>
- {isLoading ? (
- <div className="loading-spinner flex justify-center">
- <LogoSpinner width={48} height={48} />
- </div>
- ) : (
- <Swiper slidesPerView={isMobile ? 1.2 : 3.25} spaceBetween={12} freeMode >
- {promoData?.map((promotion) => (
- <SwiperSlide key={promotion.id}>
- <div className="min-w-36 max-w-[400px] mb-[20px] sm:w-full md:w-full lg:w-full xl:w-full">
- <ProductPromoCard promotion={promotion} />
- </div>
- </SwiperSlide>
- ))}
- </Swiper>
- )}
- </div>
+ </>
);
};
-export default PromoList; \ No newline at end of file
+export default PromoList;