UserMenu.jsx 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. import React, { Fragment } from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import { createSubscribedElement } from '../../UnstatedUtils';
  5. import AppContainer from '../../../services/AppContainer';
  6. class UserMenu extends React.Component {
  7. activateUser() {}
  8. susupendUser() {}
  9. removeUser() {}
  10. removeFromAdmin() {}
  11. giveAdminAccess() {}
  12. render() {
  13. const { t } = this.props;
  14. // const users = this.props.users;
  15. let contentOfStatus;
  16. // let adminMenu;
  17. // {this.props.users.forEach((user) => {
  18. // if (user.status === 1) {
  19. // contentOfStatus = (
  20. // <a onClick={this.activateUser}>
  21. // <i className="icon-fw icon-user-following"></i> { t('user_management.accept') }
  22. // </a>
  23. // );
  24. // if (user.status === 2) {
  25. // contentOfStatus = (
  26. // <li>
  27. // { username !== user.username
  28. // ? (
  29. // <li>
  30. // <a onClick={this.susupendUser}>
  31. // <i className="icon-fw icon-user-unfollow"></i> { t('user_management.deactivate_account') }
  32. // </a>
  33. // </li>
  34. // )
  35. // : (
  36. // <li>
  37. // <a disabled>
  38. // <i className="icon-fw icon-ban"></i> { t('user_management.deactivate_account') }
  39. // </a>
  40. // <p className="alert alert-danger m-l-10 m-r-10 p-10">{ t('user_management.your_own') }</p>
  41. // </li>
  42. // )
  43. // }
  44. // </li>
  45. // );
  46. // if (user.status === 3) {
  47. // contentOfStatus = (
  48. // <a onClick={this.activateUser}>
  49. // <i className="icon-fw icon-action-redo"></i> { t('Undo') }
  50. // </a>
  51. // );
  52. // if (user.status === 1 || user.status === 5) {
  53. // contentOfStatus = (
  54. // <li className="dropdown-button">
  55. // <a onClick={this.removeUser}>
  56. // <i className="icon-fw icon-fire text-danger"></i> { t('Delete') }
  57. // </a>
  58. // </li>
  59. // );
  60. // }
  61. // if (user.admin === true) {
  62. // adminMenu = (
  63. // <li>
  64. // { username !== user.username
  65. // ? (
  66. // <li>
  67. // <a onClick={this.removeFromAdmin}>
  68. // <i className="icon-fw icon-user-unfollow"></i> { t('user_management.remove_admin_access') }
  69. // </a>
  70. // </li>
  71. // )
  72. // : (
  73. // <li>
  74. // <a disabled>
  75. // <i className="icon-fw icon-user-unfollow"></i> { t('user_management.remove_admin_access') }
  76. // </a>
  77. // <p className="alert alert-danger m-l-10 m-r-10 p-10">{ t('user_management.cannot_remove') }</p>
  78. // </li>
  79. // )
  80. // }
  81. // </li>
  82. // );
  83. // }
  84. // else {
  85. // adminMenu = (
  86. // <li>
  87. // <a onClick={this.giveAdminAccess}>
  88. // <i className="icon-fw icon-magic-wand"></i> { t('user_management.give_admin_access') }
  89. // </a>
  90. // </li>
  91. // );
  92. // }
  93. // }}
  94. return (
  95. <Fragment>
  96. <div className="btn-group admin-user-menu">
  97. <button type="button" className="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown">
  98. <i className="icon-settings"></i> <span className="caret"></span>
  99. </button>
  100. <ul className="dropdown-menu" role="menu">
  101. <li className="dropdown-header">{ t('user_management.edit_menu') }</li>
  102. <li>
  103. <a
  104. href="#"
  105. data-user-id="{{ userId }}"
  106. data-user-email="{{ user.email }}"
  107. data-target="#admin-password-reset-modal"
  108. data-toggle="modal"
  109. >
  110. <i className="icon-fw icon-key"></i>
  111. { t('user_management.reset_password') }
  112. </a>
  113. </li>
  114. <li className="divider"></li>
  115. <li className="dropdown-header">{ t('status') }</li>
  116. <li>{contentOfStatus}</li>
  117. {/* <li>{user.status === 2 && adminMenu}</li> */}
  118. </ul>
  119. </div>
  120. {/* password reset modal */}
  121. <div className="modal fade" id="admin-password-reset-modal">
  122. <div className="modal-dialog">
  123. <div className="modal-content">
  124. <div className="modal-header">
  125. <button type="button" className="close" data-dismiss="modal" aria-hidden="true">&times;</button>
  126. <div className="modal-title">{ t('user_management.reset_password')}</div>
  127. </div>
  128. <div className="modal-body">
  129. <p>
  130. { t('user_management.password_never_seen') }<br />
  131. <span className="text-danger">{ t('user_management.send_new_password') }</span>
  132. </p>
  133. <p>
  134. { t('user_management.target_user') }: <code id="admin-password-reset-user"></code>
  135. </p>
  136. </div>
  137. </div>
  138. </div>
  139. </div>
  140. <div className="modal fade" id="admin-password-reset-modal-done">
  141. <div className="modal-dialog">
  142. <div className="modal-content">
  143. <div className="modal-header">
  144. <button type="button" className="close" data-dismiss="modal" aria-hidden="true">&times;</button>
  145. <div className="modal-title">{ t('user_management.reset_password') }</div>
  146. </div>
  147. <div className="modal-body">
  148. <p className="alert alert-danger">Let the user know the new password below and strongly recommend to change another one immediately. </p>
  149. <p>
  150. Reset user: <code id="admin-password-reset-done-user"></code>
  151. </p>
  152. <p>
  153. New password: <code id="admin-password-reset-done-password"></code>
  154. </p>
  155. </div>
  156. <div className="modal-footer">
  157. <button type="submit" className="btn btn-primary" data-dismiss="modal">OK</button>
  158. </div>
  159. </div>
  160. </div>
  161. </div>
  162. </Fragment>
  163. );
  164. }
  165. }
  166. const UserMenuWrapper = (props) => {
  167. return createSubscribedElement(UserMenu, props, [AppContainer]);
  168. };
  169. UserMenu.propTypes = {
  170. t: PropTypes.func.isRequired, // i18next
  171. users: PropTypes.array,
  172. };
  173. export default withTranslation()(UserMenuWrapper);