Home Reference Source Repository

src/index.js

/*!
 * Codefolio
 * Copyright(c) 2016 MSMFSD
 * MIT Licensed
 */
/*eslint-disable*/
if (process.env.NODE_ENV !== 'production') { console.log('%c codefolio ', 'background: #171A1F; color: #EE6E73') }
/*eslint-enable*/
import React from 'react'
import { Router, Route, IndexRoute, browserHistory, applyRouterMiddleware } from 'react-router'
import useScroll from 'react-router-scroll'
import { syncHistoryWithStore } from 'react-router-redux'
import { Provider } from 'react-redux'
import { render } from 'react-dom'
import initialState from './store/initial-state'
import configureStore from './store'
import { authInit } from './actions'
import Profile from './containers/Profile'
import Project from './containers/Project'
import Login from './containers/admin/Login'
import Register from './containers/admin/Register'
import Forgot from './containers/admin/Forgot'
import Reset from './containers/admin/Reset'
import AdminDashboard from './containers/admin/AdminDashboard'
import EditAdministrator from './containers/admin/EditAdministrator'
import EditProfile from './containers/admin/EditProfile'
import EditProject from './containers/admin/EditProject'
import NewProject from './containers/admin/NewProject'
import AdminLayout from './components/admin/AdminLayout/AdminLayout'
import App from './components/App/App'
import NotFound from './components/NotFound/NotFound'
import './assets/css/Global.css'

// configure store/history
const store = configureStore(initialState)
const history = syncHistoryWithStore(browserHistory, store)

// fire auth init action
store.dispatch(authInit())

// redirect admin to login?
const redirectIfLoggedOut = (nextState, replace) => {
  if (!store.getState().auth.token || !store.getState().auth.username) {
    replace('/login')
  }
}
// redirect reset/forgot/login/register to admin?
const redirectIfLoggedIn = (nextState, replace) => {
  if (store.getState().auth.token || store.getState().auth.username) {
    replace('/admin')
  }
}

render(<Provider store={store}>
    <Router history={history} render={applyRouterMiddleware(useScroll())}>
      <Route path={'/login'} component={Login} onEnter={redirectIfLoggedIn}/>
      <Route path={'/register'} component={Register} onEnter={redirectIfLoggedIn}/>
      <Route path={'/forgot'} component={Forgot} onEnter={redirectIfLoggedIn}/>
      <Route path={'/reset/:resetToken'} component={Reset} onEnter={redirectIfLoggedIn}/>
      <Route path={'/admin'} component={AdminLayout} onEnter={redirectIfLoggedOut}>
        <IndexRoute component={AdminDashboard}/>
        <Route path={'edit-administrator'} component={EditAdministrator} />
        <Route path={'edit-profile'} component={EditProfile} />
        <Route path={'edit-project/:projectId'} component={EditProject} />
        <Route path={'new-project'} component={NewProject} />
      </Route>
      <Route path={'/'} component={App}>
        <IndexRoute component={Profile} />
        <Route path={'profile'} component={Profile} />
        <Route path={'projects/:projectId'} component={Project}/>
        <Route path={'*'} component={NotFound}/>
      </Route>
    </Router>
  </Provider>, document.getElementById('root'))