UNPKG

react-decode-animation

Version:
60 lines 1.82 kB
import { useEffect, useState } from "react"; const useDecodeAnimation = ({ value, interval, onFinish, }) => { const [decodeState, setDecodeState] = useState("Reset"); const [text, setText] = useState(""); const [index, setIndex] = useState(0); let intervalId; const play = () => { intervalId = setInterval(() => { setIndex((prevousState) => { if (prevousState >= value.length) { pause(); setDecodeState("Paused"); return prevousState; } return ++prevousState; }); }, interval); }; const pause = () => { clearInterval(intervalId); }; const reset = () => { clearInterval(intervalId); setIndex(0); setText(""); }; useEffect(() => { if (decodeState === "Playing") { setText((prevousState) => prevousState += value[index - 1]); } if (index >= value.length && onFinish) onFinish(); }, [index]); useEffect(() => { switch (decodeState) { case "Playing": play(); break; case "Paused": pause(); break; default: reset(); break; } return () => { clearInterval(intervalId); }; }, [decodeState]); return { text, currentIndex: index, state: decodeState, play: () => setDecodeState("Playing"), pause: () => setDecodeState("Paused"), reset: () => setDecodeState("Reset"), }; }; export default useDecodeAnimation; //# sourceMappingURL=useDecodeAnimation.js.map