mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
201 lines
6.4 KiB
TypeScript
201 lines
6.4 KiB
TypeScript
import AccountCircle from '@mui/icons-material/AccountCircle';
|
|
import AppSettingsAlt from '@mui/icons-material/AppSettingsAlt';
|
|
import Close from '@mui/icons-material/Close';
|
|
import DashboardIcon from '@mui/icons-material/Dashboard';
|
|
import Edit from '@mui/icons-material/Edit';
|
|
import Logout from '@mui/icons-material/Logout';
|
|
import PhonelinkLock from '@mui/icons-material/PhonelinkLock';
|
|
import Settings from '@mui/icons-material/Settings';
|
|
import Storage from '@mui/icons-material/Storage';
|
|
import Divider from '@mui/material/Divider';
|
|
import ListItemIcon from '@mui/material/ListItemIcon';
|
|
import ListItemText from '@mui/material/ListItemText';
|
|
import Menu, { MenuProps } from '@mui/material/Menu';
|
|
import MenuItem from '@mui/material/MenuItem';
|
|
import React, { FC, useCallback } from 'react';
|
|
import { Link } from 'react-router-dom';
|
|
|
|
import { appHost } from 'components/apphost';
|
|
import { useApi } from 'hooks/useApi';
|
|
import { useQuickConnectEnabled } from 'hooks/useQuickConnect';
|
|
import globalize from 'lib/globalize';
|
|
import shell from 'scripts/shell';
|
|
import Dashboard from 'utils/dashboard';
|
|
|
|
export const ID = 'app-user-menu';
|
|
|
|
interface AppUserMenuProps extends MenuProps {
|
|
onMenuClose: () => void
|
|
}
|
|
|
|
const AppUserMenu: FC<AppUserMenuProps> = ({
|
|
anchorEl,
|
|
open,
|
|
onMenuClose
|
|
}) => {
|
|
const { user } = useApi();
|
|
const { data: isQuickConnectEnabled } = useQuickConnectEnabled();
|
|
|
|
const onClientSettingsClick = useCallback(() => {
|
|
shell.openClientSettings();
|
|
onMenuClose();
|
|
}, [ onMenuClose ]);
|
|
|
|
const onExitAppClick = useCallback(() => {
|
|
appHost.exit();
|
|
onMenuClose();
|
|
}, [ onMenuClose ]);
|
|
|
|
const onLogoutClick = useCallback(() => {
|
|
Dashboard.logout();
|
|
onMenuClose();
|
|
}, [ onMenuClose ]);
|
|
|
|
const onSelectServerClick = useCallback(() => {
|
|
Dashboard.selectServer();
|
|
onMenuClose();
|
|
}, [ onMenuClose ]);
|
|
|
|
return (
|
|
<Menu
|
|
anchorEl={anchorEl}
|
|
anchorOrigin={{
|
|
vertical: 'bottom',
|
|
horizontal: 'right'
|
|
}}
|
|
transformOrigin={{
|
|
vertical: 'top',
|
|
horizontal: 'right'
|
|
}}
|
|
id={ID}
|
|
keepMounted
|
|
open={open}
|
|
onClose={onMenuClose}
|
|
>
|
|
<MenuItem
|
|
component={Link}
|
|
to={`/userprofile?userId=${user?.Id}`}
|
|
onClick={onMenuClose}
|
|
>
|
|
<ListItemIcon>
|
|
<AccountCircle />
|
|
</ListItemIcon>
|
|
<ListItemText>
|
|
{globalize.translate('Profile')}
|
|
</ListItemText>
|
|
</MenuItem>
|
|
<MenuItem
|
|
component={Link}
|
|
to='/mypreferencesmenu'
|
|
onClick={onMenuClose}
|
|
>
|
|
<ListItemIcon>
|
|
<Settings />
|
|
</ListItemIcon>
|
|
<ListItemText>
|
|
{globalize.translate('Settings')}
|
|
</ListItemText>
|
|
</MenuItem>
|
|
|
|
{appHost.supports('clientsettings') && ([
|
|
<Divider key='client-settings-divider' />,
|
|
<MenuItem
|
|
key='client-settings-button'
|
|
onClick={onClientSettingsClick}
|
|
>
|
|
<ListItemIcon>
|
|
<AppSettingsAlt />
|
|
</ListItemIcon>
|
|
<ListItemText>
|
|
{globalize.translate('ClientSettings')}
|
|
</ListItemText>
|
|
</MenuItem>
|
|
])}
|
|
|
|
{/* ADMIN LINKS */}
|
|
{user?.Policy?.IsAdministrator && ([
|
|
<Divider key='admin-links-divider' />,
|
|
<MenuItem
|
|
key='admin-dashboard-link'
|
|
component={Link}
|
|
to='/dashboard'
|
|
onClick={onMenuClose}
|
|
>
|
|
|
|
<ListItemIcon>
|
|
<DashboardIcon />
|
|
</ListItemIcon>
|
|
<ListItemText primary={globalize.translate('TabDashboard')} />
|
|
</MenuItem>,
|
|
<MenuItem
|
|
key='admin-metadata-link'
|
|
component={Link}
|
|
to='/metadata'
|
|
onClick={onMenuClose}
|
|
>
|
|
<ListItemIcon>
|
|
<Edit />
|
|
</ListItemIcon>
|
|
<ListItemText primary={globalize.translate('MetadataManager')} />
|
|
</MenuItem>
|
|
])}
|
|
|
|
<Divider />
|
|
{isQuickConnectEnabled && (
|
|
<MenuItem
|
|
component={Link}
|
|
to='/quickconnect'
|
|
onClick={onMenuClose}
|
|
>
|
|
<ListItemIcon>
|
|
<PhonelinkLock />
|
|
</ListItemIcon>
|
|
<ListItemText>
|
|
{globalize.translate('QuickConnect')}
|
|
</ListItemText>
|
|
</MenuItem>
|
|
)}
|
|
|
|
{appHost.supports('multiserver') && (
|
|
<MenuItem
|
|
onClick={onSelectServerClick}
|
|
>
|
|
<ListItemIcon>
|
|
<Storage />
|
|
</ListItemIcon>
|
|
<ListItemText>
|
|
{globalize.translate('SelectServer')}
|
|
</ListItemText>
|
|
</MenuItem>
|
|
)}
|
|
|
|
<MenuItem
|
|
onClick={onLogoutClick}
|
|
>
|
|
<ListItemIcon>
|
|
<Logout />
|
|
</ListItemIcon>
|
|
<ListItemText>
|
|
{globalize.translate('ButtonSignOut')}
|
|
</ListItemText>
|
|
</MenuItem>
|
|
|
|
{appHost.supports('exitmenu') && ([
|
|
<Divider key='exit-menu-divider' />,
|
|
<MenuItem
|
|
key='exit-menu-button'
|
|
onClick={onExitAppClick}
|
|
>
|
|
<ListItemIcon>
|
|
<Close />
|
|
</ListItemIcon>
|
|
<ListItemText>
|
|
{globalize.translate('ButtonExitApp')}
|
|
</ListItemText>
|
|
</MenuItem>
|
|
])}
|
|
</Menu>
|
|
);
|
|
};
|
|
|
|
export default AppUserMenu;
|