PersonalContainer.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. import { Container } from 'unstated';
  2. import loggerFactory from '~/utils/logger';
  3. import { apiPost } from '../util/apiv1-client';
  4. import { apiv3Get, apiv3Put } from '../util/apiv3-client';
  5. // eslint-disable-next-line no-unused-vars
  6. const logger = loggerFactory('growi:services:PersonalContainer');
  7. /**
  8. * Service container for personal settings page (PersonalSettings.jsx)
  9. * @extends {Container} unstated Container
  10. */
  11. export default class PersonalContainer extends Container {
  12. constructor(appContainer) {
  13. super();
  14. this.appContainer = appContainer;
  15. this.state = {
  16. retrieveError: null,
  17. name: '',
  18. email: '',
  19. registrationWhiteList: this.appContainer.getConfig().registrationWhiteList,
  20. isEmailPublished: false,
  21. lang: 'en_US',
  22. isGravatarEnabled: false,
  23. externalAccounts: [],
  24. apiToken: '',
  25. slackMemberId: '',
  26. };
  27. }
  28. /**
  29. * Workaround for the mangling in production build to break constructor.name
  30. */
  31. static getClassName() {
  32. return 'PersonalContainer';
  33. }
  34. /**
  35. * retrieve personal data
  36. */
  37. async retrievePersonalData() {
  38. try {
  39. const response = await apiv3Get('/personal-setting/');
  40. const { currentUser } = response.data;
  41. this.setState({
  42. name: currentUser.name,
  43. email: currentUser.email,
  44. isEmailPublished: currentUser.isEmailPublished,
  45. lang: currentUser.lang,
  46. isGravatarEnabled: currentUser.isGravatarEnabled,
  47. apiToken: currentUser.apiToken,
  48. slackMemberId: currentUser.slackMemberId,
  49. });
  50. }
  51. catch (err) {
  52. this.setState({ retrieveError: err });
  53. logger.error(err);
  54. throw new Error('Failed to fetch personal data');
  55. }
  56. }
  57. /**
  58. * retrieve external accounts that linked me
  59. */
  60. async retrieveExternalAccounts() {
  61. try {
  62. const response = await apiv3Get('/personal-setting/external-accounts');
  63. const { externalAccounts } = response.data;
  64. this.setState({ externalAccounts });
  65. }
  66. catch (err) {
  67. this.setState({ retrieveError: err });
  68. logger.error(err);
  69. throw new Error('Failed to fetch external accounts');
  70. }
  71. }
  72. /**
  73. * Change name
  74. */
  75. changeName(inputValue) {
  76. this.setState({ name: inputValue });
  77. }
  78. /**
  79. * Change email
  80. */
  81. changeEmail(inputValue) {
  82. this.setState({ email: inputValue });
  83. }
  84. /**
  85. * Change Slack Member ID
  86. */
  87. changeSlackMemberId(inputValue) {
  88. this.setState({ slackMemberId: inputValue });
  89. }
  90. /**
  91. * Change isEmailPublished
  92. */
  93. changeIsEmailPublished(boolean) {
  94. this.setState({ isEmailPublished: boolean });
  95. }
  96. /**
  97. * Change lang
  98. */
  99. changeLang(lang) {
  100. this.setState({ lang });
  101. }
  102. /**
  103. * Change isGravatarEnabled
  104. */
  105. changeIsGravatarEnabled(boolean) {
  106. this.setState({ isGravatarEnabled: boolean });
  107. }
  108. /**
  109. * Update basic info
  110. * @memberOf PersonalContainer
  111. * @return {Array} basic info
  112. */
  113. async updateBasicInfo() {
  114. try {
  115. const response = await apiv3Put('/personal-setting/', {
  116. name: this.state.name,
  117. email: this.state.email,
  118. isEmailPublished: this.state.isEmailPublished,
  119. lang: this.state.lang,
  120. slackMemberId: this.state.slackMemberId,
  121. });
  122. const { updatedUser } = response.data;
  123. this.setState({
  124. name: updatedUser.name,
  125. email: updatedUser.email,
  126. isEmailPublished: updatedUser.isEmailPublished,
  127. lang: updatedUser.lang,
  128. slackMemberId: updatedUser.slackMemberId,
  129. });
  130. }
  131. catch (err) {
  132. this.setState({ retrieveError: err });
  133. logger.error(err);
  134. throw new Error('Failed to update personal data');
  135. }
  136. }
  137. /**
  138. * Associate LDAP account
  139. */
  140. async associateLdapAccount(account) {
  141. try {
  142. await apiv3Put('/personal-setting/associate-ldap', account);
  143. }
  144. catch (err) {
  145. this.setState({ retrieveError: err });
  146. logger.error(err);
  147. throw new Error('Failed to associate ldap account');
  148. }
  149. }
  150. /**
  151. * Disassociate LDAP account
  152. */
  153. async disassociateLdapAccount(account) {
  154. try {
  155. await apiv3Put('/personal-setting/disassociate-ldap', account);
  156. }
  157. catch (err) {
  158. this.setState({ retrieveError: err });
  159. logger.error(err);
  160. throw new Error('Failed to disassociate ldap account');
  161. }
  162. }
  163. }