import React, { MouseEvent, useCallback } from 'react' import withDefaults from '../utils/with-defaults' import useTheme from '../styles/use-theme' import CSSTransition from './css-transition' import useCurrentState from '../utils/use-current-state' interface Props { onClick?: (event: MouseEvent) => void visible?: boolean width?: string } const defaultProps = { onClick: () => {}, visible: false, } type NativeAttrs = Omit, keyof Props> export type BackdropProps = Props & typeof defaultProps & NativeAttrs const Backdrop: React.FC> = React.memo( ({ children, onClick, visible, width, ...props }) => { const theme = useTheme() const [, setIsContentMouseDown, IsContentMouseDownRef] = useCurrentState(false) const clickHandler = (event: MouseEvent) => { if (IsContentMouseDownRef.current) return onClick && onClick(event) } const childrenClickHandler = useCallback((event: MouseEvent) => { event.stopPropagation() }, []) const mouseUpHandler = () => { if (!IsContentMouseDownRef.current) return const timer = setTimeout(() => { setIsContentMouseDown(false) clearTimeout(timer) }, 0) } return (
setIsContentMouseDown(true)}> {children}
) }, ) export default withDefaults(Backdrop, defaultProps)