AdminAppContainer.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. import { Container } from 'unstated';
  2. import loggerFactory from '@alias/logger';
  3. import { toastError } from '../util/apiNotification';
  4. const logger = loggerFactory('growi:appSettings');
  5. /**
  6. * Service container for admin app setting page (AppSettings.jsx)
  7. * @extends {Container} unstated Container
  8. */
  9. export default class AdminAppContainer extends Container {
  10. constructor(appContainer) {
  11. super();
  12. this.appContainer = appContainer;
  13. this.state = {
  14. title: '',
  15. confidential: '',
  16. globalLang: '',
  17. fileUpload: '',
  18. siteUrl: '',
  19. envSiteUrl: '',
  20. isSetSiteUrl: true,
  21. fromAddress: '',
  22. smtpHost: '',
  23. smtpPort: '',
  24. smtpUser: '',
  25. smtpPassword: '',
  26. };
  27. this.changeTitle = this.changeTitle.bind(this);
  28. this.changeConfidential = this.changeConfidential.bind(this);
  29. this.changeGlobalLang = this.changeGlobalLang.bind(this);
  30. this.changeFileUpload = this.changeFileUpload.bind(this);
  31. this.changeSiteUrl = this.changeSiteUrl.bind(this);
  32. this.changeFromAddress = this.changeFromAddress.bind(this);
  33. this.changeSmtpHost = this.changeSmtpHost.bind(this);
  34. this.changeSmtpPort = this.changeSmtpPort.bind(this);
  35. this.changeSmtpUser = this.changeSmtpUser.bind(this);
  36. this.changeSmtpPassword = this.changeSmtpPassword.bind(this);
  37. this.updateAppSettingHandler = this.updateAppSettingHandler.bind(this);
  38. this.updateSiteUrlSettingHandler = this.updateSiteUrlSettingHandler.bind(this);
  39. this.updateMailSettingHandler = this.updateMailSettingHandler.bind(this);
  40. }
  41. /**
  42. * Workaround for the mangling in production build to break constructor.name
  43. */
  44. static getClassName() {
  45. return 'AdminAppContainer';
  46. }
  47. /**
  48. * retrieve app sttings data
  49. */
  50. async retrieveAppSettingsData() {
  51. try {
  52. const response = await this.appContainer.apiv3.get('/app-settings/');
  53. const { appSettingsParams } = response.data;
  54. this.setState({
  55. title: appSettingsParams.title,
  56. confidential: appSettingsParams.confidential,
  57. globalLang: appSettingsParams.globalLang,
  58. fileUpload: appSettingsParams.fileUpload,
  59. siteUrl: appSettingsParams.siteUrl,
  60. envSiteUrl: appSettingsParams.envSiteUrl,
  61. isSetSiteUrl: !!appSettingsParams.siteUrl,
  62. fromAddress: appSettingsParams.fromAddress,
  63. smtpHost: appSettingsParams.smtpHost,
  64. smtpPort: appSettingsParams.smtpPort,
  65. smtpUser: appSettingsParams.smtpUser,
  66. smtpPassword: appSettingsParams.smtpPassword,
  67. });
  68. }
  69. catch (err) {
  70. logger.error(err);
  71. toastError(new Error('Failed to fetch data'));
  72. }
  73. }
  74. /**
  75. * Change title
  76. */
  77. changeTitle(title) {
  78. this.setState({ title });
  79. }
  80. /**
  81. * Change confidential
  82. */
  83. changeConfidential(confidential) {
  84. this.setState({ confidential });
  85. }
  86. /**
  87. * Change globalLang
  88. */
  89. changeGlobalLang(globalLang) {
  90. this.setState({ globalLang });
  91. }
  92. /**
  93. * Change fileUpload
  94. */
  95. changeFileUpload(fileUpload) {
  96. this.setState({ fileUpload });
  97. }
  98. /**
  99. * Change site url
  100. */
  101. changeSiteUrl(siteUrl) {
  102. this.setState({ siteUrl });
  103. }
  104. /**
  105. * Change from address
  106. */
  107. changeFromAddress(fromAddress) {
  108. this.setState({ fromAddress });
  109. }
  110. /**
  111. * Change smtp host
  112. */
  113. changeSmtpHost(smtpHost) {
  114. this.setState({ smtpHost });
  115. }
  116. /**
  117. * Change smtp port
  118. */
  119. changeSmtpPort(smtpPort) {
  120. this.setState({ smtpPort });
  121. }
  122. /**
  123. * Change smtp user
  124. */
  125. changeSmtpUser(smtpUser) {
  126. this.setState({ smtpUser });
  127. }
  128. /**
  129. * Change smtp password
  130. */
  131. changeSmtpPassword(smtpPassword) {
  132. this.setState({ smtpPassword });
  133. }
  134. /**
  135. * Update app setting
  136. * @memberOf AdminAppContainer
  137. * @return {Array} Appearance
  138. */
  139. async updateAppSettingHandler() {
  140. const response = await this.appContainer.apiv3.put('/app-settings/app-setting', {
  141. title: this.state.title,
  142. confidential: this.state.confidential,
  143. globalLang: this.state.globalLang,
  144. fileUpload: this.state.fileUpload,
  145. });
  146. const { appSettingParams } = response.data;
  147. return appSettingParams;
  148. }
  149. /**
  150. * Update site url setting
  151. * @memberOf AdminAppContainer
  152. * @return {Array} Appearance
  153. */
  154. async updateSiteUrlSettingHandler() {
  155. const response = await this.appContainer.apiv3.put('/app-settings/site-url-setting', {
  156. siteUrl: this.state.siteUrl,
  157. });
  158. const { siteUrlSettingParams } = response.data;
  159. return siteUrlSettingParams;
  160. }
  161. /**
  162. * Update mail setting
  163. * @memberOf AdminAppContainer
  164. * @return {Array} Appearance
  165. */
  166. async updateMailSettingHandler() {
  167. const response = await this.appContainer.apiv3.put('/app-settings/mail-setting', {
  168. fromAddress: this.state.fromAddress,
  169. smtpHost: this.state.smtpHost,
  170. smtpPort: this.state.smtpPort,
  171. smtpUser: this.state.smtpUser,
  172. smtpPassword: this.state.smtpPassword,
  173. });
  174. const { mailSettingParams } = response.data;
  175. return mailSettingParams;
  176. }
  177. }