@@ -143,10 +143,17 @@ const Tooltip = ({
143
143
if ( setIsOpen ) {
144
144
setIsOpen ( ! isOpen )
145
145
} else if ( ! setIsOpen && isOpen === undefined ) {
146
- setShow ( ( currentValue ) => ! currentValue )
146
+ setShow ( true )
147
147
}
148
148
}
149
149
150
+ const handleClickOutsideAnchor = ( e : MouseEvent ) => {
151
+ if ( e . target === activeAnchor . current ) {
152
+ return
153
+ }
154
+ setShow ( false )
155
+ }
156
+
150
157
// debounce handler to prevent call twice when
151
158
// mouse enter and focus events being triggered toggether
152
159
const debouncedHandleShowTooltip = debounce ( handleShowTooltip , 50 )
@@ -170,6 +177,7 @@ const Tooltip = ({
170
177
const enabledEvents : { event : string ; listener : ( event ?: Event ) => void } [ ] = [ ]
171
178
172
179
if ( events . find ( ( event : string ) => event === 'click' ) ) {
180
+ window . addEventListener ( 'click' , handleClickOutsideAnchor )
173
181
enabledEvents . push ( { event : 'click' , listener : handleClickTooltipAnchor } )
174
182
}
175
183
@@ -189,13 +197,14 @@ const Tooltip = ({
189
197
} )
190
198
191
199
return ( ) => {
200
+ window . removeEventListener ( 'click' , handleClickOutsideAnchor )
192
201
enabledEvents . forEach ( ( { event, listener } ) => {
193
202
elementRefs . forEach ( ( ref ) => {
194
203
ref . current ?. removeEventListener ( event , listener )
195
204
} )
196
205
} )
197
206
}
198
- } , [ anchorRefs , anchorId , events , delayHide , delayShow ] )
207
+ } , [ anchorRefs , activeAnchor , anchorId , events , delayHide , delayShow ] )
199
208
200
209
useEffect ( ( ) => {
201
210
if ( position ?. x && position ?. y ) {
0 commit comments