1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
jellyfin-web/src/apps/experimental/components/AppToolbar/index.tsx

145 lines
4.8 KiB
TypeScript
Raw Normal View History

2023-07-06 17:09:54 -04:00
import ArrowBack from '@mui/icons-material/ArrowBack';
2022-11-28 16:39:13 -05:00
import MenuIcon from '@mui/icons-material/Menu';
import SearchIcon from '@mui/icons-material/Search';
import Box from '@mui/material/Box';
import IconButton from '@mui/material/IconButton';
import Toolbar from '@mui/material/Toolbar';
import Tooltip from '@mui/material/Tooltip';
import Typography from '@mui/material/Typography';
import React, { FC } from 'react';
2022-11-28 16:39:13 -05:00
import { Link, useLocation } from 'react-router-dom';
2023-05-16 00:28:52 -04:00
import appIcon from 'assets/img/icon-transparent.png';
2023-07-06 17:09:54 -04:00
import { appRouter } from 'components/router/appRouter';
import { useApi } from 'hooks/useApi';
import globalize from 'scripts/globalize';
2022-11-28 16:39:13 -05:00
import AppTabs from '../tabs/AppTabs';
import { isDrawerPath } from '../drawers/AppDrawer';
import UserMenuButton from './UserMenuButton';
import RemotePlayButton from './RemotePlayButton';
2022-11-28 16:39:13 -05:00
import SyncPlayButton from './SyncPlayButton';
interface AppToolbarProps {
2022-11-28 16:39:13 -05:00
isDrawerOpen: boolean
onDrawerButtonClick: (event: React.MouseEvent<HTMLElement>) => void
}
2023-07-06 17:09:54 -04:00
const onBackButtonClick = () => {
appRouter.back()
.catch(err => {
console.error('[AppToolbar] error calling appRouter.back', err);
});
};
const AppToolbar: FC<AppToolbarProps> = ({
2022-11-28 16:39:13 -05:00
isDrawerOpen,
2022-11-28 16:39:13 -05:00
onDrawerButtonClick
}) => {
2022-11-28 16:39:13 -05:00
const { user } = useApi();
const isUserLoggedIn = Boolean(user);
2022-11-28 16:39:13 -05:00
const location = useLocation();
const isDrawerAvailable = isDrawerPath(location.pathname);
2023-07-06 17:09:54 -04:00
const isBackButtonAvailable = appRouter.canGoBack();
return (
<Toolbar
variant='dense'
sx={{
flexWrap: {
xs: 'wrap',
lg: 'nowrap'
}
}}
>
2022-11-28 16:39:13 -05:00
{isUserLoggedIn && isDrawerAvailable && (
<Tooltip title={globalize.translate(isDrawerOpen ? 'MenuClose' : 'MenuOpen')}>
<IconButton
size='large'
edge='start'
color='inherit'
aria-label={globalize.translate(isDrawerOpen ? 'MenuClose' : 'MenuOpen')}
onClick={onDrawerButtonClick}
>
<MenuIcon />
</IconButton>
</Tooltip>
)}
2023-07-06 17:09:54 -04:00
{isBackButtonAvailable && (
<Tooltip title={globalize.translate('ButtonBack')}>
<IconButton
size='large'
// Set the edge if the drawer button is not shown
edge={!(isUserLoggedIn && isDrawerAvailable) ? 'start' : undefined}
color='inherit'
aria-label={globalize.translate('ButtonBack')}
onClick={onBackButtonClick}
>
<ArrowBack />
</IconButton>
</Tooltip>
)}
<Box
component={Link}
to='/'
color='inherit'
aria-label={globalize.translate('Home')}
sx={{
2023-07-06 17:09:54 -04:00
ml: 2,
display: 'inline-flex',
textDecoration: 'none'
}}
>
<Box
component='img'
2023-05-16 00:28:52 -04:00
src={appIcon}
sx={{
height: '2rem',
marginInlineEnd: 1
}}
/>
<Typography
variant='h6'
noWrap
component='div'
sx={{ display: { xs: 'none', sm: 'inline-block' } }}
>
Jellyfin
</Typography>
</Box>
2022-11-28 16:39:13 -05:00
<AppTabs isDrawerOpen={isDrawerOpen} />
{isUserLoggedIn && (
<>
<Box sx={{ display: 'flex', flexGrow: 1, justifyContent: 'flex-end' }}>
2022-11-28 16:39:13 -05:00
<SyncPlayButton />
<RemotePlayButton />
<Tooltip title={globalize.translate('Search')}>
<IconButton
size='large'
aria-label={globalize.translate('Search')}
color='inherit'
component={Link}
to='/search.html'
>
<SearchIcon />
</IconButton>
</Tooltip>
</Box>
<Box sx={{ flexGrow: 0 }}>
2022-11-28 16:39:13 -05:00
<UserMenuButton />
</Box>
</>
)}
</Toolbar>
);
};
export default AppToolbar;