import React, { useContext, useRef, useState, useEffect } from 'react'; import { NavLink } from 'react-router-dom'; import { Grow, Paper, Popper, MenuItem, MenuList, IconButton, Switch, ClickAwayListener, Tooltip, Divider, } from '@material-ui/core'; import { makeStyles, createStyles, Theme } from '@material-ui/core/styles'; import { AuthenticationContext } from '@tabtabgo/core/providers/AuthenticationProvider'; import { UserSettingsContext } from '@tabtabgo/core/contexts/UserSettingsContext'; import Avatar from '@material-ui/core/Avatar'; import FileService from '@tabtabgo/core/services/FileService'; import { getPersonInitials } from '@tabtabgo/core/Utilities'; //const RouterNavLink = React.forwardRef((props, ref) => ); const useStyles = makeStyles((theme: Theme) => createStyles({ root: { display: 'flex', }, paper: { marginRight: theme.spacing(2), }, buttonLink: { color: theme.palette.common.white, padding: 0, marginLeft: theme.spacing(1), }, icon: { width: 20, height: 20, zIndex: 4 }, menuItemLink: { backgroundColor: 'transparent', width: 'auto', '&:hover': { outline: 'none', backgroundColor: 'rgba(200, 200, 200, 0.2)', boxShadow: 'none', }, '&,&:hover,&:focus': { color: 'inherit', }, cursor: 'pointer', '& li': { marginTop: 8, }, }, menuItemIcon: { marginRight: theme.spacing(1), }, avatarImg: { width: '100%', verticalAlign: 'middle', border: '0', }, avatarLetters: { width: 40, verticalAlign: 'middle', border: '0', backgroundColor: theme.palette.secondary.main, fontSize: 'small', '&:hover,&:focus': { backgroundColor: theme.palette.secondary.dark, }, }, }), ); interface UserHeaderLinkProps { userRoutes: Array; } export default function UserHeaderLink({ userRoutes }: UserHeaderLinkProps) { const classes = useStyles(); const [open, setOpen] = useState(false); const anchorRef = useRef(null); const { user } = useContext(AuthenticationContext); const fileService = new FileService(); const settingContext = useContext(UserSettingsContext); const [state, setState] = useState({ showIds: settingContext.showIds, }); useEffect(() => { setState({ showIds: settingContext.showIds }); }, [settingContext.showIds]); const handleSettingChange = (name: string) => (event: React.ChangeEvent) => { setState({ ...state, [name]: event.target.checked }); settingContext.setSetting(name, event.target.checked); }; const handleToggle = () => { setOpen((prevOpen) => !prevOpen); }; const handleClose = (event: React.MouseEvent) => { if (anchorRef.current && anchorRef.current.contains(event.target as HTMLElement)) { return; } setOpen(false); }; function handleListKeyDown(event: React.KeyboardEvent) { if (event.key === 'Tab') { event.preventDefault(); setOpen(false); } } // return focus to the button when we transitioned from !open -> open const prevOpen = React.useRef(open); React.useEffect(() => { if (prevOpen.current === true && open === false) { anchorRef.current!.focus(); } prevOpen.current = open; }, [open]); if (!user) { return null; } return (
{user.profile && user.profile.avatar ? ( ) : ( {getPersonInitials({ person: user ? (user.profile ? user.profile : user) : {} })} )} {({ TransitionProps, placement }) => ( Show Ids {userRoutes && userRoutes.map((route) => ( {} {route.name} ))} )}
); }