UserMenu.jsx 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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-divider"></li>
  27. <li className="dropdown-header">{t('admin:user_management.user_table.edit_menu')}</li>
  28. <li>
  29. <a className="dropdown-item" href="" onClick={this.onPasswordResetClicked}>
  30. <i className="icon-fw icon-key"></i>{ t('admin:user_management.reset_password') }
  31. </a>
  32. </li>
  33. </Fragment>
  34. );
  35. }
  36. renderStatusMenu() {
  37. const { t, user } = this.props;
  38. return (
  39. <Fragment>
  40. <li className="dropdown-divider"></li>
  41. <li className="dropdown-header">{t('status')}</li>
  42. <li>
  43. {(user.status === 1 || user.status === 3) && <StatusActivateButton user={user} />}
  44. {user.status === 2 && <StatusSuspendedButton user={user} />}
  45. {(user.status === 1 || user.status === 3 || user.status === 5) && <RemoveUserButton user={user} />}
  46. </li>
  47. </Fragment>
  48. );
  49. }
  50. renderAdminMenu() {
  51. const { t, user } = this.props;
  52. return (
  53. <Fragment>
  54. <li className="dropdown-divider pl-0"></li>
  55. <li className="dropdown-header">{t('admin:user_management.user_table.administrator_menu')}</li>
  56. <li>
  57. {user.admin === true && <RemoveAdminButton user={user} />}
  58. {user.admin === false && <GiveAdminButton user={user} />}
  59. </li>
  60. </Fragment>
  61. );
  62. }
  63. render() {
  64. const { user } = this.props;
  65. return (
  66. <Fragment>
  67. <div className="btn-group admin-user-menu" role="group">
  68. <button id="userMenu" type="button" className="btn btn-light btn-sm dropdown-toggle" data-toggle="dropdown">
  69. <i className="icon-settings"></i>
  70. </button>
  71. <div className="dropdown-menu" aria-labelledby="userMenu">
  72. {this.renderEditMenu()}
  73. {user.status !== 4 && this.renderStatusMenu()}
  74. {user.status === 2 && this.renderAdminMenu()}
  75. </div>
  76. </div>
  77. </Fragment>
  78. );
  79. }
  80. }
  81. const UserMenuWrapper = (props) => {
  82. return createSubscribedElement(UserMenu, props, [AppContainer, AdminUsersContainer]);
  83. };
  84. UserMenu.propTypes = {
  85. t: PropTypes.func.isRequired, // i18next
  86. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  87. adminUsersContainer: PropTypes.instanceOf(AdminUsersContainer).isRequired,
  88. user: PropTypes.object.isRequired,
  89. };
  90. export default withTranslation()(UserMenuWrapper);