UNPKG

@itwin/itwinui-react

Version:

A react component library for iTwinUI

18 lines (17 loc) 743 B
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; };