UNPKG

azure-devops-ui

Version:

React components for building web UI in Azure DevOps

1 lines 1.75 kB
import"../../CommonImports";import"../../Core/core.css";import*as React from"react";const FocusWithinContext=React.createContext({});class FocusWithin extends React.Component{constructor(){super(...arguments),this.blurTimeout=-1,this.focusCount=0,this.focus=!1,this.onBlur=()=>{this.focusCount=Math.max(0,this.focusCount-1),-1!==this.blurTimeout&&window.clearTimeout(this.blurTimeout),this.blurTimeout=window.setTimeout(()=>{this.blurTimeout=-1,this.focusCount||(this.focus=!1,this.props.updateStateOnFocusChange&&this.forceUpdate(),this.props.onBlur&&this.props.onBlur())},0)},this.onFocus=t=>{this.focusCount++,this.focus||(this.focus=!0,this.props.updateStateOnFocusChange&&this.forceUpdate(),this.props.onFocus&&this.props.onFocus(t))}}render(){return React.createElement(FocusWithinContext.Consumer,null,t=>{let o;var s={onBlur:this.onBlur,onFocus:this.onFocus};return this.parentFocusWithin=t.focusWithin,o="function"==typeof this.props.children?(t=this.props.children,s.hasFocus=this.focus,t(s)):(t=React.Children.only(this.props.children),React.cloneElement(t,Object.assign(Object.assign({},t.props),s),t.props.children)),React.createElement(FocusWithinContext.Provider,{value:{focusWithin:this}},o)})}componentWillUnmount(){-1!==this.blurTimeout&&(window.clearTimeout(this.blurTimeout),this.blurTimeout=-1),0<this.focusCount&&this.unmountWithFocus(!1)}hasFocus(){return 0<this.focusCount}unmountWithFocus(t){0<this.focusCount&&(this.focusCount--,0<this.focusCount&&t&&(this.focusCount=0,this.focus=!1,this.props.updateStateOnFocusChange&&this.forceUpdate(),this.props.onBlur)&&this.props.onBlur(),this.parentFocusWithin)&&this.parentFocusWithin.unmountWithFocus(!0)}}FocusWithin.defaultProps={updateStateOnFocusChange:!0};export{FocusWithin};