import React, { Component } from 'react'; import { Provider } from 'react-redux'; import { withRouter, Switch, Redirect, HashRouter, Route, BrowserRouter } from 'react-router-dom'; // Components import Contracts from 'containers/Tabs/Contracts'; import ENS from 'containers/Tabs/ENS'; import GenerateWallet from 'containers/Tabs/GenerateWallet'; import SendTransaction from 'containers/Tabs/SendTransaction'; import Swap from 'containers/Tabs/Swap'; import SignAndVerifyMessage from 'containers/Tabs/SignAndVerifyMessage'; import BroadcastTx from 'containers/Tabs/BroadcastTx'; import ErrorScreen from 'components/ErrorScreen'; import PageNotFound from 'components/PageNotFound'; import LogOutPrompt from 'components/LogOutPrompt'; import { TitleBar } from 'components/ui'; import { Store } from 'redux'; import { pollOfflineStatus } from 'actions/config'; import { AppState } from 'reducers'; import { RouteNotFound } from 'components/RouteNotFound'; import 'what-input'; interface Props { store: Store; } interface State { error: Error | null; } export default class Root extends Component { public state = { error: null }; public componentDidMount() { this.props.store.dispatch(pollOfflineStatus()); } public componentDidCatch(error: Error) { this.setState({ error }); } public render() { const { store } = this.props; const { error } = this.state; if (error) { return ; } const CaptureRouteNotFound = withRouter(({ children, location }) => { return location && location.state && location.state.error ? ( ) : ( (children as JSX.Element) ); }); const routes = ( ); const Router = process.env.BUILD_DOWNLOADABLE && process.env.NODE_ENV === 'production' ? HashRouter : BrowserRouter; return ( {process.env.BUILD_ELECTRON && } {routes} ); } } const LegacyRoutes = withRouter(props => { const { history } = props; const { pathname, hash } = props.location; if (pathname === '/') { switch (hash) { case '#send-transaction': case '#offline-transaction': history.push('/send-transaction'); break; case '#generate-wallet': history.push('/'); break; case '#swap': history.push('/swap'); break; case '#contracts': history.push('/contracts'); break; case '#ens': history.push('/ens'); break; case '#view-wallet-info': history.push('/account/info'); break; case '#check-tx-status': history.push('/check-tx-status'); break; } } return ( ); });