import { styled } from '@mui/material/styles' import IconButton from '@mui/material/IconButton' import MuiAppBar, { AppBarProps as MuiAppBarProps } from '@mui/material/AppBar' import Fab from '@mui/material/Fab' import StepIcon from '@mui/material/StepIcon' import Toolbar from '@mui/material/Toolbar' import Tooltip from '@mui/material/Tooltip' import Typography from '@mui/material/Typography' import Slide from '@mui/material/Slide' import Zoom from '@mui/material/Zoom' import ExpandMore from '@mui/icons-material/ExpandMore' import Fullscreen from '@mui/icons-material/Fullscreen' import FullscreenExit from '@mui/icons-material/FullscreenExit' import Link from '@mui/icons-material/Link' import Menu from '@mui/icons-material/Menu' import QrCode2 from '@mui/icons-material/QrCode2' import RoomPreferences from '@mui/icons-material/RoomPreferences' import { useContext } from 'react' import { ShellContext } from 'contexts/ShellContext' import { drawerWidth } from './Drawer' import { peerListWidth } from './PeerList' interface AppBarProps extends MuiAppBarProps { isDrawerOpen?: boolean isPeerListOpen?: boolean } export const AppBar = styled(MuiAppBar, { shouldForwardProp: prop => prop !== 'isDrawerOpen' && prop !== 'isPeerListOpen', })(({ theme, isDrawerOpen, isPeerListOpen }) => ({ transition: theme.transitions.create(['margin', 'width'], { easing: theme.transitions.easing.sharp, duration: theme.transitions.duration.leavingScreen, }), ...(isDrawerOpen && { width: `calc(100% - ${drawerWidth}px)`, marginLeft: `${drawerWidth}px`, }), ...(isPeerListOpen && { width: `calc(100% - ${peerListWidth}px)`, marginRight: `${peerListWidth}px`, }), ...((isDrawerOpen || isPeerListOpen) && { transition: theme.transitions.create(['margin', 'width'], { easing: theme.transitions.easing.easeOut, duration: theme.transitions.duration.enteringScreen, }), }), ...(isDrawerOpen && isPeerListOpen && { width: `calc(100% - ${drawerWidth}px - ${peerListWidth}px)`, }), })) interface ShellAppBarProps { onDrawerOpen: () => void onLinkButtonClick: () => Promise isDrawerOpen: boolean isPeerListOpen: boolean title: string onPeerListClick: () => void onRoomControlsClick: () => void setIsQRCodeDialogOpen: (isOpen: boolean) => void showAppBar: boolean isFullscreen: boolean setIsFullscreen: (isFullscreen: boolean) => void } export const ShellAppBar = ({ onDrawerOpen, onLinkButtonClick, isDrawerOpen, isPeerListOpen, setIsQRCodeDialogOpen, title, onPeerListClick, onRoomControlsClick, showAppBar, isFullscreen, setIsFullscreen, }: ShellAppBarProps) => { const { peerList } = useContext(ShellContext) const handleQRCodeClick = () => setIsQRCodeDialogOpen(true) const onClickFullscreen = () => setIsFullscreen(!isFullscreen) return ( <> {title} {isFullscreen ? : } ) }