@@ -3,7 +3,7 @@ import Popover from "@material-ui/core/Popover"
3
3
import { makeStyles } from "@material-ui/core/styles"
4
4
import HelpIcon from "@material-ui/icons/HelpOutline"
5
5
import OpenInNewIcon from "@material-ui/icons/OpenInNew"
6
- import React , { createContext , useContext , useState } from "react"
6
+ import React , { createContext , useContext , useRef , useState } from "react"
7
7
import { Stack } from "../../Stack/Stack"
8
8
9
9
type Icon = typeof HelpIcon
@@ -29,31 +29,36 @@ const useHelpTooltip = () => {
29
29
30
30
export const HelpTooltip : React . FC < HelpTooltipProps > = ( { children, open, size = "medium" } ) => {
31
31
const styles = useStyles ( { size } )
32
- const [ anchorEl , setAnchorEl ] = useState < HTMLButtonElement | null > ( null )
33
- open = open ?? Boolean ( anchorEl )
34
- const id = open ? "help-popover" : undefined
32
+ const anchorRef = useRef < HTMLButtonElement > ( null )
33
+ const [ isOpen , setIsOpen ] = useState ( ! ! open )
34
+ const id = isOpen ? "help-popover" : undefined
35
35
36
36
const onClose = ( ) => {
37
- setAnchorEl ( null )
37
+ setIsOpen ( false )
38
38
}
39
39
40
40
return (
41
41
< >
42
42
< button
43
+ ref = { anchorRef }
43
44
aria-describedby = { id }
44
45
className = { styles . button }
45
46
onClick = { ( event ) => {
46
47
event . stopPropagation ( )
47
- setAnchorEl ( event . currentTarget )
48
+ setIsOpen ( true )
49
+ } }
50
+ onMouseEnter = { ( ) => {
51
+ setIsOpen ( true )
48
52
} }
49
53
>
50
54
< HelpIcon className = { styles . icon } />
51
55
</ button >
52
56
< Popover
57
+ className = { styles . popover }
53
58
classes = { { paper : styles . popoverPaper } }
54
59
id = { id }
55
- open = { open }
56
- anchorEl = { anchorEl }
60
+ open = { isOpen }
61
+ anchorEl = { anchorRef . current }
57
62
onClose = { onClose }
58
63
anchorOrigin = { {
59
64
vertical : "bottom" ,
@@ -63,8 +68,16 @@ export const HelpTooltip: React.FC<HelpTooltipProps> = ({ children, open, size =
63
68
vertical : "top" ,
64
69
horizontal : "left" ,
65
70
} }
71
+ PaperProps = { {
72
+ onMouseEnter : ( ) => {
73
+ setIsOpen ( true )
74
+ } ,
75
+ onMouseLeave : ( ) => {
76
+ setIsOpen ( false )
77
+ } ,
78
+ } }
66
79
>
67
- < HelpTooltipContext . Provider value = { { open, onClose } } > { children } </ HelpTooltipContext . Provider >
80
+ < HelpTooltipContext . Provider value = { { open : isOpen , onClose } } > { children } </ HelpTooltipContext . Provider >
68
81
</ Popover >
69
82
</ >
70
83
)
@@ -166,11 +179,16 @@ const useStyles = makeStyles((theme) => ({
166
179
height : ( { size } : { size ?: Size } ) => theme . spacing ( getIconSpacingFromSize ( size ) ) ,
167
180
} ,
168
181
182
+ popover : {
183
+ pointerEvents : "none" ,
184
+ } ,
185
+
169
186
popoverPaper : {
170
187
marginTop : theme . spacing ( 0.5 ) ,
171
188
width : theme . spacing ( 38 ) ,
172
189
padding : theme . spacing ( 2.5 ) ,
173
190
color : theme . palette . text . secondary ,
191
+ pointerEvents : "auto" ,
174
192
} ,
175
193
176
194
title : {
0 commit comments