Skip to content

Commit d0aca86

Browse files
feat: Show help tooltip on hover (#2423)
1 parent 3415b9d commit d0aca86

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-10
lines changed

site/src/components/Tooltips/HelpTooltip/HelpTooltip.stories.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export default {
1616
const Template: Story<HelpTooltipProps> = (args) => (
1717
<HelpTooltip {...args}>
1818
<HelpTooltipTitle>What is a template?</HelpTooltipTitle>
19-
<HelpTooltipText>A template is a common configuration for your team`&apos;`s workspaces.</HelpTooltipText>
19+
<HelpTooltipText>A template is a common configuration for your team&apos;s workspaces.</HelpTooltipText>
2020
<HelpTooltipLinksGroup>
2121
<HelpTooltipLink href="https://github.com/coder/coder/">Creating a template</HelpTooltipLink>
2222
<HelpTooltipLink href="https://github.com/coder/coder/">Updating a template</HelpTooltipLink>

site/src/components/Tooltips/HelpTooltip/HelpTooltip.tsx

+27-9
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import Popover from "@material-ui/core/Popover"
33
import { makeStyles } from "@material-ui/core/styles"
44
import HelpIcon from "@material-ui/icons/HelpOutline"
55
import OpenInNewIcon from "@material-ui/icons/OpenInNew"
6-
import React, { createContext, useContext, useState } from "react"
6+
import React, { createContext, useContext, useRef, useState } from "react"
77
import { Stack } from "../../Stack/Stack"
88

99
type Icon = typeof HelpIcon
@@ -29,31 +29,36 @@ const useHelpTooltip = () => {
2929

3030
export const HelpTooltip: React.FC<HelpTooltipProps> = ({ children, open, size = "medium" }) => {
3131
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
3535

3636
const onClose = () => {
37-
setAnchorEl(null)
37+
setIsOpen(false)
3838
}
3939

4040
return (
4141
<>
4242
<button
43+
ref={anchorRef}
4344
aria-describedby={id}
4445
className={styles.button}
4546
onClick={(event) => {
4647
event.stopPropagation()
47-
setAnchorEl(event.currentTarget)
48+
setIsOpen(true)
49+
}}
50+
onMouseEnter={() => {
51+
setIsOpen(true)
4852
}}
4953
>
5054
<HelpIcon className={styles.icon} />
5155
</button>
5256
<Popover
57+
className={styles.popover}
5358
classes={{ paper: styles.popoverPaper }}
5459
id={id}
55-
open={open}
56-
anchorEl={anchorEl}
60+
open={isOpen}
61+
anchorEl={anchorRef.current}
5762
onClose={onClose}
5863
anchorOrigin={{
5964
vertical: "bottom",
@@ -63,8 +68,16 @@ export const HelpTooltip: React.FC<HelpTooltipProps> = ({ children, open, size =
6368
vertical: "top",
6469
horizontal: "left",
6570
}}
71+
PaperProps={{
72+
onMouseEnter: () => {
73+
setIsOpen(true)
74+
},
75+
onMouseLeave: () => {
76+
setIsOpen(false)
77+
},
78+
}}
6679
>
67-
<HelpTooltipContext.Provider value={{ open, onClose }}>{children}</HelpTooltipContext.Provider>
80+
<HelpTooltipContext.Provider value={{ open: isOpen, onClose }}>{children}</HelpTooltipContext.Provider>
6881
</Popover>
6982
</>
7083
)
@@ -166,11 +179,16 @@ const useStyles = makeStyles((theme) => ({
166179
height: ({ size }: { size?: Size }) => theme.spacing(getIconSpacingFromSize(size)),
167180
},
168181

182+
popover: {
183+
pointerEvents: "none",
184+
},
185+
169186
popoverPaper: {
170187
marginTop: theme.spacing(0.5),
171188
width: theme.spacing(38),
172189
padding: theme.spacing(2.5),
173190
color: theme.palette.text.secondary,
191+
pointerEvents: "auto",
174192
},
175193

176194
title: {

0 commit comments

Comments
 (0)