AdminUsersContainer.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  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:AdminUserGroupDetailContainer');
  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. selectedStatusList: new Set(['All']),
  22. searchText: '',
  23. notifyComment: '',
  24. };
  25. this.showPasswordResetModal = this.showPasswordResetModal.bind(this);
  26. this.hidePasswordResetModal = this.hidePasswordResetModal.bind(this);
  27. this.toggleUserInviteModal = this.toggleUserInviteModal.bind(this);
  28. }
  29. /**
  30. * Workaround for the mangling in production build to break constructor.name
  31. */
  32. static getClassName() {
  33. return 'AdminUsersContainer';
  34. }
  35. setNotifyComment(notifyComment) {
  36. this.setState({ notifyComment });
  37. }
  38. isSelected(statusType) {
  39. return this.state.selectedStatusList.has(statusType);
  40. }
  41. handleClick(statusType) {
  42. const all = 'All';
  43. if (this.isSelected(statusType)) {
  44. this.deleteStatusFromList(statusType);
  45. }
  46. else {
  47. if (statusType === all) {
  48. this.clearStatusList();
  49. }
  50. else {
  51. this.deleteStatusFromList(all);
  52. }
  53. this.addStatusToList(statusType);
  54. }
  55. }
  56. clearStatusList() {
  57. const { selectedStatusList } = this.state;
  58. selectedStatusList.clear();
  59. this.setState({ selectedStatusList });
  60. }
  61. addStatusToList(statusType) {
  62. const { selectedStatusList } = this.state;
  63. selectedStatusList.add(statusType);
  64. this.setState({ selectedStatusList });
  65. }
  66. deleteStatusFromList(statusType) {
  67. const { selectedStatusList } = this.state;
  68. selectedStatusList.delete(statusType);
  69. this.setState({ selectedStatusList });
  70. }
  71. handleChangeSearchText(searchText) {
  72. this.setState({ searchText });
  73. }
  74. /**
  75. * syncUsers of selectedPage
  76. * @memberOf AdminUsersContainer
  77. * @param {number} selectedPage
  78. */
  79. async retrieveUsersByPagingNum(selectedPage) {
  80. const params = { page: selectedPage };
  81. const { data } = await this.appContainer.apiv3.get('/users', params);
  82. if (data.paginateResult == null) {
  83. throw new Error('data must conclude \'paginateResult\' property.');
  84. }
  85. const { docs: users, totalDocs: totalUsers, limit: pagingLimit } = data.paginateResult;
  86. this.setState({
  87. users,
  88. totalUsers,
  89. pagingLimit,
  90. activePage: selectedPage,
  91. });
  92. }
  93. /**
  94. * create user invited
  95. * @memberOf AdminUsersContainer
  96. * @param {object} shapedEmailList
  97. * @param {bool} sendEmail
  98. */
  99. async createUserInvited(shapedEmailList, sendEmail) {
  100. const response = await this.appContainer.apiv3.post('/users/invite', {
  101. shapedEmailList,
  102. sendEmail,
  103. });
  104. await this.retrieveUsersByPagingNum(this.state.activePage);
  105. const { invitedUserList } = response.data;
  106. return invitedUserList;
  107. }
  108. /**
  109. * open reset password modal, and props user
  110. * @memberOf AdminUsersContainer
  111. * @param {object} user
  112. */
  113. async showPasswordResetModal(user) {
  114. await this.setState({
  115. isPasswordResetModalShown: true,
  116. userForPasswordResetModal: user,
  117. });
  118. }
  119. /**
  120. * close reset password modal
  121. * @memberOf AdminUsersContainer
  122. */
  123. async hidePasswordResetModal() {
  124. await this.setState({ isPasswordResetModalShown: false });
  125. }
  126. /**
  127. * toggle user invite modal
  128. * @memberOf AdminUsersContainer
  129. */
  130. async toggleUserInviteModal() {
  131. await this.setState({ isUserInviteModalShown: !this.state.isUserInviteModalShown });
  132. }
  133. /**
  134. * Give user admin
  135. * @memberOf AdminUsersContainer
  136. * @param {string} userId
  137. * @return {string} username
  138. */
  139. async giveUserAdmin(userId) {
  140. const response = await this.appContainer.apiv3.put(`/users/${userId}/giveAdmin`);
  141. const { username } = response.data.userData;
  142. await this.retrieveUsersByPagingNum(this.state.activePage);
  143. return username;
  144. }
  145. /**
  146. * Remove user admin
  147. * @memberOf AdminUsersContainer
  148. * @param {string} userId
  149. * @return {string} username
  150. */
  151. async removeUserAdmin(userId) {
  152. const response = await this.appContainer.apiv3.put(`/users/${userId}/removeAdmin`);
  153. const { username } = response.data.userData;
  154. await this.retrieveUsersByPagingNum(this.state.activePage);
  155. return username;
  156. }
  157. /**
  158. * Activate user
  159. * @memberOf AdminUsersContainer
  160. * @param {string} userId
  161. * @return {string} username
  162. */
  163. async activateUser(userId) {
  164. const response = await this.appContainer.apiv3.put(`/users/${userId}/activate`);
  165. const { username } = response.data.userData;
  166. await this.retrieveUsersByPagingNum(this.state.activePage);
  167. return username;
  168. }
  169. /**
  170. * Deactivate user
  171. * @memberOf AdminUsersContainer
  172. * @param {string} userId
  173. * @return {string} username
  174. */
  175. async deactivateUser(userId) {
  176. const response = await this.appContainer.apiv3.put(`/users/${userId}/deactivate`);
  177. const { username } = response.data.userData;
  178. await this.retrieveUsersByPagingNum(this.state.activePage);
  179. return username;
  180. }
  181. /**
  182. * remove user
  183. * @memberOf AdminUsersContainer
  184. * @param {string} userId
  185. * @return {object} removedUserData
  186. */
  187. async removeUser(userId) {
  188. const response = await this.appContainer.apiv3.delete(`/users/${userId}/remove`);
  189. const removedUserData = response.data.userData;
  190. await this.retrieveUsersByPagingNum(this.state.activePage);
  191. return removedUserData;
  192. }
  193. }