Tracim.jsx 2.8KB

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