AppSettingPage.jsx 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import React, { Fragment } from 'react';
  2. import { withTranslation } from 'react-i18next';
  3. import PropTypes from 'prop-types';
  4. import loggerFactory from '@alias/logger';
  5. import { createSubscribedElement } from '../../UnstatedUtils';
  6. import { toastError } from '../../../util/apiNotification';
  7. import AppContainer from '../../../services/AppContainer';
  8. import AdminAppContainer from '../../../services/AdminAppContainer';
  9. import AppSetting from './AppSetting';
  10. import SiteUrlSetting from './SiteUrlSetting';
  11. import MailSetting from './MailSetting';
  12. import AwsSetting from './AwsSetting';
  13. import PluginSetting from './PluginSetting';
  14. const logger = loggerFactory('growi:appSettings');
  15. class AppSettingPage extends React.Component {
  16. constructor(props) {
  17. super(props);
  18. this.state = {
  19. isLoading: true,
  20. };
  21. }
  22. async componentDidMount() {
  23. const { adminAppContainer } = this.props;
  24. try {
  25. await adminAppContainer.retrieveAppSettingsData();
  26. this.setState({ isLoading: false });
  27. }
  28. catch (err) {
  29. toastError(err);
  30. adminAppContainer.setState({ retrieveError: err });
  31. logger.error(err);
  32. }
  33. }
  34. render() {
  35. const { t } = this.props;
  36. return !this.state.isLoading ? (
  37. <Fragment>
  38. <div className="row">
  39. <div className="col-md-12">
  40. <h2>{t('App Settings')}</h2>
  41. <AppSetting />
  42. </div>
  43. </div>
  44. <div className="row">
  45. <div className="col-md-12">
  46. <h2>{t('Site URL settings')}</h2>
  47. <SiteUrlSetting />
  48. </div>
  49. </div>
  50. <div className="row">
  51. <div className="col-md-12">
  52. <h2>{t('app_setting.Mail settings')}</h2>
  53. <MailSetting />
  54. </div>
  55. </div>
  56. <div className="row">
  57. <div className="col-md-12">
  58. <h2>{t('app_setting.AWS settings')}</h2>
  59. <AwsSetting />
  60. </div>
  61. </div>
  62. <div className="row">
  63. <div className="col-md-12">
  64. <h2>{t('app_setting.Plugin settings')}</h2>
  65. <PluginSetting />
  66. </div>
  67. </div>
  68. </Fragment>
  69. ) : null;
  70. }
  71. }
  72. AppSettingPage.propTypes = {
  73. t: PropTypes.func.isRequired, // i18next
  74. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  75. adminAppContainer: PropTypes.instanceOf(AdminAppContainer).isRequired,
  76. };
  77. /**
  78. * Wrapper component for using unstated
  79. */
  80. const AppSettingPageWrapper = (props) => {
  81. return createSubscribedElement(AppSettingPage, props, [AppContainer, AdminAppContainer]);
  82. };
  83. export default withTranslation()(AppSettingPageWrapper);