11/* eslint-disable react/no-find-dom-node */
2- import React , { PureComponent } from 'react' ;
2+ import React , { Component } from 'react' ;
33import { findDOMNode } from 'react-dom' ;
44import T from 'prop-types' ;
55import { TooltipContext } from './utils' ;
@@ -13,7 +13,7 @@ const MUTATION_OBSERVER_CONFIG = {
1313/**
1414 * @private
1515 */
16- export default class Tooltip extends PureComponent {
16+ export default class Tooltip extends Component {
1717 static propTypes = {
1818 innerRef : T . func ,
1919 style : T . object ,
@@ -23,10 +23,13 @@ export default class Tooltip extends PureComponent {
2323 clearScheduled : T . func ,
2424 tooltip : T . func ,
2525 hideTooltip : T . func ,
26- parentOutsideClickHandler : T . func ,
2726 scheduleUpdate : T . func ,
27+ parentOutsideClickHandler : T . func ,
2828 removeParentOutsideClickHandler : T . func ,
2929 addParentOutsideClickHandler : T . func ,
30+ parentOutsideRightClickHandler : T . func ,
31+ removeParentOutsideRightClickHandler : T . func ,
32+ addParentOutsideRightClickHandler : T . func ,
3033 closeOnOutOfBoundaries : T . bool ,
3134 outOfBoundaries : T . bool
3235 } ;
@@ -45,12 +48,32 @@ export default class Tooltip extends PureComponent {
4548 }
4649 } ;
4750
51+ _handleOutsideRightClick = e => {
52+ if ( ! findDOMNode ( this ) . contains ( e . target ) ) {
53+ const {
54+ hideTooltip,
55+ clearScheduled,
56+ parentOutsideRightClickHandler
57+ } = this . props ;
58+
59+ clearScheduled ( ) ;
60+ hideTooltip ( ) ;
61+ parentOutsideRightClickHandler && parentOutsideRightClickHandler ( e ) ;
62+ }
63+ } ;
64+
4865 _addOutsideClickHandler = ( ) =>
4966 document . addEventListener ( 'click' , this . _handleOutsideClick ) ;
5067
5168 _removeOutsideClickHandler = ( ) =>
5269 document . removeEventListener ( 'click' , this . _handleOutsideClick ) ;
5370
71+ _addOutsideRightClickHandler = ( ) =>
72+ document . addEventListener ( 'contextmenu' , this . _handleOutsideRightClick ) ;
73+
74+ _removeOutsideRightClickHandler = ( ) =>
75+ document . removeEventListener ( 'contextmenu' , this . _handleOutsideRightClick ) ;
76+
5477 componentDidMount ( ) {
5578 const { trigger } = this . props ;
5679 const observer = ( this . observer = new MutationObserver ( ( ) => {
@@ -59,9 +82,15 @@ export default class Tooltip extends PureComponent {
5982 observer . observe ( findDOMNode ( this ) , MUTATION_OBSERVER_CONFIG ) ;
6083
6184 if ( trigger === 'click' || trigger === 'right-click' ) {
62- const { removeParentOutsideClickHandler } = this . props ;
85+ const {
86+ removeParentOutsideClickHandler,
87+ removeParentOutsideRightClickHandler
88+ } = this . props ;
6389 document . addEventListener ( 'click' , this . _handleOutsideClick ) ;
90+ document . addEventListener ( 'contextmenu' , this . _handleOutsideRightClick ) ;
6491 removeParentOutsideClickHandler && removeParentOutsideClickHandler ( ) ;
92+ removeParentOutsideRightClickHandler &&
93+ removeParentOutsideRightClickHandler ( ) ;
6594 }
6695 }
6796
@@ -70,10 +99,19 @@ export default class Tooltip extends PureComponent {
7099 this . observer . disconnect ( ) ;
71100
72101 if ( trigger === 'click' || trigger === 'right-click' ) {
73- const { addParentOutsideClickHandler } = this . props ;
102+ const {
103+ addParentOutsideClickHandler,
104+ addParentOutsideRightClickHandler
105+ } = this . props ;
74106 document . removeEventListener ( 'click' , this . _handleOutsideClick ) ;
107+ document . removeEventListener (
108+ 'contextmenu' ,
109+ this . _handleOutsideRightClick
110+ ) ;
75111 this . _handleOutsideClick = undefined ;
112+ this . _handleOutsideRightClick = undefined ;
76113 addParentOutsideClickHandler && addParentOutsideClickHandler ( ) ;
114+ addParentOutsideRightClickHandler && addParentOutsideRightClickHandler ( ) ;
77115 }
78116 }
79117
@@ -111,9 +149,13 @@ export default class Tooltip extends PureComponent {
111149 return (
112150 < TooltipContext . Provider
113151 value = { {
152+ parentOutsideClickHandler : this . _handleOutsideClick ,
114153 addParentOutsideClickHandler : this . _addOutsideClickHandler ,
115154 removeParentOutsideClickHandler : this . _removeOutsideClickHandler ,
116- parentOutsideClickHandler : this . _handleOutsideClick
155+ parentOutsideRightClickHandler : this . _handleOutsideRightClick ,
156+ addParentOutsideRightClickHandler : this . _addOutsideRightClickHandler ,
157+ removeParentOutsideRightClickHandler : this
158+ . _removeOutsideRightClickHandler
117159 } }
118160 >
119161 { tooltip ( {
0 commit comments