import React from 'react'; import { ClickAwayListener, Fade, Paper, PopperPlacementType } from "@mui/material"; import { PopoverContent, PopoverRoot, TopPopupArrow, BottomPopupArrow, LeftPopupArrow, RightPopupArrow, PopupPanel } from './style'; interface FilterPopupProps { className?: string; content: React.ReactElement; children: React.ReactElement; open: boolean; arrow?: boolean; placement?: PopperPlacementType; onClose?: () => void, } export const FilterPopop: React.FC = ({ className, placement = "top", arrow = true, open, content, onClose, children }) => { const [openning, setOpenning] = React.useState(0); const [arrowRef, setArrowRef] = React.useState(null); const [childNode, setChildNode] = React.useState(null); React.useEffect(() => { if (!!open && !!arrowRef) { setOpenning(Date.now() + 1000) } else setOpenning(0); }, [open, arrowRef, setOpenning]) const handleClose = () => { if (!!open && openning > 0) { const now = Date.now(); const canClose = openning < now; if (canClose && onClose) { setOpenning(0); onClose(); } } } return ( <> {React.cloneElement(children, { ...children.props, ref: setChildNode })} {({ TransitionProps }) => ( { arrow ? placement === 'bottom' ? : placement === 'right' ? : placement === 'left' ? : : null } {content} )} ); }