azure-devops-ui
Version:
React components for building web UI in Azure DevOps
1 lines • 1.73 kB
JavaScript
import"../../CommonImports";import"../../Core/core.css";import*as React from"react";import{isFunctionalChildren}from"../../Util";class MouseWithin extends React.Component{constructor(){super(...arguments),this.enterTimeout=0,this.delayTimeout=0,this.mouse=!1,this.onMouseEnter=t=>{if(!this.mouse)if(this.mouse=!0,this.delayTimeout&&(window.clearTimeout(this.delayTimeout),this.delayTimeout=0),this.props.enterDelay){t.persist();const s=t.currentTarget;this.enterTimeout=window.setTimeout(()=>{this.enterTimeout=0;var e=t.currentTarget;t.currentTarget=s,this.mouseEntered(t),t.currentTarget=e},this.props.enterDelay)}else this.mouseEntered(t)},this.onMouseLeave=e=>{this.mouse&&(this.mouse=!1,this.enterTimeout&&(window.clearTimeout(this.enterTimeout),this.enterTimeout=0),this.props.leaveDelay?(e.persist(),this.delayTimeout=window.setTimeout(()=>{this.delayTimeout=0,this.mouseLeft(e)},this.props.leaveDelay)):this.mouseLeft(e))}}render(){var e,t={onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave};return isFunctionalChildren(this.props.children)?(e=this.props.children,t.hasMouse=this.mouse,e(t)):(e=React.Children.only(this.props.children),React.cloneElement(e,Object.assign(Object.assign({},e.props),t),e.props.children))}componentWillUnmount(){this.enterTimeout&&window.clearTimeout(this.enterTimeout),this.delayTimeout&&window.clearTimeout(this.delayTimeout)}hasMouse(){return this.mouse}mouseEntered(e){this.props.updateStateOnMouseChange&&this.forceUpdate(),this.props.onMouseEnter&&this.props.onMouseEnter(e)}mouseLeft(e){this.props.updateStateOnMouseChange&&this.forceUpdate(),this.props.onMouseLeave&&this.props.onMouseLeave(e)}}MouseWithin.defaultProps={updateStateOnMouseChange:!0};export{MouseWithin};