import React, { useState, useEffect } from 'react'; import { NavLink, useNavigate, generatePath } from 'react-router-dom'; import IconButton from '@mui/material/IconButton'; import Menu from '@mui/material/Menu'; import MenuItem from '@mui/material/MenuItem'; import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown'; import CloseIcon from '@mui/icons-material/Close'; import MailOutlineRoundedIcon from '@mui/icons-material/MailOutlineRounded'; import MenuRoundedIcon from '@mui/icons-material/MenuRounded'; import { CardImportDialog } from '@app/dialogs'; import { useWebClient } from '@app/hooks'; import { Images } from '@app/images'; import { RoomsSelectors, ServerSelectors } from '@app/store'; import { App } from '@app/types'; import { useAppSelector } from '@app/store'; import './LeftNav.css'; interface LeftNavState { anchorEl: Element; showCardImportDialog: boolean; options: string[]; } const LeftNav = () => { const joinedRooms = useAppSelector(state => RoomsSelectors.getJoinedRooms(state)); const isConnected = useAppSelector(ServerSelectors.getIsConnected); const isModerator = useAppSelector(ServerSelectors.getIsUserModerator); const navigate = useNavigate(); const webClient = useWebClient(); const [state, setState] = useState({ anchorEl: null, showCardImportDialog: false, options: [], }); useEffect(() => { let options: string[] = [ 'Account', 'Replays', ]; if (isModerator) { options = [ ...options, 'Administration', 'Logs' ]; } setState(s => ({ ...s, options })); }, [isModerator]); const handleMenuOpen = (event) => { setState(s => ({ ...s, anchorEl: event.target })); } const handleMenuItemClick = (option: string) => { const route = App.RouteEnum[option.toUpperCase()]; navigate(generatePath(route)); } const handleMenuClose = () => { setState(s => ({ ...s, anchorEl: null })); } const leaveRoom = (event, roomId) => { event.preventDefault(); webClient.request.rooms.leaveRoom(roomId); }; const openImportCardWizard = () => { setState(s => ({ ...s, showCardImportDialog: true })); handleMenuClose(); } const closeImportCardWizard = () => { setState(s => ({ ...s, showCardImportDialog: false })); } return (
logo { isConnected && ( ) }
{ isConnected && (
) }
); } export default LeftNav;