import React, { Component } from "react"; import { connect } from "react-redux"; import { NavLink, withRouter, generatePath } from "react-router-dom"; import AppBar from "@material-ui/core/AppBar"; import IconButton from "@material-ui/core/IconButton"; import Menu from "@material-ui/core/Menu"; import MenuItem from "@material-ui/core/MenuItem"; import Toolbar from "@material-ui/core/Toolbar"; import ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown'; import CloseIcon from '@material-ui/icons/Close'; import MailOutlineRoundedIcon from '@material-ui/icons/MailOutline'; import MenuRoundedIcon from '@material-ui/icons/MenuRounded'; import * as _ from "lodash"; import { AuthenticationService, RoomsService } from "api"; import { RoomsSelectors, ServerSelectors } from "store"; import { Room, RouteEnum, User } from "types"; import "./Header.css"; import logo from "./logo.png"; class Header extends Component { state: HeaderState; options: string[] = [ 'Account', 'Replays', ]; constructor(props) { super(props); this.state = { anchorEl: null }; this.handleMenuOpen = this.handleMenuOpen.bind(this); this.handleMenuItemClick = this.handleMenuItemClick.bind(this); this.handleMenuClose = this.handleMenuClose.bind(this); this.leaveRoom = this.leaveRoom.bind(this); } componentDidUpdate(prevProps) { const currentRooms = this.props.joinedRooms; const previousRooms = prevProps.joinedRooms; if (currentRooms > previousRooms) { const { roomId } = _.difference(currentRooms, previousRooms)[0]; this.props.history.push(generatePath(RouteEnum.ROOM, { roomId })); } } handleMenuOpen(event) { this.setState({ anchorEl: event.target }); } handleMenuItemClick(option: string) { const route = RouteEnum[option.toUpperCase()]; this.props.history.push(generatePath(route)); } handleMenuClose() { this.setState({ anchorEl: null }); } leaveRoom(event, roomId) { event.preventDefault(); RoomsService.leaveRoom(roomId); }; render() { const { joinedRooms, state, user } = this.props; const { anchorEl } = this.state; let options = [ ...this.options ]; if (user && AuthenticationService.isModerator(user)) { options = [ ...options, 'Administration', 'Logs' ]; } return (
logo { AuthenticationService.isConnected(state) && ( ) }
{ AuthenticationService.isConnected(state) && (
) }
) } } interface HeaderProps { state: number; server: string; user: User; joinedRooms: Room[]; history: any; } interface HeaderState { anchorEl: Element } const mapStateToProps = state => ({ state: ServerSelectors.getState(state), server: ServerSelectors.getName(state), user: ServerSelectors.getUser(state), joinedRooms: RoomsSelectors.getJoinedRooms(state), }); export default withRouter(connect(mapStateToProps)(Header));