@nex-ui/react
Version:
🎉 A beautiful, modern, and reliable React component library.
38 lines (34 loc) • 968 B
JavaScript
"use client";
;
var reactDom = require('react-dom');
var react = require('react');
var hooks = require('@nex-ui/hooks');
var utils = require('@nex-ui/utils');
const Portal = (props)=>{
const { children, container } = props;
const [mountNode, setMountNode] = react.useState(null);
const onMount = hooks.useEvent(()=>props.onMount?.());
const onUnmount = hooks.useEvent(()=>props.onUnmount?.());
react.useEffect(()=>{
let node = container;
if (utils.isFunction(node)) {
node = node();
}
setMountNode(node || document.body);
}, [
container
]);
react.useEffect(()=>{
if (mountNode) {
onMount();
return onUnmount;
}
}, [
mountNode,
onMount,
onUnmount
]);
return mountNode ? /*#__PURE__*/ reactDom.createPortal(children, mountNode) : null;
};
Portal.displayName = 'Portal';
exports.Portal = Portal;