import React, { MouseEvent, useCallback } from 'react' import withDefaults from '../utils/with-defaults' import useTheme from '../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: () => { // do nothing }, 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)