import React, { useState, useEffect } from 'react'; import { connect } from 'react-redux'; import { NavLink, useNavigate, generatePath } from 'react-router-dom'; import AppBar from '@mui/material/AppBar'; import IconButton from '@mui/material/IconButton'; import Menu from '@mui/material/Menu'; import MenuItem from '@mui/material/MenuItem'; import Toolbar from '@mui/material/Toolbar'; import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown'; import CloseIcon from '@mui/icons-material/Close'; import MailOutlineRoundedIcon from '@mui/icons-material/MailOutline'; import MenuRoundedIcon from '@mui/icons-material/MenuRounded'; import * as _ from 'lodash'; import { AuthenticationService, RoomsService } from 'api'; import { CardImportDialog } from 'dialogs'; import { Images } from 'images'; import { RoomsSelectors, ServerSelectors } from 'store'; import { Room, RouteEnum, User } from 'types'; import './Header.css'; const Header = ({ joinedRooms, serverState, user }: HeaderProps) => { const navigate = useNavigate(); const [state, setState] = useState({ anchorEl: null, showCardImportDialog: false, options: [], }); useEffect(() => { let options: string[] = [ 'Account', 'Replays', ]; if (user && AuthenticationService.isModerator(user)) { options = [ ...options, 'Administration', 'Logs' ]; } setState(s => ({ ...s, options })); }, [user]); const handleMenuOpen = (event) => { setState(s => ({ ...s, anchorEl: event.target })); } const handleMenuItemClick = (option: string) => { const route = RouteEnum[option.toUpperCase()]; navigate(generatePath(route)); } const handleMenuClose = () => { setState(s => ({ ...s, anchorEl: null })); } const leaveRoom = (event, roomId) => { event.preventDefault(); RoomsService.leaveRoom(roomId); }; const openImportCardWizard = () => { setState(s => ({ ...s, showCardImportDialog: true })); handleMenuClose(); } const closeImportCardWizard = () => { setState(s => ({ ...s, showCardImportDialog: false })); } return (
logo { AuthenticationService.isConnected(serverState) && ( ) }
{ AuthenticationService.isConnected(serverState) && (
) }
); } interface HeaderProps { serverState: number; server: string; user: User; joinedRooms: Room[]; } interface HeaderState { anchorEl: Element; showCardImportDialog: boolean; options: string[]; } const mapStateToProps = state => ({ serverState: ServerSelectors.getState(state), server: ServerSelectors.getName(state), user: ServerSelectors.getUser(state), joinedRooms: RoomsSelectors.getJoinedRooms(state), }); export default connect(mapStateToProps)(Header);