in src/components/newsletter-swiper/index.tsx [10:50]
export function NewsLetterSwiper() {
const { isPhone } = usePhone();
const [swiperRef, setSwiperRef] = useState<SwiperClass>();
const [progressCount, setProgressCount] = useState<number>(0);
const [stop, setStop] = useState<boolean>(false);
// Using ref to track progress internally
const progressRef = useRef(progressCount);
const handlePrevious = useCallback(() => {
swiperRef?.slidePrev();
}, [swiperRef]);
const handleNext = useCallback(() => {
swiperRef?.slideNext();
}, [swiperRef]);
useAnimationFrame(deltaTime => {
if (!stop) {
const newProgress = progressRef.current + deltaTime * 0.02;
if (newProgress >= 100) {
setProgressCount(0); // Reset state after reaching 100%
progressRef.current = 0;
setTimeout(handleNext, 0); // Delay to avoid direct state change within render
} else {
progressRef.current = newProgress;
setProgressCount(newProgress); // Update UI state
}
}
}, stop);
const pagination = {
clickable: true,
renderBullet: function (index, className) {
return '<span class="' + className + '"></span>';
},
};
return (
<div className="container pt-14" onMouseMove={() => setStop(true)} onMouseLeave={() => setStop(false)}>