azure-devops-ui
Version:
React components for building web UI in Azure DevOps
1 lines • 1.5 kB
JavaScript
import"../../CommonImports";import"../../Core/core.css";import"./Portal.css";import*as React from"react";import*as ReactDOM from"react-dom";import{ObservableValue}from"../../Core/Observable";import{Observer}from"../../Observer";class Portal extends React.Component{constructor(t){super(t),this.mounted=new ObservableValue(!1),this.focusElement=document.activeElement;let e=this.props.portalElement;(e=(e=!e&&this.props.portalSelector?document.querySelector(this.props.portalSelector):e)||document.querySelector(".bolt-portal-host"))||((e=document.createElement("div")).className="bolt-portal-host absolute-fill no-events scroll-hidden",document.body.appendChild(e)),this.props.parentClassName&&!e.classList.contains(this.props.parentClassName)&&e.classList.add(this.props.parentClassName),this.parentElement=e,this.hostElement=document.createElement("div")}render(){var t;if(this.hostElement.className="",this.hostElement.classList.add("bolt-portal"),this.hostElement.classList.add("absolute-fill"),this.props.className)for(t of this.props.className.split(" "))this.hostElement.classList.add(t);return ReactDOM.createPortal(React.createElement(Observer,{mounted:this.mounted},t=>t.mounted?this.props.children:null),this.hostElement)}componentDidMount(){this.parentElement.appendChild(this.hostElement),this.mounted.value=!0}componentWillUnmount(){var t;this.parentElement.removeChild(this.hostElement),this.props.bypassActiveElementFocusOnUnmount||null!=(t=this.focusElement)&&t.focus()}}export{Portal};