import * as React from 'react' export interface IOverlayProps { show: boolean onClickOverlay: () => void } export const Overlay: React.FC = ({ children, ...props }) => { const [mounted, setMounted] = React.useState(props.show) const [opacity, setOpacity] = React.useState(0) const onClick = React.useCallback((event: React.MouseEvent) => { if (event.target === event.currentTarget) { props.onClickOverlay() } }, [props.onClickOverlay]) const onTransitionEnd = React.useCallback(() => { console.log('transition end', mounted, opacity) if (opacity === 0) { setMounted(false) } }, [opacity]) React.useEffect(() => { if (!props.show) { setOpacity(0) return } setMounted(true) let t = setTimeout(() => { setOpacity(1) }, 16) return () => { clearTimeout(t) } }, [props.show]) return mounted && (
{children}
) }