Tracim.jsx 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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,
  14. withRouter
  15. } from 'react-router-dom'
  16. import PrivateRoute from './PrivateRoute.jsx'
  17. import { PAGE } from '../helper.js'
  18. import {
  19. getUserIsConnected
  20. } from '../action-creator.async.js'
  21. import {
  22. removeFlashMessage,
  23. setUserConnected
  24. } from '../action-creator.sync.js'
  25. class Tracim extends React.Component {
  26. async componentDidMount () {
  27. const { dispatch } = this.props
  28. const fetchGetUserIsConnected = await dispatch(getUserIsConnected())
  29. switch (fetchGetUserIsConnected.status) {
  30. case 200:
  31. dispatch(setUserConnected({...fetchGetUserIsConnected.json, logged: true})); break
  32. case 401:
  33. dispatch(setUserConnected({logged: false})); break
  34. default:
  35. dispatch(setUserConnected({logged: undefined})); break
  36. }
  37. }
  38. handleRemoveFlashMessage = msg => this.props.dispatch(removeFlashMessage(msg))
  39. render () {
  40. const { flashMessage, user, t } = this.props
  41. return (
  42. <div className='tracim'>
  43. <Header />
  44. <FlashMessage flashMessage={flashMessage} removeFlashMessage={this.handleRemoveFlashMessage} t={t} />
  45. { user.logged === undefined
  46. ? (<div />) // while we dont know if user is connected, display nothing but the header @TODO show loader
  47. : (
  48. <div className='tracim__content'> {/* uses of <Switch> component in react router ? */}
  49. <Route path={PAGE.LOGIN} component={Login} />
  50. <PrivateRoute exact path={PAGE.HOME} component={WorkspaceContent} />
  51. <PrivateRoute path={PAGE.ACCOUNT} component={Account} />
  52. {/* bellow, the '?' is important, it avoid to have to declare another route for CONTENT_LIST which could double match */}
  53. {/* <PrivateRoute path={PAGE.WORKSPACE.CONTENT(':idws', ':type?', ':idcts?')} component={WorkspaceContent} /> */}
  54. <Route path='/workspaces/:idws/' component={WorkspaceContent} />
  55. <PrivateRoute exact path={PAGE.WORKSPACE.DASHBOARD(':idws')} component={Dashboard} />
  56. <PrivateRoute path={'/wip/:cp'} component={WIPcomponent} /> {/* for testing purpose only */}
  57. <Footer />
  58. </div>
  59. )
  60. }
  61. </div>
  62. )
  63. }
  64. }
  65. const mapStateToProps = ({ flashMessage, user }) => ({ flashMessage, user })
  66. export default withRouter(connect(mapStateToProps)(translate()(Tracim)))