diff --git a/src/components/Menu/Overlay.tsx b/src/components/Menu/Overlay.tsx index d3e8f375..b91ea824 100644 --- a/src/components/Menu/Overlay.tsx +++ b/src/components/Menu/Overlay.tsx @@ -1,23 +1,48 @@ import * as React from 'react' export interface IOverlayProps { - opacity: number + show: boolean onClickOverlay: () => void } -export const Overlay: React.FC = props => { +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]) - return ( + React.useEffect(() => { + if (!props.show) { + setOpacity(0) + return + } + + setMounted(true) + let t = setTimeout(() => { + setOpacity(1) + }, 16) + + return () => { + clearTimeout(t) + } + }, [props.show]) + + return mounted && (
- {props.children} + {children}
) } diff --git a/src/components/Menu/index.tsx b/src/components/Menu/index.tsx index d229ddfe..246d7d25 100644 --- a/src/components/Menu/index.tsx +++ b/src/components/Menu/index.tsx @@ -98,32 +98,30 @@ export const Menu: React.FC = props => { ))} - {!open ? null : ( - -
- {props.items.map((item, index) => ( -
  • - -
  • - ))} -
    -
    - )} + +
    + {props.items.map((item, index) => ( +
  • + +
  • + ))} +
    +
    ) }