AdminUsersContainer.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. import { Container } from 'unstated';
  2. import loggerFactory from '@alias/logger';
  3. // eslint-disable-next-line no-unused-vars
  4. const logger = loggerFactory('growi:services:UserGroupDetailContainer');
  5. /**
  6. * Service container for admin users page (Users.jsx)
  7. * @extends {Container} unstated Container
  8. */
  9. export default class AdminUsersContainer extends Container {
  10. constructor(appContainer) {
  11. super();
  12. this.appContainer = appContainer;
  13. this.state = {
  14. users: [],
  15. isPasswordResetModalShown: false,
  16. isUserInviteModalShown: false,
  17. userForPasswordResetModal: null,
  18. totalUsers: 0,
  19. activePage: 1,
  20. pagingLimit: Infinity,
  21. };
  22. this.showPasswordResetModal = this.showPasswordResetModal.bind(this);
  23. this.hidePasswordResetModal = this.hidePasswordResetModal.bind(this);
  24. this.toggleUserInviteModal = this.toggleUserInviteModal.bind(this);
  25. }
  26. /**
  27. * Workaround for the mangling in production build to break constructor.name
  28. */
  29. static getClassName() {
  30. return 'AdminUsersContainer';
  31. }
  32. /**
  33. * syncUsers of selectedPage
  34. * @memberOf AdminUsersContainer
  35. * @param {number} selectedPage
  36. */
  37. async retrieveUsersByPagingNum(selectedPage) {
  38. const params = { page: selectedPage };
  39. const { data } = await this.appContainer.apiv3.get('/users', params);
  40. if (data.paginateResult == null) {
  41. throw new Error('data must conclude \'paginateResult\' property.');
  42. }
  43. const { docs: users, totalDocs: totalUsers, limit: pagingLimit } = data.paginateResult;
  44. this.setState({
  45. users,
  46. totalUsers,
  47. pagingLimit,
  48. activePage: selectedPage,
  49. });
  50. }
  51. /**
  52. * create user invited
  53. * @memberOf AdminUsersContainer
  54. * @param {object} shapedEmailList
  55. * @param {bool} sendEmail
  56. */
  57. async createUserInvited(shapedEmailList, sendEmail) {
  58. const response = await this.appContainer.apiv3.post('/users/invite', {
  59. shapedEmailList,
  60. sendEmail,
  61. });
  62. const { emailList } = response.data;
  63. return emailList;
  64. }
  65. /**
  66. * open reset password modal, and props user
  67. * @memberOf AdminUsersContainer
  68. * @param {object} user
  69. */
  70. async showPasswordResetModal(user) {
  71. await this.setState({
  72. isPasswordResetModalShown: true,
  73. userForPasswordResetModal: user,
  74. });
  75. }
  76. /**
  77. * close reset password modal
  78. * @memberOf AdminUsersContainer
  79. */
  80. async hidePasswordResetModal() {
  81. await this.setState({ isPasswordResetModalShown: false });
  82. }
  83. /**
  84. * toggle user invite modal
  85. * @memberOf AdminUsersContainer
  86. */
  87. async toggleUserInviteModal() {
  88. await this.setState({ isUserInviteModalShown: !this.state.isUserInviteModalShown });
  89. }
  90. /**
  91. * Give user admin
  92. * @memberOf AdminUsersContainer
  93. * @param {string} userId
  94. * @return {string} username
  95. */
  96. async giveUserAdmin(userId) {
  97. const response = await this.appContainer.apiv3.put(`/users/${userId}/giveAdmin`);
  98. const { username } = response.data.userData;
  99. return username;
  100. }
  101. /**
  102. * Remove user admin
  103. * @memberOf AdminUsersContainer
  104. * @param {string} userId
  105. * @return {string} username
  106. */
  107. async removeUserAdmin(userId) {
  108. const response = await this.appContainer.apiv3.put(`/users/${userId}/removeAdmin`);
  109. const { username } = response.data.userData;
  110. return username;
  111. }
  112. /**
  113. * Activate user
  114. * @memberOf AdminUsersContainer
  115. * @param {string} userId
  116. * @return {string} username
  117. */
  118. async activateUser(userId) {
  119. const response = await this.appContainer.apiv3.put(`/users/${userId}/activate`);
  120. const { username } = response.data.userData;
  121. return username;
  122. }
  123. /**
  124. * Deactivate user
  125. * @memberOf AdminUsersContainer
  126. * @param {string} userId
  127. * @return {string} username
  128. */
  129. async deactivateUser(userId) {
  130. const response = await this.appContainer.apiv3.put(`/users/${userId}/deactivate`);
  131. const { username } = response.data.userData;
  132. return username;
  133. }
  134. /**
  135. * remove user
  136. * @memberOf AdminUsersContainer
  137. * @param {string} userId
  138. * @return {string} username
  139. */
  140. async removeUser(userId) {
  141. const response = await this.appContainer.apiv3.delete(`/users/${userId}/remove`);
  142. const { username } = response.data.userData;
  143. return username;
  144. }
  145. }