summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-05-20 10:19:13 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-05-20 10:19:13 +0700
commit9aa0e5e63bd69ac67bd24d1c64f4c78662dd60d6 (patch)
tree6207a7a647ec4d68f3930f4906cfa3c3baa2347e /src
parent1d91eceb44f6169442e8129fedc90e5335e44588 (diff)
Fix product slider
Diffstat (limited to 'src')
-rw-r--r--src/lib/product/components/ProductSlider.jsx63
1 files changed, 39 insertions, 24 deletions
diff --git a/src/lib/product/components/ProductSlider.jsx b/src/lib/product/components/ProductSlider.jsx
index 931a8db7..b511eea5 100644
--- a/src/lib/product/components/ProductSlider.jsx
+++ b/src/lib/product/components/ProductSlider.jsx
@@ -4,15 +4,16 @@ import ProductCard from './ProductCard'
import 'swiper/css'
import Image from '@/core/components/elements/Image/Image'
import Link from '@/core/components/elements/Link/Link'
-import { useRef } from 'react'
+import { useMemo, useRef } from 'react'
import useDevice from '@/core/hooks/useDevice'
+import MobileView from '@/core/components/views/MobileView'
+import DesktopView from '@/core/components/views/DesktopView'
const bannerClassName =
'absolute rounded-r top-0 left-0 h-full w-auto md:w-[20%] idt-transition border border-gray_r-6'
const ProductSlider = ({ products, simpleTitle = false, bannerMode = false }) => {
const bannerRef = useRef('')
- const { isMobile, isDesktop } = useDevice()
const changeBannerOpacity = (swiper) => {
if (!bannerMode) return
@@ -20,6 +21,32 @@ const ProductSlider = ({ products, simpleTitle = false, bannerMode = false }) =>
bannerRef.current.style = `opacity: ${calculateOpacity > 0 ? calculateOpacity : 0}`
}
+ const swiperProps = {
+ onSliderMove: changeBannerOpacity,
+ onSlideChangeTransitionStart: changeBannerOpacity,
+ onSlideChangeTransitionEnd: changeBannerOpacity,
+ prefix: 'product',
+ modules: [FreeMode],
+ freeMode: { enabled: true, sticky: false }
+ }
+
+ const swiperContent = useMemo(() => {
+ return (
+ <>
+ {bannerMode && (
+ <SwiperSlide>
+ <Link href={products.banner.url} className='w-full h-full block'></Link>
+ </SwiperSlide>
+ )}
+ {products?.products?.map((product, index) => (
+ <SwiperSlide key={index}>
+ <ProductCard product={product} simpleTitle={simpleTitle} />
+ </SwiperSlide>
+ ))}
+ </>
+ )
+ }, [bannerMode, products, simpleTitle])
+
return (
<>
{bannerMode && (
@@ -32,29 +59,17 @@ const ProductSlider = ({ products, simpleTitle = false, bannerMode = false }) =>
/>
</div>
)}
- {(isMobile || isDesktop) && (
- <Swiper
- freeMode={{ enabled: true, sticky: false }}
- slidesPerView={isMobile ? 2.2 : 5.6}
- spaceBetween={isMobile ? 8 : 16}
- onSliderMove={changeBannerOpacity}
- onSlideChangeTransitionEnd={changeBannerOpacity}
- onSlideChangeTransitionStart={changeBannerOpacity}
- prefix='product'
- modules={[FreeMode]}
- >
- {bannerMode && (
- <SwiperSlide>
- <Link href={products.banner.url} className='w-full h-full block'></Link>
- </SwiperSlide>
- )}
- {products?.products?.map((product, index) => (
- <SwiperSlide key={index}>
- <ProductCard product={product} simpleTitle={simpleTitle} />
- </SwiperSlide>
- ))}
+ <MobileView>
+ <Swiper slidesPerView={2.2} spaceBetween={12} {...swiperProps}>
+ {swiperContent}
</Swiper>
- )}
+ </MobileView>
+
+ <DesktopView>
+ <Swiper slidesPerView={5.6} spaceBetween={16} {...swiperProps}>
+ {swiperContent}
+ </Swiper>
+ </DesktopView>
</>
)
}