nice-ui
Version:
React design system, components, and utilities
33 lines (32 loc) • 1.21 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.Portal = void 0;
const React = require("react");
const react_dom_1 = require("react-dom");
const context_1 = require("./context");
const PortalState_1 = require("./PortalState");
const Portal = ({ children, parent }) => {
const parentState = (0, context_1.usePortal)();
// biome-ignore lint: hook dependency list manually managed
const state = React.useMemo(() => {
const state = new PortalState_1.PortalState();
state.parent = parentState;
return state;
}, [parent]);
const [el] = React.useState(() => document.createElement('div'));
// biome-ignore lint: hook dependency list manually managed
React.useLayoutEffect(() => {
const container = parent || document.body;
container.appendChild(el);
state.addRoot(el);
return () => {
try {
state.delRoot(el);
container.removeChild(el);
}
catch { }
};
}, [parent]);
return React.createElement(context_1.context.Provider, { value: state }, (0, react_dom_1.createPortal)(children, el));
};
exports.Portal = Portal;
;