App.js 2.64 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
import {
  BrowserRouter,
  MemoryRouter,
  Redirect,
  Route,
  Switch
} from 'react-router-dom';
import { inject, observer } from 'mobx-react';
import BackupAccount from '../BackupAccount';
Amaury Martiny's avatar
Amaury Martiny committed
import RequireHealthOverlay from '../RequireHealthOverlay';
import Send from '../Send';
import Whitelist from '../Whitelist';
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('onboardingStore', 'parityStore')
Amaury Martiny's avatar
Amaury Martiny committed
@observer
class App extends Component {
Amaury Martiny's avatar
Amaury Martiny committed
  /**
   * Decide which screen to render.
   */
  render () {
Amaury Martiny's avatar
Amaury Martiny committed
    const {
      onboardingStore: { isFirstRun },
      parityStore: { api }
Amaury Martiny's avatar
Amaury Martiny committed
    } = this.props;

Amaury Martiny's avatar
Amaury Martiny committed
    if (isFirstRun) {
          <Onboarding />
        </div>
      );
Amaury Martiny's avatar
Amaury Martiny committed
    // The child components make use of light.js and light.js needs to be passed
    // an API first, otherwise it will throw an error.
    // We set parityStore.api right after we set the API for light.js, so we
    // verify here that parityStore.api is defined, and if not we don't render
    // the children, just a <RequireHealthOverlay />.
Amaury Martiny's avatar
Amaury Martiny committed
    if (!api) {
        <RequireHealthOverlay fullscreen require='node'>
          {/* Adding these components to have minimum height on window */}
          <div className='content'>
            <div className='window' />
          </div>
        </RequireHealthOverlay>
Amaury Martiny's avatar
Amaury Martiny committed
    return (
      <div className='content'>
        <div className='window'>
          <Router>
            <Switch>
              {/* The next line is the homepage */}
              <Redirect exact from='/' to='/accounts' />
              <Route path='/accounts' component={Accounts} />
              <Route path='/onboarding' component={Onboarding} />
              <Route path='/tokens/:accountAddress' component={Tokens} />
              <Route path='/whitelist/:accountAddress' component={Whitelist} />
              <Route path='/backup/:accountAddress' component={BackupAccount} />
              <Route
                path='/send/:tokenAddress/from/:accountAddress'
                component={Send}
              />
              <Redirect from='*' to='/' />
            </Switch>
          </Router>
        </div>
}

export default App;