Tracim.jsx 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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. getContentTypeList
  21. } from '../action-creator.async.js'
  22. import {
  23. removeFlashMessage,
  24. setAppList,
  25. setUserConnected,
  26. setContentTypeList
  27. } from '../action-creator.sync.js'
  28. import Cookies from 'js-cookie'
  29. class Tracim extends React.Component {
  30. constructor (props) {
  31. super(props)
  32. document.addEventListener('appCustomEvent', this.customEventReducer)
  33. }
  34. customEventReducer = async ({ detail: { type, data } }) => {
  35. switch (type) {
  36. case 'redirect':
  37. console.log('%c<Tracim> Custom event', 'color: #28a745', type, data)
  38. this.props.history.push(data.url)
  39. break
  40. }
  41. }
  42. async componentDidMount () {
  43. const { dispatch } = this.props
  44. const userFromCookies = {
  45. email: Cookies.get(COOKIE.USER_LOGIN),
  46. auth: Cookies.get(COOKIE.USER_AUTH)
  47. }
  48. const fetchGetUserIsConnected = await dispatch(getUserIsConnected(userFromCookies))
  49. switch (fetchGetUserIsConnected.status) {
  50. case 200:
  51. const userLogged = {
  52. ...fetchGetUserIsConnected.json,
  53. auth: userFromCookies.auth,
  54. logged: true
  55. }
  56. dispatch(setUserConnected(userLogged))
  57. const fetchGetAppList = await dispatch(getAppList(userLogged))
  58. if (fetchGetAppList.status === 200) dispatch(setAppList(fetchGetAppList.json))
  59. const fetchGetContentTypeList = await dispatch(getContentTypeList(userLogged))
  60. if (fetchGetContentTypeList.status === 200) dispatch(setContentTypeList(fetchGetContentTypeList.json))
  61. break
  62. case 401:
  63. dispatch(setUserConnected({logged: false})); break
  64. default:
  65. dispatch(setUserConnected({logged: null})); break
  66. }
  67. }
  68. handleRemoveFlashMessage = msg => this.props.dispatch(removeFlashMessage(msg))
  69. render () {
  70. const { flashMessage, t } = this.props
  71. return (
  72. <div className='tracim'>
  73. <Header />
  74. <FlashMessage flashMessage={flashMessage} removeFlashMessage={this.handleRemoveFlashMessage} t={t} />
  75. <div className='tracim__content'>
  76. <Route path={PAGE.LOGIN} component={Login} />
  77. <PrivateRoute exact path='/' component={WorkspaceContent} />
  78. <Switch>
  79. <PrivateRoute path={PAGE.WORKSPACE.DASHBOARD(':idws')} component={Dashboard} />
  80. <PrivateRoute path={PAGE.WORKSPACE.CALENDAR(':idws')} component={() => <div><br /><br /><br /><br />NYI</div>} />
  81. <PrivateRoute path={PAGE.WORKSPACE.CONTENT(':idws', ':type?', ':idcts?')} component={WorkspaceContent} />
  82. </Switch>
  83. <PrivateRoute path={PAGE.ACCOUNT} component={Account} />
  84. <PrivateRoute path={PAGE.ADMIN.ROOT} component={AppFullscreenManager} />
  85. <PrivateRoute path={'/wip/:cp'} component={WIPcomponent} /> {/* for testing purpose only */}
  86. <div id='appFeatureContainer' />
  87. </div>
  88. </div>
  89. )
  90. }
  91. }
  92. const mapStateToProps = ({ flashMessage }) => ({ flashMessage })
  93. export default withRouter(connect(mapStateToProps)(translate()(Tracim)))