Tracim.jsx 2.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import React from 'react'
  2. import { connect } from 'react-redux'
  3. import { translate } from 'react-i18next'
  4. import Header from './Header.jsx'
  5. import Login from './Login.jsx'
  6. import Dashboard from './Dashboard.jsx'
  7. import Account from './Account.jsx'
  8. import FlashMessage from '../component/FlashMessage.jsx'
  9. import WorkspaceContent from './WorkspaceContent.jsx'
  10. import WIPcomponent from './WIPcomponent.jsx'
  11. import {
  12. Route, withRouter, Switch
  13. } from 'react-router-dom'
  14. import PrivateRoute from './PrivateRoute.jsx'
  15. import { COOKIE, PAGE } from '../helper.js'
  16. import {
  17. getUserIsConnected
  18. } from '../action-creator.async.js'
  19. import {
  20. removeFlashMessage,
  21. setUserConnected
  22. } from '../action-creator.sync.js'
  23. import Cookies from 'js-cookie'
  24. class Tracim extends React.Component {
  25. async componentDidMount () {
  26. const { dispatch } = this.props
  27. const userFromCookies = {
  28. email: Cookies.get(COOKIE.USER_LOGIN),
  29. auth: Cookies.get(COOKIE.USER_AUTH)
  30. }
  31. const fetchGetUserIsConnected = await dispatch(getUserIsConnected(userFromCookies))
  32. switch (fetchGetUserIsConnected.status) {
  33. case 200:
  34. dispatch(setUserConnected({
  35. ...fetchGetUserIsConnected.json,
  36. auth: userFromCookies.auth,
  37. logged: true
  38. }))
  39. break
  40. case 401:
  41. dispatch(setUserConnected({logged: false})); break
  42. default:
  43. dispatch(setUserConnected({logged: null})); break
  44. }
  45. }
  46. handleRemoveFlashMessage = msg => this.props.dispatch(removeFlashMessage(msg))
  47. render () {
  48. const { flashMessage, t } = this.props
  49. return (
  50. <div className='tracim'>
  51. <Header />
  52. <FlashMessage flashMessage={flashMessage} removeFlashMessage={this.handleRemoveFlashMessage} t={t} />
  53. <div className='tracim__content'>
  54. <Route path={PAGE.LOGIN} component={Login} />
  55. <PrivateRoute exact path='/' component={WorkspaceContent} />
  56. <Switch>
  57. <PrivateRoute path={PAGE.WORKSPACE.DASHBOARD(':idws')} component={Dashboard} />
  58. <PrivateRoute path={PAGE.WORKSPACE.CALENDAR(':idws')} component={() => <div><br /><br /><br /><br />NYI</div>} />
  59. <PrivateRoute path={PAGE.WORKSPACE.CONTENT(':idws', ':type?', ':idcts?')} component={WorkspaceContent} />
  60. </Switch>
  61. <PrivateRoute path={PAGE.ACCOUNT} component={Account} />
  62. <PrivateRoute path={'/wip/:cp'} component={WIPcomponent} /> {/* for testing purpose only */}
  63. </div>
  64. </div>
  65. )
  66. }
  67. }
  68. const mapStateToProps = ({ flashMessage, user }) => ({ flashMessage, user })
  69. export default withRouter(connect(mapStateToProps)(translate()(Tracim)))