import { useKeenSlider } from 'keen-slider/react' import React, { useEffect } from 'react' import 'keen-slider/keen-slider.min.css' import { CustomCarouselArrow } from './CustomArrow/CustomCarouselArrow' import s from './CarouselCommon.module.scss' import { TOptionsEvents } from 'keen-slider' import classNames from 'classnames' import CustomDot from './CustomDot/CustomDot' export interface CarouselCommonProps { data: T[] Component: React.ComponentType isArrow?: Boolean isDot?: Boolean itemKey: String option: TOptionsEvents keenClassname?: string isPadding?: boolean defaultComponentProps?: object } const CarouselCommon = ({ data, Component, itemKey, keenClassname, isPadding = false, isArrow = true, isDot = false, defaultComponentProps, option: { slideChanged,slidesPerView, ...sliderOption }, }: CarouselCommonProps) => { const [currentSlide, setCurrentSlide] = React.useState(0) const [dotArr, setDotArr] = React.useState([]) const [sliderRef, slider] = useKeenSlider({ ...sliderOption, slidesPerView, slideChanged(s) { setCurrentSlide(s.details().relativeSlide) }, }) useEffect(() => { if(isDot && slider && data){ let array:number[] let number = data.length - Math.floor(slider.details().slidesPerView - 1) if(number<1){ number = 1 } array = [...Array(number).keys()] setDotArr(array) } }, [isDot,slider,data]) const handleRightArrowClick = () => { slider.next() } const handleLeftArrowClick = () => { slider.prev() } const onDotClick = (index:number) => { slider.moveToSlideRelative(index) } return (
{data?.map((props, index) => { const allProps = defaultComponentProps ? { ...props, ...defaultComponentProps } : props return (
) })}
{slider && isArrow && ( <> )} {slider && isDot && (
{dotArr.map((index) => { return ( ) })}
)}
) } export default CarouselCommon