Tracim.jsx 3.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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 AppFullscreenManager from './AppFullscreenManager.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 { COOKIE, PAGE } from '../helper.js'
  17. import {
  18. getAppList,
  19. getUserIsConnected
  20. } from '../action-creator.async.js'
  21. import {
  22. removeFlashMessage,
  23. setAppList,
  24. setUserConnected
  25. } from '../action-creator.sync.js'
  26. import Cookies from 'js-cookie'
  27. class Tracim extends React.Component {
  28. async componentDidMount () {
  29. const { dispatch } = this.props
  30. const userFromCookies = {
  31. email: Cookies.get(COOKIE.USER_LOGIN),
  32. auth: Cookies.get(COOKIE.USER_AUTH)
  33. }
  34. const fetchGetUserIsConnected = await dispatch(getUserIsConnected(userFromCookies))
  35. switch (fetchGetUserIsConnected.status) {
  36. case 200:
  37. const userLogged = {
  38. ...fetchGetUserIsConnected.json,
  39. auth: userFromCookies.auth,
  40. logged: true
  41. }
  42. dispatch(setUserConnected(userLogged))
  43. const fetchGetAppList = await dispatch(getAppList(userLogged))
  44. if (fetchGetAppList.status === 200) dispatch(setAppList(fetchGetAppList.json))
  45. break
  46. case 401:
  47. dispatch(setUserConnected({logged: false})); break
  48. default:
  49. dispatch(setUserConnected({logged: null})); break
  50. }
  51. }
  52. handleRemoveFlashMessage = msg => this.props.dispatch(removeFlashMessage(msg))
  53. render () {
  54. const { flashMessage, t } = this.props
  55. return (
  56. <div className='tracim'>
  57. <Header />
  58. <FlashMessage flashMessage={flashMessage} removeFlashMessage={this.handleRemoveFlashMessage} t={t} />
  59. <div className='tracim__content'>
  60. <Route path={PAGE.LOGIN} component={Login} />
  61. <PrivateRoute exact path='/' component={WorkspaceContent} />
  62. <Switch>
  63. <PrivateRoute path={PAGE.WORKSPACE.DASHBOARD(':idws')} component={Dashboard} />
  64. <PrivateRoute path={PAGE.WORKSPACE.CALENDAR(':idws')} component={() => <div><br /><br /><br /><br />NYI</div>} />
  65. <PrivateRoute path={PAGE.WORKSPACE.CONTENT(':idws', ':type?', ':idcts?')} component={WorkspaceContent} />
  66. </Switch>
  67. <PrivateRoute path={PAGE.ACCOUNT} component={Account} />
  68. <PrivateRoute path={PAGE.ADMIN.ROOT} component={AppFullscreenManager} />
  69. <PrivateRoute path={'/wip/:cp'} component={WIPcomponent} /> {/* for testing purpose only */}
  70. <div id='appFeatureContainer' />
  71. </div>
  72. </div>
  73. )
  74. }
  75. }
  76. const mapStateToProps = ({ flashMessage }) => ({ flashMessage })
  77. export default withRouter(connect(mapStateToProps)(translate()(Tracim)))