@braineet/ui
Version:
Braineet design system
41 lines (39 loc) • 1.22 kB
JavaScript
;
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;