import React, {ReactNode, useState, useRef, useEffect} from 'react'; import ReactDOM from 'react-dom'; import './tooltip_wrapper.scss'; type TooltipWrapperProps = { children: ReactNode; tooltipContent: ReactNode; } const TooltipWrapper: React.FC = ({children, tooltipContent}) => { const [isVisible, setIsVisible] = useState(false); const wrapperRef = useRef(null); const tooltipRef = useRef(null); const [position, setPosition] = useState({bottom: 0, left: 0}); const handleMouseEnter = () => setIsVisible(true); const handleMouseLeave = () => setIsVisible(false); useEffect(() => { if (wrapperRef.current && isVisible) { const wrapperRect = wrapperRef.current.getBoundingClientRect(); setPosition({ bottom: window.innerHeight - (wrapperRect.top + window.scrollY - 5), left: wrapperRect.left + window.scrollX + wrapperRect.width / 2, }); } }, [isVisible]); const tooltip = (
{tooltipContent}
); return (
{children} {isVisible && ReactDOM.createPortal(tooltip as any, document.body)}
); }; export default TooltipWrapper;