import React, { Component, Fragment } from 'react' import { Login, Logout, ResetPassword, ForgotPassword, ConfirmEmail, ProtectedRoute, DefaultRoute } from './Auth' import { Home } from './Home' import { Profile } from './Profile' import { Users } from './Users' import { Teams } from './Teams' import { System } from './System' import { HeaderButton, HeaderText, Column, Row, Text, Box } from 'ui' import { BrowserRouter as Router, Route, Switch } from 'react-router-dom' import logoImage from 'images/logo.png' import { versionInfo } from './version' import { sizeInfo, colorInfo } from 'ui/style' import { api } from 'src/API' import PropTypes from 'prop-types' import autobind from 'autobind-decorator' export class App extends Component { static propTypes = { history: PropTypes.oneOfType([PropTypes.array, PropTypes.object]), } constructor(props) { super(props) this.state = { loggedInUser: api.loggedInUser } } componentDidMount() { api.addListener('login', this.handleUpdate) api.addListener('logout', this.handleUpdate) } componentWillUnmount() { api.removeListener('login', this.handleUpdate) api.removeListener('logout', this.handleUpdate) } @autobind handleUpdate() { this.setState({ loggedInUser: api.loggedInUser }) } handleLogout() { // We have to use window here because App does not have history in it's props window.location.replace('/logout') } handleHome() { window.location.replace('/') } handleProfile() { window.location.replace('/profile') } @autobind handleChangeTitle(title) { this.setState({ title }) } render() { const { loggedInUser } = this.state let headerButtonsRight = null let headerButtonsLeft = null if (loggedInUser) { headerButtonsLeft = ( ) headerButtonsRight = ( ) } return ( {headerButtonsLeft} {headerButtonsRight} ()} /> ()} /> ()} /> ()} /> ()} /> {'v' + versionInfo.version} {versionInfo.copyright} ) } }