UNPKG

azure-devops-ui

Version:

React components for building web UI in Azure DevOps

1 lines 1.67 kB
import{__extends}from"tslib";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";var Portal=function(o){function t(t){var t=o.call(this,t)||this,e=(t.mounted=new ObservableValue(!1),t.focusElement=document.activeElement,t.props.portalElement);return(e=(e=!e&&t.props.portalSelector?document.querySelector(t.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)),t.props.parentClassName&&!e.classList.contains(t.props.parentClassName)&&e.classList.add(t.props.parentClassName),t.parentElement=e,t.hostElement=document.createElement("div"),t}return __extends(t,o),t.prototype.render=function(){var e=this;if(this.hostElement.className="",this.hostElement.classList.add("bolt-portal"),this.hostElement.classList.add("absolute-fill"),this.props.className)for(var t=0,o=this.props.className.split(" ");t<o.length;t++){var s=o[t];this.hostElement.classList.add(s)}return ReactDOM.createPortal(React.createElement(Observer,{mounted:this.mounted},function(t){return t.mounted?e.props.children:null}),this.hostElement)},t.prototype.componentDidMount=function(){this.parentElement.appendChild(this.hostElement),this.mounted.value=!0},t.prototype.componentWillUnmount=function(){var t;this.parentElement.removeChild(this.hostElement),this.props.bypassActiveElementFocusOnUnmount||null!=(t=this.focusElement)&&t.focus()},t}(React.Component);export{Portal};