import React, { useEffect, useState } from "react"; import './useFade.css' export const useFade = (initial: boolean = false): [boolean, React.Dispatch>, any] => { const [show, setShow] = useState(initial); const [isVisible, setVisible] = useState(show); // Update visibility when show changes useEffect(() => { if (show) setVisible(true); }, [show]); // When the animation finishes, set visibility to false const onAnimationEnd = () => { if (!show) setVisible(false); }; const style = { animation: `${show ? "fadeIn" : "fadeOut"} .3s` }; // These props go on the fading DOM element const fadeProps = { style, onAnimationEnd }; return [isVisible, setShow, fadeProps]; };