App.js 3.24 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 isElectron from 'is-electron';
import ReactResizeDetector from 'react-resize-detector';
import { ThemeProvider } from 'styled-components';
import BackupAccount from '../BackupAccount';
import RequireHealth from '../RequireHealthOverlay';
import Send from '../Send';
import Whitelist from '../Whitelist';
import { fetherTheme, GlobalStyle } from '../assets/theme/globalStyle';
import { DivContent, DivWindow } from './App.styles';
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;
const electron = isElectron() ? window.require('electron') : null;
@inject('onboardingStore')
Amaury Martiny's avatar
Amaury Martiny committed
@observer
class App extends Component {
Amaury Martiny's avatar
Amaury Martiny committed
  handleResize = (_, height) => {
    if (!electron) {
      return;
    }
    // Send height to main process
    electron.ipcRenderer.send('asynchronous-message', 'app-resize', height);
Amaury Martiny's avatar
Amaury Martiny committed
  /**
   * Decide which screen to render.
   */
  render () {
Amaury Martiny's avatar
Amaury Martiny committed
    const {
      onboardingStore: { isFirstRun }
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
    return (
      <ReactResizeDetector handleHeight onResize={this.handleResize}>
        <ThemeProvider theme={fetherTheme}>
          <div>
            <GlobalStyle theme={fetherTheme} />
            <DivContent>
              <DivWindow>
                {/* Don't display child components requiring RPCs if API is not yet set */}
                <RequireHealth require='connected' fullscreen>
                  <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>
                </RequireHealth>
              </DivWindow>
            </DivContent>
      </ReactResizeDetector>
}

export default App;