import { useCallback, useEffect, useState } from 'react'; import { ToastProps } from 'types'; export const useComponentLogic = ({ autoCloseTimer, close, closeDebounceTimer = 300, }: ToastProps) => { const [isClosing, setIsClosing] = useState(false); const [slideIsVisible, setSlideIsVisible] = useState(false); const onClick = useCallback(() => { setIsClosing(true); setSlideIsVisible(false); }, [setIsClosing, setSlideIsVisible]); useEffect(() => { setSlideIsVisible(true); }, []); useEffect(() => { if (isClosing) { const timeoutId = setTimeout(close, closeDebounceTimer); return () => { clearTimeout(timeoutId); }; } if (autoCloseTimer) { const timeoutId = setTimeout( onClick, autoCloseTimer - closeDebounceTimer ); return () => { clearTimeout(timeoutId); }; } return () => {}; }, [autoCloseTimer, close, closeDebounceTimer, isClosing, onClick]); return { slideIsVisible, onClick }; };