import React, { HTMLAttributes, useEffect, useState } from "react"; import ReactDOM from "react-dom"; interface OverlayProps { innerRef?: React.Ref; overlayRoot?: HTMLElement; } type AllOverlayProps = OverlayProps & HTMLAttributes; const Overlay = ({ overlayRoot = document?.body, ...props }: AllOverlayProps) => { const [el] = useState(() => document.createElement("div")); useEffect(() => { if (overlayRoot) { overlayRoot.appendChild(el); } return () => { if (el && overlayRoot) { overlayRoot.removeChild(el); } }; }, []); const getContents = () => { const { children, innerRef, ...other } = props; return (
{children}
); }; return ReactDOM.createPortal(getContents(), el); }; export default React.forwardRef( (props, ref) => );