import React from "react"; import { twMerge } from "tailwind-merge"; import ReactDOM from "react-dom"; import { TWUI_MODAL_PROPS } from "../elements/Modal"; import Paper from "../elements/Paper"; import _ from "lodash"; import twuiGrabPopoverStyles from "../(functions)/popver/grab-popover-styles"; type Props = TWUI_MODAL_PROPS & { open: boolean; setOpen: React.Dispatch>; targetElRef?: React.RefObject; popoverTargetActiveRef: React.MutableRefObject; popoverContentActiveRef: React.MutableRefObject; }; /** * # Modal Main Component */ export default function PopoverComponent({ open, setOpen, targetElRef, position = "bottom", trigger = "hover", debounce, popoverTargetActiveRef, popoverContentActiveRef, popoverReferenceRef, isPopover, ...props }: Props) { if (!open) return null; const [style, setStyle] = React.useState({}); React.useEffect(() => { if (open && targetElRef?.current) { const popoverStyle = twuiGrabPopoverStyles({ position, targetElRef, }); setStyle(popoverStyle); } }, [open, targetElRef, position]); let closeTimeout: any; const popoverEnterFn = React.useCallback(() => { popoverContentActiveRef.current = true; popoverTargetActiveRef.current = false; setOpen(true); }, []); const popoverLeaveFn = React.useCallback(() => { window.clearTimeout(closeTimeout); closeTimeout = setTimeout(() => { if (popoverTargetActiveRef.current) { popoverTargetActiveRef.current = false; return; } setOpen(false); }, debounce); }, []); if (!open) return null; return ReactDOM.createPortal( {/*
*/} {props.children} , document.getElementById("twui-popover-root") as HTMLElement ); }