Account.jsx 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import React from 'react'
  2. import { connect } from 'react-redux'
  3. import Sidebar from './Sidebar.jsx'
  4. import PageWrapper from '../component/common/layout/PageWrapper.jsx'
  5. import PageTitle from '../component/common/layout/PageTitle.jsx'
  6. import PageContent from '../component/common/layout/PageContent.jsx'
  7. import UserInfo from '../component/Account/UserInfo.jsx'
  8. import MenuSubComponent from '../component/Account/MenuSubComponent.jsx'
  9. import PersonalData from '../component/Account/PersonalData.jsx'
  10. // import Calendar from '../component/Account/Calendar.jsx'
  11. import Notification from '../component/Account/Notification.jsx'
  12. import Password from '../component/Account/Password.jsx'
  13. import Timezone from '../component/Account/Timezone.jsx'
  14. import { Delimiter } from 'tracim_frontend_lib'
  15. import { updateUserWorkspaceSubscriptionNotif } from '../action-creator.sync.js'
  16. import {
  17. getTimezone,
  18. getUserRole
  19. } from '../action-creator.async.js'
  20. class Account extends React.Component {
  21. constructor (props) {
  22. super(props)
  23. this.state = {
  24. subComponentMenu: [{
  25. name: 'personalData',
  26. menuLabel: 'Mon profil',
  27. active: true
  28. },
  29. {
  30. name: 'notification',
  31. menuLabel: 'Espace de travail & Notifications',
  32. active: false
  33. },
  34. {
  35. name: 'password',
  36. menuLabel: 'Mot de passe',
  37. active: false
  38. },
  39. {
  40. name: 'timezone',
  41. menuLabel: 'Fuseau Horaire',
  42. active: false
  43. }]
  44. // {
  45. // name: 'calendar',
  46. // menuLabel: 'Calendrier personnel',
  47. // active: false
  48. // }]
  49. }
  50. }
  51. componentDidMount () {
  52. const { user, workspaceList, timezone, dispatch } = this.props
  53. if (user.id !== -1 && workspaceList.length > 0) dispatch(getUserRole(user))
  54. if (timezone.length === 0) dispatch(getTimezone())
  55. }
  56. componentDidUpdate () {
  57. const { user, workspaceList, dispatch } = this.props
  58. if (user.id !== -1 && workspaceList.length > 0 && workspaceList.some(ws => ws.role === undefined)) dispatch(getUserRole(user))
  59. }
  60. handleClickSubComponentMenuItem = subMenuItemName => this.setState(prev => ({
  61. subComponentMenu: prev.subComponentMenu.map(m => ({...m, active: m.name === subMenuItemName}))
  62. }))
  63. handleChangeSubscriptionNotif = (workspaceId, subscriptionNotif) =>
  64. this.props.dispatch(updateUserWorkspaceSubscriptionNotif(workspaceId, subscriptionNotif))
  65. handleChangeTimezone = newTimezone => console.log('(NYI) new timezone : ', newTimezone)
  66. render () {
  67. const subComponent = (() => {
  68. switch (this.state.subComponentMenu.find(({active}) => active).name) {
  69. case 'personalData':
  70. return <PersonalData />
  71. // case 'calendar':
  72. // return <Calendar user={this.props.user} />
  73. case 'notification':
  74. return <Notification
  75. workspaceList={this.props.workspaceList}
  76. onChangeSubscriptionNotif={this.handleChangeSubscriptionNotif}
  77. />
  78. case 'timezone':
  79. return <Timezone timezone={this.props.timezone} onChangeTimezone={this.handleChangeTimezone} />
  80. case 'password':
  81. return <Password />
  82. }
  83. })()
  84. return (
  85. <div className='sidebarpagecontainer'>
  86. <Sidebar />
  87. <PageWrapper customClass='account'>
  88. <PageTitle
  89. parentClass={'account'}
  90. title={'Mon Compte'}
  91. />
  92. <PageContent parentClass='account'>
  93. <UserInfo user={this.props.user} />
  94. <Delimiter customClass={'account__delimiter'} />
  95. <div className='account__userpreference'>
  96. <MenuSubComponent subMenuList={this.state.subComponentMenu} onClickMenuItem={this.handleClickSubComponentMenuItem} />
  97. <div className='account__userpreference__setting'>
  98. { subComponent }
  99. </div>
  100. </div>
  101. </PageContent>
  102. </PageWrapper>
  103. </div>
  104. )
  105. }
  106. }
  107. const mapStateToProps = ({ user, workspaceList, timezone }) => ({ user, workspaceList, timezone })
  108. export default connect(mapStateToProps)(Account)