UserMenu.jsx 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import React, { Fragment } from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import StatusActivateForm from './StatusActivateForm';
  5. import StatusSuspendedForm from './StatusSuspendedForm';
  6. import RemoveUserButton from './UserRemoveButton';
  7. import RemoveAdminForm from './RemoveAdminForm';
  8. import GiveAdminForm from './GiveAdminForm';
  9. import { createSubscribedElement } from '../../UnstatedUtils';
  10. import AppContainer from '../../../services/AppContainer';
  11. class UserMenu extends React.Component {
  12. constructor(props) {
  13. super(props);
  14. this.state = {
  15. };
  16. this.onPasswordResetClicked = this.onPasswordResetClicked.bind(this);
  17. }
  18. onPasswordResetClicked() {
  19. this.props.onPasswordResetClicked(this.props.user);
  20. }
  21. render() {
  22. const { t, user } = this.props;
  23. return (
  24. <Fragment>
  25. <div className="btn-group admin-user-menu">
  26. <button type="button" className="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown">
  27. <i className="icon-settings"></i> <span className="caret"></span>
  28. </button>
  29. <ul className="dropdown-menu" role="menu">
  30. <li className="dropdown-header">{ t('user_management.edit_menu') }</li>
  31. <li onClick={this.onPasswordResetClicked}>
  32. <a>
  33. <i className="icon-fw icon-key"></i>{ t('user_management.reset_password') }
  34. </a>
  35. </li>
  36. <li className="divider"></li>
  37. <li className="dropdown-header">{ t('status') }</li>
  38. <li>
  39. {(user.status === 1 || user.status === 3) && <StatusActivateForm user={user} />}
  40. {user.status === 2 && <StatusSuspendedForm user={user} />}
  41. {(user.status === 1 || user.status === 3 || user.status === 5) && <RemoveUserButton user={user} removeUser={this.props.removeUser} />}
  42. </li>
  43. <li className="divider pl-0"></li>
  44. <li className="dropdown-header">{ t('user_management.administrator_menu') }</li>
  45. <li>
  46. {user.status === 2 && user.admin === true && <RemoveAdminForm user={user} />}
  47. {user.status === 2 && user.admin === false && <GiveAdminForm user={user} />}
  48. </li>
  49. </ul>
  50. </div>
  51. </Fragment>
  52. );
  53. }
  54. }
  55. const UserMenuWrapper = (props) => {
  56. return createSubscribedElement(UserMenu, props, [AppContainer]);
  57. };
  58. UserMenu.propTypes = {
  59. t: PropTypes.func.isRequired, // i18next
  60. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  61. user: PropTypes.object.isRequired,
  62. removeUser: PropTypes.func.isRequired,
  63. onPasswordResetClicked: PropTypes.func.isRequired,
  64. };
  65. export default withTranslation()(UserMenuWrapper);