import { FC, useEffect, useMemo, useState } from 'react'; import { Base, BaseProps } from '..'; import { TransitionAnimation, TransitionAnimationTypes } from '../transitions'; interface LayoutNotificationBubbleViewProps extends BaseProps { fadesOut?: boolean; timeoutMs?: number; close: () => void; } export const LayoutNotificationBubbleView: FC = props => { const { fadesOut = true, timeoutMs = 8000, close = null, classNames = [], ...rest } = props; const [ isVisible, setIsVisible ] = useState(false); const getClassNames = useMemo(() => { const newClassNames: string[] = [ 'nitro-notification-bubble', 'rounded' ]; if(classNames.length) newClassNames.push(...classNames); return newClassNames; }, [ classNames ]); useEffect(() => { setIsVisible(true); return () => setIsVisible(false); }, []); useEffect(() => { if(!fadesOut) return; const timeout = setTimeout(() => { setIsVisible(false); setTimeout(() => close(), 300); }, timeoutMs); return () => clearTimeout(timeout); }, [ fadesOut, timeoutMs, close ]); return ( ); }