azure-devops-ui
Version:
React components for building web UI in Azure DevOps
1 lines • 1.85 kB
JavaScript
import{__assign,__extends}from"tslib";import"../../CommonImports";import"../../Core/core.css";import*as React from"react";var FocusWithinContext=React.createContext({}),FocusWithin=function(o){function t(){var t=null!==o&&o.apply(this,arguments)||this;return t.blurTimeout=-1,t.focusCount=0,t.focus=!1,t.onBlur=function(){t.focusCount=Math.max(0,t.focusCount-1),-1!==t.blurTimeout&&window.clearTimeout(t.blurTimeout),t.blurTimeout=window.setTimeout(function(){t.blurTimeout=-1,t.focusCount||(t.focus=!1,t.props.updateStateOnFocusChange&&t.forceUpdate(),t.props.onBlur&&t.props.onBlur())},0)},t.onFocus=function(o){t.focusCount++,t.focus||(t.focus=!0,t.props.updateStateOnFocusChange&&t.forceUpdate(),t.props.onFocus&&t.props.onFocus(o))},t}return __extends(t,o),t.prototype.render=function(){var u=this;return React.createElement(FocusWithinContext.Consumer,null,function(o){var t,n={onBlur:u.onBlur,onFocus:u.onFocus};return u.parentFocusWithin=o.focusWithin,o="function"==typeof u.props.children?(t=u.props.children,n.hasFocus=u.focus,t(n)):(t=React.Children.only(u.props.children),React.cloneElement(t,__assign(__assign({},t.props),n),t.props.children)),React.createElement(FocusWithinContext.Provider,{value:{focusWithin:u}},o)})},t.prototype.componentWillUnmount=function(){-1!==this.blurTimeout&&(window.clearTimeout(this.blurTimeout),this.blurTimeout=-1),0<this.focusCount&&this.unmountWithFocus(!1)},t.prototype.hasFocus=function(){return 0<this.focusCount},t.prototype.unmountWithFocus=function(o){0<this.focusCount&&(this.focusCount--,0<this.focusCount&&o&&(this.focusCount=0,this.focus=!1,this.props.updateStateOnFocusChange&&this.forceUpdate(),this.props.onBlur)&&this.props.onBlur(),this.parentFocusWithin)&&this.parentFocusWithin.unmountWithFocus(!0)},t.defaultProps={updateStateOnFocusChange:!0},t}(React.Component);export{FocusWithin};