UNPKG

@braineet/ui

Version:

Braineet design system

41 lines (39 loc) 1.22 kB
"use strict"; exports.__esModule = true; exports.default = void 0; var _react = require("react"); var _reactDom = require("react-dom"); /* eslint-disable no-param-reassign */ var useEnhancedEffect = typeof window !== 'undefined' ? _react.useLayoutEffect : _react.useEffect; var setRef = function setRef(ref, value) { if (typeof ref === 'function') { ref(value); } else if (ref) { ref.current = value; } }; var Portal = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) { var children = _ref.children, container = _ref.container; var _useState = (0, _react.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__*/(0, _reactDom.createPortal)(children, mountNode) : mountNode; }); Portal.defaultProps = { container: null }; Portal.displayName = 'Portal'; var _default = exports.default = Portal;