App.js 2.16 KiB
Newer Older
Amaury Martiny's avatar
Amaury Martiny committed
// Copyright 2015-2018 Parity Technologies (UK) Ltd.
// This file is part of Parity.
Amaury Martiny's avatar
Amaury Martiny committed
//
Amaury Martiny's avatar
Amaury Martiny committed
// SPDX-License-Identifier: BSD-3-Clause
Amaury Martiny's avatar
Amaury Martiny committed
import React, { Component } from 'react';
import {
  BrowserRouter,
  MemoryRouter,
  Redirect,
  Route,
  Switch
} from 'react-router-dom';
Amaury Martiny's avatar
Amaury Martiny committed
import { inject, observer } from 'mobx-react';
import Accounts from '../Accounts';
Amaury Martiny's avatar
Amaury Martiny committed
import Debug from '../utils/debug';
Amaury Martiny's avatar
Amaury Martiny committed
import Onboarding from '../Onboarding';
Amaury Martiny's avatar
Amaury Martiny committed
import Overlay from '../Overlay';
Amaury Martiny's avatar
Amaury Martiny committed
import Send from '../Send';
Amaury Martiny's avatar
Amaury Martiny committed
import { STATUS } from '../stores/healthStore';
import Tokens from '../Tokens';
import Whitelist from '../Whitelist';
Amaury Martiny's avatar
Amaury Martiny committed
const debug = Debug('App');
Amaury Martiny's avatar
Amaury Martiny committed
// Use MemoryRouter for production viewing in file:// protocol
// https://github.com/facebook/create-react-app/issues/3591
const Router =
  process.env.NODE_ENV === 'production' ? MemoryRouter : BrowserRouter;

@inject('healthStore', 'onboardingStore')
Amaury Martiny's avatar
Amaury Martiny committed
@observer
class App extends Component {
Amaury Martiny's avatar
Amaury Martiny committed
  componentDidCatch (err) {
    debug(err.message);
    if (process.env.NODE_ENV !== 'development') {
      // Redirect to '/' on errors
      window.location.href = '/';
    }
  render () {
    return (
      <Router>
        <div className='wrapper'>
Amaury Martiny's avatar
Amaury Martiny committed
          <div className='content'>{this.renderScreen()}</div>
        </div>
      </Router>
Amaury Martiny's avatar
Amaury Martiny committed

  /**
   * Decide which screen to render.
   */
  renderScreen () {
    const {
Amaury Martiny's avatar
Amaury Martiny committed
      onboardingStore: { isFirstRun },
Amaury Martiny's avatar
Amaury Martiny committed
      healthStore: {
        health: { status }
      }
    } = this.props;

Amaury Martiny's avatar
Amaury Martiny committed
    if (isFirstRun) {
      return (
        <div className='window'>
          <Onboarding />
        </div>
      );
Amaury Martiny's avatar
Amaury Martiny committed
    return (
      <div className='window'>
Amaury Martiny's avatar
Amaury Martiny committed
        {status !== STATUS.GOOD && <Overlay />}
        <Switch>
Amaury Martiny's avatar
Amaury Martiny committed
          {/* The next line is the hoempage */}
Amaury Martiny's avatar
Amaury Martiny committed
          <Redirect exact from='/' to='/tokens' />
          <Route path='/accounts' component={Accounts} />
          <Route path='/onboarding' component={Onboarding} />
          <Route path='/send' component={Send} />
          <Route path='/whitelist' component={Whitelist} />
          <Route path='/tokens' component={Tokens} />
          <Redirect from='*' to='/' />
        </Switch>
      </div>
}

export default App;