diff --git a/packages/web/src/components/AccountDropdownMenu/index.tsx b/packages/web/src/components/AccountDropdownMenu/index.tsx new file mode 100644 index 00000000..dd88fa6e --- /dev/null +++ b/packages/web/src/components/AccountDropdownMenu/index.tsx @@ -0,0 +1,57 @@ +import * as React from 'react'; +import { useNavigate } from 'react-router-dom'; +import MenuItem from '@mui/material/MenuItem'; +import Menu, { MenuProps } from '@mui/material/Menu'; + +import * as URLS from 'config/urls'; +import useAuthentication from 'hooks/useAuthentication'; +import useFormatMessage from 'hooks/useFormatMessage'; + +type AccountDropdownMenuProps = { + open: boolean; + onClose: () => void; + anchorEl: MenuProps["anchorEl"]; + id: string; +} + +function AccountDropdownMenu(props: AccountDropdownMenuProps): React.ReactElement { + const formatMessage = useFormatMessage(); + const authentication = useAuthentication(); + const navigate = useNavigate(); + + const { + open, + onClose, + anchorEl, + id + } = props + + const logout = () => { + authentication.updateToken(''); + onClose(); + + navigate(URLS.LOGIN); + }; + + return ( +
+ ); +} + +export default AccountDropdownMenu; diff --git a/packages/web/src/components/AppBar/index.tsx b/packages/web/src/components/AppBar/index.tsx index 58420a22..f539a1f9 100644 --- a/packages/web/src/components/AppBar/index.tsx +++ b/packages/web/src/components/AppBar/index.tsx @@ -8,8 +8,9 @@ import IconButton from '@mui/material/IconButton'; import Typography from '@mui/material/Typography'; import MenuIcon from '@mui/icons-material/Menu'; import MenuOpenIcon from '@mui/icons-material/MenuOpen'; -import SettingsIcon from '@mui/icons-material/Settings'; +import AccountCircleIcon from '@mui/icons-material/AccountCircle'; +import AccountDropdownMenu from 'components/AccountDropdownMenu'; import Container from 'components/Container'; import HideOnScroll from 'components/HideOnScroll'; import { FormattedMessage } from 'react-intl'; @@ -21,6 +22,8 @@ type AppBarProps = { maxWidth?: ContainerProps["maxWidth"]; }; +const accountMenuId = 'account-menu'; + export default function AppBar(props: AppBarProps): React.ReactElement { const { drawerOpen, @@ -32,6 +35,18 @@ export default function AppBar(props: AppBarProps): React.ReactElement { const theme = useTheme(); const matchSmallScreens = useMediaQuery(theme.breakpoints.down('md'), { noSsr: true }); + const [accountMenuAnchorElement, setAccountMenuAnchorElement] = React.useState