UNPKG

@zohodesk/dot

Version:

In this Library, we Provide Some Basic Components to Build Your Application

55 lines (50 loc) 1.67 kB
import { useState, useEffect, useCallback, useRef } from 'react'; const autoplayDelay = 50; // 5000ms divided by 100 for smoother animation const useOnboardingSlider = _ref => { let { isAutoPlayAnimation, sliderData } = _ref; const [currentSlide, setCurrentSlide] = useState(0); const [autoplay, setAutoplay] = useState(true); const progressRef = useRef(0); const totalSlidesArrayLen = sliderData.length; const handleSliderIndexChange = useCallback(index => { progressRef.current = 0; setCurrentSlide(index); }, []); const handleSliderNext = useCallback(() => { progressRef.current = 0; setCurrentSlide(currentSlide + 1); setAutoplay(false); }, [currentSlide]); const handleMouseEnter = useCallback(() => { setAutoplay(false); }, []); const handleMouseLeave = useCallback(() => { setAutoplay(true); }, []); useEffect(() => { let progressInterval; if (autoplay && isAutoPlayAnimation && totalSlidesArrayLen > 1) { progressInterval = setInterval(() => { progressRef.current = progressRef.current < 100 ? progressRef.current + 1 : 0; if (progressRef.current === 0) { setCurrentSlide((currentSlide + 1) % totalSlidesArrayLen); } }, autoplayDelay); } return () => clearInterval(progressInterval); }, [autoplay, currentSlide, isAutoPlayAnimation]); const translateMovementVal = -currentSlide * 100; return { sliderIndex: currentSlide, isAnimationPaused: !autoplay, translateMovementVal, handleMouseEnter, handleMouseLeave, handleSliderIndexChange, handleSliderNext }; }; export default useOnboardingSlider;