UserMenu.jsx 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import React, { Fragment } from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import StatusActivateButton from './StatusActivateButton';
  5. import StatusSuspendedButton from './StatusSuspendedButton';
  6. import RemoveUserButton from './UserRemoveButton';
  7. import RemoveAdminButton from './RemoveAdminButton';
  8. import GiveAdminButton from './GiveAdminButton';
  9. import { createSubscribedElement } from '../../UnstatedUtils';
  10. import AppContainer from '../../../services/AppContainer';
  11. import AdminUsersContainer from '../../../services/AdminUsersContainer';
  12. class UserMenu extends React.Component {
  13. constructor(props) {
  14. super(props);
  15. this.state = {
  16. };
  17. this.onPasswordResetClicked = this.onPasswordResetClicked.bind(this);
  18. }
  19. onPasswordResetClicked() {
  20. this.props.adminUsersContainer.showPasswordResetModal(this.props.user);
  21. }
  22. renderEditMenu() {
  23. const { t } = this.props;
  24. return (
  25. <Fragment>
  26. <li className="dropdown-header">{t('admin:user_management.user_table.edit_menu')}</li>
  27. <li onClick={this.onPasswordResetClicked}>
  28. <a>
  29. <i className="icon-fw icon-key"></i>{t('admin:user_management.user_table.reset_password')}
  30. </a>
  31. </li>
  32. </Fragment>
  33. );
  34. }
  35. renderStatusMenu() {
  36. const { t, user } = this.props;
  37. return (
  38. <Fragment>
  39. <li className="divider"></li>
  40. <li className="dropdown-header">{t('status')}</li>
  41. <li>
  42. {(user.status === 1 || user.status === 3) && <StatusActivateButton user={user} />}
  43. {user.status === 2 && <StatusSuspendedButton user={user} />}
  44. {(user.status === 1 || user.status === 3 || user.status === 5) && <RemoveUserButton user={user} />}
  45. </li>
  46. </Fragment>
  47. );
  48. }
  49. renderAdminMenu() {
  50. const { t, user } = this.props;
  51. return (
  52. <Fragment>
  53. <li className="divider pl-0"></li>
  54. <li className="dropdown-header">{t('admin:user_management.user_table.administrator_menu')}</li>
  55. <li>
  56. {user.admin === true && <RemoveAdminButton user={user} />}
  57. {user.admin === false && <GiveAdminButton user={user} />}
  58. </li>
  59. </Fragment>
  60. );
  61. }
  62. render() {
  63. const { user } = this.props;
  64. return (
  65. <Fragment>
  66. <div className="btn-group admin-user-menu">
  67. <button type="button" className="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown">
  68. <i className="icon-settings"></i> <span className="caret"></span>
  69. </button>
  70. <ul className="dropdown-menu" role="menu">
  71. {this.renderEditMenu()}
  72. {user.status !== 4 && this.renderStatusMenu()}
  73. {user.status === 2 && this.renderAdminMenu()}
  74. </ul>
  75. </div>
  76. </Fragment>
  77. );
  78. }
  79. }
  80. const UserMenuWrapper = (props) => {
  81. return createSubscribedElement(UserMenu, props, [AppContainer, AdminUsersContainer]);
  82. };
  83. UserMenu.propTypes = {
  84. t: PropTypes.func.isRequired, // i18next
  85. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  86. adminUsersContainer: PropTypes.instanceOf(AdminUsersContainer).isRequired,
  87. user: PropTypes.object.isRequired,
  88. };
  89. export default withTranslation()(UserMenuWrapper);