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 Chip from "@material-ui/core/Chip"; 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 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[] = [ 'Decks', 'Replays', ]; constructor(props) { super(props); this.state = { anchorEl: null, }; this.handleMenuClick = this.handleMenuClick.bind(this); this.handleMenuItemClick = this.handleMenuItemClick.bind(this); this.handleMenuClose = this.handleMenuClose.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 })); } } handleMenuClick({ target }) { this.setState({ anchorEl: target }); } handleMenuItemClick(option: string) { const route = RouteEnum[option.toUpperCase()]; this.props.history.push(generatePath(route)); this.handleMenuClose(); } handleMenuClose() { this.setState({ anchorEl: null }); } render() { const { joinedRooms, server, state, user } = this.props; const anchorEl = this.state.anchorEl; const options = [ ...this.options ]; if (user && AuthenticationService.isModerator(user)) { options.push('Administration'); options.push('Logs'); } return (
{/*
*/} logo { AuthenticationService.isConnected(state) && (
) }
{ !!joinedRooms.length && ( ) }
) } } const Rooms = props => { const onLeaveRoom = (event, roomId) => { event.preventDefault(); RoomsService.leaveRoom(roomId); }; return
Rooms: { _.reduce(props.rooms, (rooms, { name, roomId}) => { rooms.push( onLeaveRoom(event, roomId)} /> ); return rooms; }, []) }
}; 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));