/******************************************************************************** * Copyright (c) 2020 TypeFox and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. * * SPDX-License-Identifier: EPL-2.0 ********************************************************************************/ import { FunctionComponent, PropsWithChildren, useContext, useRef } from 'react'; import { Typography, MenuItem, Link, Button, IconButton, Accordion, AccordionSummary, Avatar, AccordionDetails } from '@mui/material'; import { useLocation, Link as RouteLink } from 'react-router-dom'; import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; import GitHubIcon from '@mui/icons-material/GitHub'; import MenuBookIcon from '@mui/icons-material/MenuBook'; import ForumIcon from '@mui/icons-material/Forum'; import InfoIcon from '@mui/icons-material/Info'; import PublishIcon from '@mui/icons-material/Publish'; import AccountBoxIcon from '@mui/icons-material/AccountBox'; import { UserAvatar } from '../pages/user/avatar'; import { UserSettingsRoutes } from '../pages/user/user-settings-routes'; import { styled, Theme } from '@mui/material/styles'; import { MainContext } from '../context'; import SettingsIcon from '@mui/icons-material/Settings'; import AdminPanelSettingsIcon from '@mui/icons-material/AdminPanelSettings'; import LogoutIcon from '@mui/icons-material/Logout'; import { AdminDashboardRoutes } from '../pages/admin-dashboard/admin-dashboard-routes'; import { LogoutForm } from '../pages/user/logout'; import { LoginComponent } from './login'; //-------------------- Mobile View --------------------// // eslint-disable-next-line react-refresh/only-export-components export const itemIcon = { mr: 1, width: '16px', height: '16px', }; export const MenuItemText: FunctionComponent = ({ children }) => { return ( {children} ); }; export const MobileUserAvatar: FunctionComponent = () => { const context = useContext(MainContext); const user = context.user; const logoutFormRef = useRef(null); if (!user) { return null; } return } aria-controls='user-actions' id='user-avatar' > {user.loginName} {user.loginName} Settings { user.role === 'admin' ? Admin Dashboard : null } logoutFormRef.current?.submit()}> Log Out ; }; export const MobileMenuContent: FunctionComponent = () => { const location = useLocation(); const { user, loginProviders } = useContext(MainContext); return <> {loginProviders && ( user ? ( ) : ( ( Log In )} /> ) )} {loginProviders && !location.pathname.startsWith(UserSettingsRoutes.ROOT) && ( Publish Extension )} Source Code Documentation Slack Workspace About This Service ; }; //-------------------- Default View --------------------// // eslint-disable-next-line react-refresh/only-export-components export const headerItem = ({ theme }: { theme: Theme }) => ({ margin: theme.spacing(2.5), color: theme.palette.text.primary, textDecoration: 'none', fontSize: '1.1rem', fontFamily: theme.typography.fontFamily, fontWeight: theme.typography.fontWeightLight, letterSpacing: 1, '&:hover': { color: theme.palette.secondary.main, textDecoration: 'none' } }); // eslint-disable-next-line react-refresh/only-export-components export const MenuLink = styled(Link)(headerItem); // eslint-disable-next-line react-refresh/only-export-components export const MenuRouteLink = styled(RouteLink)(headerItem); export const DefaultMenuContent: FunctionComponent = () => { const { user, loginProviders } = useContext(MainContext); return <> Documentation Slack Workspace About {loginProviders && ( <> { user ? : { if (href) { return ( ); } else { return ( ); } }} /> } )} ; };