AdminUsersContainer.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  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. await this.retrieveUsersByPagingNum(this.state.activePage);
  63. const { invitedUserList } = response.data;
  64. return invitedUserList;
  65. }
  66. /**
  67. * open reset password modal, and props user
  68. * @memberOf AdminUsersContainer
  69. * @param {object} user
  70. */
  71. async showPasswordResetModal(user) {
  72. await this.setState({
  73. isPasswordResetModalShown: true,
  74. userForPasswordResetModal: user,
  75. });
  76. }
  77. /**
  78. * close reset password modal
  79. * @memberOf AdminUsersContainer
  80. */
  81. async hidePasswordResetModal() {
  82. await this.setState({ isPasswordResetModalShown: false });
  83. }
  84. /**
  85. * toggle user invite modal
  86. * @memberOf AdminUsersContainer
  87. */
  88. async toggleUserInviteModal() {
  89. await this.setState({ isUserInviteModalShown: !this.state.isUserInviteModalShown });
  90. }
  91. /**
  92. * Give user admin
  93. * @memberOf AdminUsersContainer
  94. * @param {string} userId
  95. * @return {string} username
  96. */
  97. async giveUserAdmin(userId) {
  98. const response = await this.appContainer.apiv3.put(`/users/${userId}/giveAdmin`);
  99. const { username } = response.data.userData;
  100. await this.retrieveUsersByPagingNum(this.state.activePage);
  101. return username;
  102. }
  103. /**
  104. * Remove user admin
  105. * @memberOf AdminUsersContainer
  106. * @param {string} userId
  107. * @return {string} username
  108. */
  109. async removeUserAdmin(userId) {
  110. const response = await this.appContainer.apiv3.put(`/users/${userId}/removeAdmin`);
  111. const { username } = response.data.userData;
  112. await this.retrieveUsersByPagingNum(this.state.activePage);
  113. return username;
  114. }
  115. /**
  116. * Activate user
  117. * @memberOf AdminUsersContainer
  118. * @param {string} userId
  119. * @return {string} username
  120. */
  121. async activateUser(userId) {
  122. const response = await this.appContainer.apiv3.put(`/users/${userId}/activate`);
  123. const { username } = response.data.userData;
  124. await this.retrieveUsersByPagingNum(this.state.activePage);
  125. return username;
  126. }
  127. /**
  128. * Deactivate user
  129. * @memberOf AdminUsersContainer
  130. * @param {string} userId
  131. * @return {string} username
  132. */
  133. async deactivateUser(userId) {
  134. const response = await this.appContainer.apiv3.put(`/users/${userId}/deactivate`);
  135. const { username } = response.data.userData;
  136. await this.retrieveUsersByPagingNum(this.state.activePage);
  137. return username;
  138. }
  139. /**
  140. * remove user
  141. * @memberOf AdminUsersContainer
  142. * @param {string} userId
  143. * @return {object} removedUserData
  144. */
  145. async removeUser(userId) {
  146. const response = await this.appContainer.apiv3.delete(`/users/${userId}/remove`);
  147. const removedUserData = response.data.userData;
  148. await this.retrieveUsersByPagingNum(this.state.activePage);
  149. return removedUserData;
  150. }
  151. }