import { Transition } from '@headlessui/react'; import { useStoreActions, useStoreState } from 'easy-peasy'; import { Fragment, useEffect, useRef, useState } from 'react'; import { randomInt } from '@/helpers'; type Timer = ReturnType; function ProgressBar() { const interval = useRef(); const timeout = useRef(); const [visible, setVisible] = useState(false); const continuous = useStoreState(state => state.progress.continuous); const progress = useStoreState(state => state.progress.progress); const setProgress = useStoreActions(actions => actions.progress.setProgress); useEffect(() => { return () => { timeout.current && clearTimeout(timeout.current); interval.current && clearInterval(interval.current); }; }, []); useEffect(() => { setVisible((progress || 0) > 0); if (progress === 100) { timeout.current = setTimeout(() => setProgress(undefined), 500); } }, [progress]); useEffect(() => { if (!continuous) { interval.current && clearInterval(interval.current); return; } if (!progress || progress === 0) { setProgress(randomInt(20, 30)); } }, [continuous]); useEffect(() => { if (continuous) { interval.current && clearInterval(interval.current); if ((progress || 0) >= 90) { setProgress(90); } else { interval.current = setTimeout(() => setProgress((progress || 0) + randomInt(1, 5)), 500); } } }, [progress, continuous]); return (
); } export default ProgressBar;