import React, { Component } from "react"; import { Route, Switch, withRouter } from "react-router-dom"; import PropTypes from "prop-types"; import { connect } from "react-redux"; import { translate } from "react-i18next"; import { ban, authenticate } from "actions/auth"; import { initialize as initializeVolume } from "actions/volume"; import Navbar from "components/Global/Navbar"; import config from "config"; import AuthRoute from "components/AuthRoute"; import io from "./io"; import { asyncComponent } from 'react-async-component'; @connect() @translate(["pages"], { wait: false }) class App extends Component { // eslint-disable-line react/no-multi-comp static propTypes = { dispatch: PropTypes.func, t: PropTypes.func, }; static defaultProps = { dispatch: () => {}, t: () => {}, }; componentDidMount() { const { dispatch } = this.props; io.init(config.serverDomain); io.getSocket(socket => { socket.on("ready", (loggedIn, role, username, userId) => { dispatch(authenticate({ loggedIn, role, username, userId })); }); socket.on("keep.event:banned", reason => dispatch(ban(reason))); socket.on("keep.event:user.session.removed", () => { location.reload(); // TODO Give user prompt they've been logged out and let them continue. }); }); if (localStorage.getItem("github_redirect")) { // TODO localStorage.removeItem("github_redirect"); } let volume = parseFloat(localStorage.getItem("volume")); volume = (typeof volume === "number" && !isNaN(volume)) ? volume : 20; localStorage.setItem("volume", volume); dispatch(initializeVolume(volume)); } render() { const { t } = this.props; return (