import React, { forwardRef, useCallback, useState } from 'react'; import Popover from '@material-ui/core/Popover'; import Box from '@material-ui/core/Box'; import { PopoverProps } from './types'; import { useStyles } from './styles'; export const PopupFocus = forwardRef((props, ref) => { const { trigger, content, anchorOrigin, transformOrigin, mountNode } = props; const classes = useStyles(); const [open, setOpen] = useState(false); const [anchorEl, setAnchorEl] = useState(null); const [focused, setFocused] = useState(false); const handleFocus = useCallback( (event: React.FocusEvent) => { if (focused) { setFocused(false); } else { setAnchorEl(event.currentTarget); setOpen(true); setFocused(true); } }, [focused], ); const handleClose = useCallback(() => { setAnchorEl(null); setOpen(false); }, []); return ( <> {React.cloneElement(trigger, { onFocus: handleFocus, ref })} {content} ); });