MemberList.jsx 5.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. import React from 'react'
  2. import PropTypes from 'prop-types'
  3. import { Checkbox } from 'tracim_frontend_lib'
  4. require('./MemberList.styl')
  5. export class MemberList extends React.Component {
  6. constructor (props) {
  7. super(props)
  8. this.state = {
  9. displayNewMemberList: true,
  10. createAccountCheckbox: false
  11. }
  12. }
  13. handleClickAddMemberBtn = () => this.setState({displayNewMemberList: false})
  14. handleClickCloseAddMemberBtn = () => this.setState({displayNewMemberList: true})
  15. handleClickCheckboxCreateAccount = e => {
  16. e.preventDefault()
  17. e.stopPropagation()
  18. this.setState(prev => ({createAccountCheckbox: !prev.createAccountCheckbox}))
  19. }
  20. render () {
  21. const { props, state } = this
  22. return (
  23. <div className='memberlist'>
  24. <div className='memberlist__title subTitle'>
  25. {props.t('Member List')}
  26. </div>
  27. <div className='memberlist__wrapper'>
  28. {state.displayNewMemberList
  29. ? (
  30. <div>
  31. <ul className='memberlist__list'>
  32. {props.memberList.map(m =>
  33. <li className='memberlist__list__item primaryColorBgLightenHover' key={m.id}>
  34. <div className='memberlist__list__item__avatar'>
  35. {m.avatarUrl ? <img src={m.avatarUrl} /> : <img src='NYI' />}
  36. </div>
  37. <div className='memberlist__list__item__info mr-auto'>
  38. <div className='memberlist__list__item__info__name'>
  39. {m.publicName}
  40. </div>
  41. <div className='memberlist__list__item__info__role'>
  42. {props.roleList.find(r => r.slug === m.role).label}
  43. </div>
  44. </div>
  45. <div className='memberlist__list__item__delete'>
  46. <i className='fa fa-trash-o' />
  47. </div>
  48. </li>
  49. )}
  50. </ul>
  51. <div className='memberlist__btnadd' onClick={this.handleClickAddMemberBtn}>
  52. <div className='memberlist__btnadd__button'>
  53. <div className='memberlist__btnadd__button__avatar'>
  54. <div className='memberlist__btnadd__button__avatar__icon'>
  55. <i className='fa fa-plus' />
  56. </div>
  57. </div>
  58. <div className='memberlist__btnadd__button__text'>
  59. {props.t('Add a member')}
  60. </div>
  61. </div>
  62. </div>
  63. </div>
  64. )
  65. : (
  66. <form className='memberlist__form'>
  67. <div className='memberlist__form__close d-flex justify-content-end'>
  68. <i className='fa fa-times' onClick={this.handleClickCloseAddMemberBtn} />
  69. </div>
  70. <div className='memberlist__form__member'>
  71. <div className='memberlist__form__member__name'>
  72. <label className='name__label' htmlFor='addmember'>
  73. {props.t('Enter the name or email of the member')}
  74. </label>
  75. <input
  76. type='text'
  77. className='name__input form-control'
  78. id='addmember'
  79. placeholder='Nom ou Email'
  80. onChange={props.onChangeName}
  81. />
  82. </div>
  83. <div className='memberlist__form__member__create'>
  84. <div className='memberlist__form__member__create__checkbox mr-3'>
  85. <Checkbox
  86. name='createAccountCheckbox'
  87. onClickCheckbox={e => this.handleClickCheckboxCreateAccount(e)}
  88. checked={state.createAccountCheckbox}
  89. />
  90. </div>
  91. <div className='create__text'>
  92. {props.t('Create an account')}
  93. </div>
  94. </div>
  95. </div>
  96. <div className='memberlist__form__role'>
  97. <div className='memberlist__form__role__text'>
  98. {props.t('Choose the role of the member')}
  99. </div>
  100. <ul className='memberlist__form__role__list'>
  101. {props.roleList.map(r =>
  102. <li className='memberlist__form__role__list__item' key={r.slug}>
  103. <div className='item__radiobtn mr-3'>
  104. <input type='radio' name='role' value={r.slug} />
  105. </div>
  106. <div className='item__text'>
  107. <div className='item_text_icon mr-2' style={{color: r.hexcolor}}>
  108. <i className={`fa fa-${r.faIcon}`} />
  109. </div>
  110. <div className='item__text__name'>
  111. {r.label}
  112. </div>
  113. </div>
  114. </li>
  115. )}
  116. </ul>
  117. </div>
  118. <div className='memberlist__form__submitbtn'>
  119. <button className='btn btn-outline-primary'>
  120. {props.t('Validate')}
  121. </button>
  122. </div>
  123. </form>
  124. )
  125. }
  126. </div>
  127. </div>
  128. )
  129. }
  130. }
  131. export default MemberList
  132. MemberList.propTypes = {
  133. memberList: PropTypes.array.isRequired,
  134. onChangeName: PropTypes.func
  135. }