UserManagement.jsx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import React, { Fragment } from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import PaginationWrapper from '../PaginationWrapper';
  5. import { createSubscribedElement } from '../UnstatedUtils';
  6. import { toastError } from '../../util/apiNotification';
  7. import AppContainer from '../../services/AppContainer';
  8. import AdminUsersContainer from '../../services/AdminUsersContainer';
  9. import PasswordResetModal from './Users/PasswordResetModal';
  10. import InviteUserControl from './Users/InviteUserControl';
  11. import UserTable from './Users/UserTable';
  12. class UserManagement extends React.Component {
  13. constructor(props) {
  14. super();
  15. this.handlePage = this.handlePage.bind(this);
  16. }
  17. componentWillMount() {
  18. this.handlePage(1);
  19. }
  20. async handlePage(selectedPage) {
  21. try {
  22. await this.props.adminUsersContainer.retrieveUsersByPagingNum(selectedPage);
  23. }
  24. catch (err) {
  25. toastError(err);
  26. }
  27. }
  28. render() {
  29. const { t, adminUsersContainer } = this.props;
  30. const pager = (
  31. <div className="pull-right">
  32. <PaginationWrapper
  33. activePage={adminUsersContainer.state.activePage}
  34. changePage={this.handlePage}
  35. totalItemsCount={adminUsersContainer.state.totalUsers}
  36. pagingLimit={adminUsersContainer.state.pagingLimit}
  37. />
  38. </div>
  39. );
  40. return (
  41. <Fragment>
  42. {adminUsersContainer.state.userForPasswordResetModal && <PasswordResetModal />}
  43. <p>
  44. <InviteUserControl />
  45. <a className="btn btn-default btn-outline ml-2" href="/admin/users/external-accounts">
  46. <i className="icon-user-follow" aria-hidden="true"></i>
  47. {t('admin:user_management.external_account')}
  48. </a>
  49. </p>
  50. <h2>{t('User_Management')}</h2>
  51. {pager}
  52. <UserTable />
  53. {pager}
  54. </Fragment>
  55. );
  56. }
  57. }
  58. UserManagement.propTypes = {
  59. t: PropTypes.func.isRequired, // i18next
  60. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  61. adminUsersContainer: PropTypes.instanceOf(AdminUsersContainer).isRequired,
  62. };
  63. const UserManagementWrapper = (props) => {
  64. return createSubscribedElement(UserManagement, props, [AppContainer, AdminUsersContainer]);
  65. };
  66. export default withTranslation()(UserManagementWrapper);