CustomizeThemeSetting.jsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import { withUnstatedContainers } from '../../UnstatedUtils';
  5. import { toastSuccess, toastError } from '../../../util/apiNotification';
  6. import AppContainer from '../../../services/AppContainer';
  7. import CustomizeThemeOptions from './CustomizeThemeOptions';
  8. import AdminCustomizeContainer from '../../../services/AdminCustomizeContainer';
  9. import AdminUpdateButtonRow from '../Common/AdminUpdateButtonRow';
  10. class CustomizeThemeSetting extends React.Component {
  11. constructor(props) {
  12. super(props);
  13. this.onClickSubmit = this.onClickSubmit.bind(this);
  14. }
  15. async onClickSubmit() {
  16. const { t, adminCustomizeContainer } = this.props;
  17. try {
  18. await adminCustomizeContainer.updateCustomizeTheme();
  19. toastSuccess(t('toaster.update_successed', { target: t('admin:customize_setting.theme') }));
  20. }
  21. catch (err) {
  22. toastError(err);
  23. }
  24. }
  25. renderDevAlert() {
  26. if (process.env.NODE_ENV === 'development') {
  27. return (
  28. <div className="alert alert-warning">
  29. <strong>DEBUG MESSAGE:</strong> development build では、リアルタイムプレビューが無効になります
  30. </div>
  31. );
  32. }
  33. }
  34. render() {
  35. const { t, adminCustomizeContainer } = this.props;
  36. return (
  37. <React.Fragment>
  38. <div className="row">
  39. <div className="col-12">
  40. <h2 className="admin-setting-header">{t('admin:customize_setting.theme')}</h2>
  41. {this.renderDevAlert()}
  42. <CustomizeThemeOptions />
  43. <AdminUpdateButtonRow onClick={this.onClickSubmit} disabled={adminCustomizeContainer.state.retrieveError != null} />
  44. </div>
  45. </div>
  46. </React.Fragment>
  47. );
  48. }
  49. }
  50. const CustomizeThemeSettingWrapper = withUnstatedContainers(CustomizeThemeSetting, [AppContainer, AdminCustomizeContainer]);
  51. CustomizeThemeSetting.propTypes = {
  52. t: PropTypes.func.isRequired, // i18next
  53. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  54. adminCustomizeContainer: PropTypes.instanceOf(AdminCustomizeContainer).isRequired,
  55. };
  56. export default withTranslation()(CustomizeThemeSettingWrapper);