summaryrefslogtreecommitdiff
path: root/src/lib/product/components/ProductSlider.jsx
diff options
context:
space:
mode:
authorIT Fixcomart <it@fixcomart.co.id>2023-03-01 09:18:52 +0000
committerIT Fixcomart <it@fixcomart.co.id>2023-03-01 09:18:52 +0000
commita7abbf4ddc70068620e9f44b74dc162ce2e16ee2 (patch)
tree74f66253717515d364ce74bd8275015c1f829cbc /src/lib/product/components/ProductSlider.jsx
parent90e1edab9b6a8ccc09a49fed3addbec2cbc4e4c3 (diff)
parenta1b9b647a6c4bda1f5db63879639d44543f9557e (diff)
Merged in refactor (pull request #1)
Refactor
Diffstat (limited to 'src/lib/product/components/ProductSlider.jsx')
-rw-r--r--src/lib/product/components/ProductSlider.jsx64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/lib/product/components/ProductSlider.jsx b/src/lib/product/components/ProductSlider.jsx
new file mode 100644
index 00000000..060d4638
--- /dev/null
+++ b/src/lib/product/components/ProductSlider.jsx
@@ -0,0 +1,64 @@
+import { Swiper, SwiperSlide } from 'swiper/react'
+import { FreeMode } from 'swiper'
+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'
+
+const bannerClassName =
+ 'absolute rounded-r top-0 left-0 h-full max-w-[52%] idt-transition border border-gray_r-6'
+
+const ProductSlider = ({ products, simpleTitle = false, bannerMode = false }) => {
+ const bannerRef = useRef('')
+
+ const changeBannerOpacity = (swiper) => {
+ if (!bannerMode) return
+ const calculateOpacity = (132 + swiper.translate) / 100
+ bannerRef.current.style = `opacity: ${calculateOpacity > 0 ? calculateOpacity : 0}`
+ }
+
+ return (
+ <>
+ {bannerMode && (
+ <div ref={bannerRef}>
+ <Image
+ src={products.banner.image}
+ alt={products.banner.name}
+ style={{ opacity: 1 }}
+ className={bannerClassName}
+ />
+ </div>
+ )}
+ <Swiper
+ freeMode={{ enabled: true, sticky: false }}
+ slidesPerView={2.2}
+ spaceBetween={8}
+ 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>
+ ))}
+ </Swiper>
+ </>
+ )
+}
+
+export default ProductSlider