AppSettingsPage.jsx 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 AppSettingsPage extends React.Component {
  16. async componentDidMount() {
  17. const { adminAppContainer } = this.props;
  18. try {
  19. await adminAppContainer.retrieveAppSettingsData();
  20. }
  21. catch (err) {
  22. toastError(err);
  23. adminAppContainer.setState({ retrieveError: err });
  24. logger.error(err);
  25. }
  26. }
  27. render() {
  28. const { t } = this.props;
  29. return (
  30. <Fragment>
  31. <div className="row">
  32. <div className="col-md-12">
  33. <h2 className="admin-setting-header">{t('App Settings')}</h2>
  34. <AppSetting />
  35. </div>
  36. </div>
  37. <div className="row mt-5">
  38. <div className="col-md-12">
  39. <h2 className="admin-setting-header">{t('Site URL settings')}</h2>
  40. <SiteUrlSetting />
  41. </div>
  42. </div>
  43. <div className="row mt-5">
  44. <div className="col-md-12">
  45. <h2 className="admin-setting-header">{t('admin:app_setting.mail_settings')}</h2>
  46. <MailSetting />
  47. </div>
  48. </div>
  49. <div className="row mt-5">
  50. <div className="col-md-12">
  51. <h2 className="admin-setting-header">{t('admin:app_setting.aws_settings')}</h2>
  52. <AwsSetting />
  53. </div>
  54. </div>
  55. <div className="row mt-5">
  56. <div className="col-md-12">
  57. <h2 className="admin-setting-header">{t('admin:app_setting.plugin_settings')}</h2>
  58. <PluginSetting />
  59. </div>
  60. </div>
  61. </Fragment>
  62. );
  63. }
  64. }
  65. AppSettingsPage.propTypes = {
  66. t: PropTypes.func.isRequired, // i18next
  67. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  68. adminAppContainer: PropTypes.instanceOf(AdminAppContainer).isRequired,
  69. };
  70. /**
  71. * Wrapper component for using unstated
  72. */
  73. const AppSettingsPageWrapper = (props) => {
  74. return createSubscribedElement(AppSettingsPage, props, [AppContainer, AdminAppContainer]);
  75. };
  76. export default withTranslation()(AppSettingsPageWrapper);