UNPKG

@braineet/ui

Version:

Braineet design system

36 lines 1.13 kB
/* eslint-disable no-param-reassign */ import { useState, forwardRef, useLayoutEffect, useEffect } from 'react'; import { createPortal } from 'react-dom'; var useEnhancedEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect; var setRef = function setRef(ref, value) { if (typeof ref === 'function') { ref(value); } else if (ref) { ref.current = value; } }; var Portal = /*#__PURE__*/forwardRef(function (_ref, ref) { var children = _ref.children, container = _ref.container; var _useState = useState(null), mountNode = _useState[0], setMountNode = _useState[1]; useEnhancedEffect(function () { setMountNode(container && container.current ? container.current : document.body); }, [container]); useEnhancedEffect(function () { if (mountNode) { setRef(ref, mountNode); return function () { setRef(ref, null); }; } return undefined; }, [ref, mountNode]); return mountNode ? /*#__PURE__*/createPortal(children, mountNode) : mountNode; }); Portal.defaultProps = { container: null }; Portal.displayName = 'Portal'; export default Portal;