cncjs
69 строк · 1.8 Кб
1import React, { PureComponent } from 'react';2import { Redirect, withRouter } from 'react-router-dom';3import { trackPage } from '../lib/analytics';4import Header from './Header';5import Sidebar from './Sidebar';6import Workspace from './Workspace';7import Settings from './Settings';8import styles from './App.styl';9
10class App extends PureComponent {11static propTypes = {12...withRouter.propTypes13};14
15render() {16const { location } = this.props;17const accepted = ([18'/workspace',19'/settings',20'/settings/general',21'/settings/workspace',22'/settings/machine-profiles',23'/settings/user-accounts',24'/settings/controller',25'/settings/commands',26'/settings/events',27'/settings/about'28].indexOf(location.pathname) >= 0);29
30if (!accepted) {31return (32<Redirect33to={{34pathname: '/workspace',35state: {36from: location37}38}}39/>40);41}42
43trackPage(location.pathname);44
45return (46<div>47<Header {...this.props} />48<aside className={styles.sidebar} id="sidebar">49<Sidebar {...this.props} />50</aside>51<div className={styles.main}>52<div className={styles.content}>53<Workspace54{...this.props}55style={{56display: (location.pathname !== '/workspace') ? 'none' : 'block'57}}58/>59{location.pathname.indexOf('/settings') === 0 &&60<Settings {...this.props} />61}62</div>63</div>64</div>65);66}67}
68
69export default withRouter(App);70