@itwin/itwinui-react
Version:
A react component library for iTwinUI
18 lines (17 loc) • 743 B
JavaScript
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { useIsClient } from '../hooks/useIsClient.js';
export const PortalContainerContext = React.createContext(null);
export const Portal = (props) => {
let { portal = true, children } = props;
let isClient = useIsClient();
let portalTo = usePortalTo(portal);
if (!isClient) return null;
return portalTo ? ReactDOM.createPortal(children, portalTo) : children;
};
export const usePortalTo = (portal) => {
let portalContainer = React.useContext(PortalContainerContext);
if ('boolean' == typeof portal) return portal ? portalContainer : null;
let portalTo = 'function' == typeof portal.to ? portal.to() : portal.to;
return portalTo ?? portalContainer;
};