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/AppLayout.tsx

87 lines
3.1 KiB
TypeScript
Raw Normal View History

import React, { StrictMode, useCallback, useState } from 'react';
2023-06-01 12:12:16 -04:00
import AppBar from '@mui/material/AppBar';
import Box from '@mui/material/Box';
2023-11-28 10:26:14 -05:00
import { type Theme } from '@mui/material/styles';
import useMediaQuery from '@mui/material/useMediaQuery';
2023-06-01 12:12:16 -04:00
import { Outlet, useLocation } from 'react-router-dom';
import AppBody from 'components/AppBody';
import CustomCss from 'components/CustomCss';
import ElevationScroll from 'components/ElevationScroll';
import { DRAWER_WIDTH } from 'components/ResponsiveDrawer';
import ThemeCss from 'components/ThemeCss';
2023-06-01 12:12:16 -04:00
import { useApi } from 'hooks/useApi';
import AppToolbar from './components/AppToolbar';
import AppDrawer, { isDrawerPath } from './components/drawers/AppDrawer';
2023-06-01 12:12:16 -04:00
import './AppOverrides.scss';
export const Component = () => {
2023-11-28 10:26:14 -05:00
const [ isDrawerActive, setIsDrawerActive ] = useState(false);
2023-06-01 12:12:16 -04:00
const { user } = useApi();
const location = useLocation();
2024-01-07 02:48:29 -05:00
const isMediumScreen = useMediaQuery((t: Theme) => t.breakpoints.up('md'));
2023-11-28 10:26:14 -05:00
const isDrawerAvailable = isDrawerPath(location.pathname) && Boolean(user);
const isDrawerOpen = isDrawerActive && isDrawerAvailable;
2023-06-01 12:12:16 -04:00
const onToggleDrawer = useCallback(() => {
setIsDrawerActive(!isDrawerActive);
}, [ isDrawerActive, setIsDrawerActive ]);
return (
<>
<Box sx={{ position: 'relative', display: 'flex', height: '100%' }}>
<StrictMode>
<ElevationScroll elevate={false}>
<AppBar
position='fixed'
sx={{
width: {
xs: '100%',
md: isDrawerAvailable ? `calc(100% - ${DRAWER_WIDTH}px)` : '100%'
},
ml: {
xs: 0,
md: isDrawerAvailable ? DRAWER_WIDTH : 0
}
}}
>
<AppToolbar
isDrawerAvailable={!isMediumScreen && isDrawerAvailable}
isDrawerOpen={isDrawerOpen}
onDrawerButtonClick={onToggleDrawer}
/>
</AppBar>
</ElevationScroll>
2023-06-01 12:12:16 -04:00
{
isDrawerAvailable && (
<AppDrawer
open={isDrawerOpen}
onClose={onToggleDrawer}
onOpen={onToggleDrawer}
/>
)
}
</StrictMode>
2023-06-01 12:12:16 -04:00
<Box
component='main'
sx={{
width: '100%',
flexGrow: 1
}}
>
<AppBody>
<Outlet />
</AppBody>
</Box>
2023-06-01 12:12:16 -04:00
</Box>
<ThemeCss />
<CustomCss />
</>
2023-06-01 12:12:16 -04:00
);
};