fix: add tooltip hook

This commit is contained in:
Sérgio Salgado 2020-12-16 02:22:50 +00:00 committed by Josh Harvey
parent c1d781d488
commit 783e2cf9fc

View file

@ -18,7 +18,7 @@ const useStyles = makeStyles({
}) })
}) })
const Tooltip = memo(({ children, width, Icon = HelpIcon }) => { const usePopperHandler = width => {
const classes = useStyles({ width }) const classes = useStyles({ width })
const [helpPopperAnchorEl, setHelpPopperAnchorEl] = useState(null) const [helpPopperAnchorEl, setHelpPopperAnchorEl] = useState(null)
@ -32,19 +32,31 @@ const Tooltip = memo(({ children, width, Icon = HelpIcon }) => {
const helpPopperOpen = Boolean(helpPopperAnchorEl) const helpPopperOpen = Boolean(helpPopperAnchorEl)
return {
classes,
helpPopperAnchorEl,
helpPopperOpen,
handleOpenHelpPopper,
handleCloseHelpPopper
}
}
const Tooltip = memo(({ children, width, Icon = HelpIcon }) => {
const handler = usePopperHandler(width)
return ( return (
<ClickAwayListener onClickAway={handleCloseHelpPopper}> <ClickAwayListener onClickAway={handler.handleCloseHelpPopper}>
<div> <div>
<button <button
className={classes.transparentButton} className={handler.classes.transparentButton}
onClick={handleOpenHelpPopper}> onClick={handler.handleOpenHelpPopper}>
<Icon /> <Icon />
</button> </button>
<Popper <Popper
open={helpPopperOpen} open={handler.helpPopperOpen}
anchorEl={helpPopperAnchorEl} anchorEl={handler.helpPopperAnchorEl}
placement="bottom"> placement="bottom">
<div className={classes.popoverContent}>{children}</div> <div className={handler.classes.popoverContent}>{children}</div>
</Popper> </Popper>
</div> </div>
</ClickAwayListener> </ClickAwayListener>
@ -52,31 +64,20 @@ const Tooltip = memo(({ children, width, Icon = HelpIcon }) => {
}) })
const HoverableTooltip = memo(({ parentElements, children, width }) => { const HoverableTooltip = memo(({ parentElements, children, width }) => {
const classes = useStyles({ width }) const handler = usePopperHandler(width)
const [helpPopperAnchorEl, setHelpPopperAnchorEl] = useState(null)
const handleOpenHelpPopper = event => {
setHelpPopperAnchorEl(helpPopperAnchorEl ? null : event.currentTarget)
}
const handleCloseHelpPopper = () => {
setHelpPopperAnchorEl(null)
}
const helpPopperOpen = Boolean(helpPopperAnchorEl)
return ( return (
<div> <div>
<div <div
onMouseEnter={handleOpenHelpPopper} onMouseEnter={handler.handleOpenHelpPopper}
onMouseLeave={handleCloseHelpPopper}> onMouseLeave={handler.handleCloseHelpPopper}>
{parentElements} {parentElements}
</div> </div>
<Popper <Popper
open={helpPopperOpen} open={handler.helpPopperOpen}
anchorEl={helpPopperAnchorEl} anchorEl={handler.helpPopperAnchorEl}
placement="bottom"> placement="bottom">
<div className={classes.popoverContent}>{children}</div> <div className={handler.classes.popoverContent}>{children}</div>
</Popper> </Popper>
</div> </div>
) )