CustomizeBehaviorSetting.jsx 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /* eslint-disable react/no-danger */
  2. import React from 'react';
  3. import PropTypes from 'prop-types';
  4. import { withTranslation } from 'react-i18next';
  5. import { createSubscribedElement } from '../../UnstatedUtils';
  6. import { toastSuccess, toastError } from '../../../util/apiNotification';
  7. import AppContainer from '../../../services/AppContainer';
  8. import AdminCustomizeContainer from '../../../services/AdminCustomizeContainer';
  9. import CustomizeBehaviorOption from './CustomizeBehaviorOption';
  10. import AdminUpdateButtonRow from '../Common/AdminUpdateButtonRow';
  11. class CustomizeBehaviorSetting extends React.Component {
  12. constructor(props) {
  13. super(props);
  14. this.onClickSubmit = this.onClickSubmit.bind(this);
  15. }
  16. async onClickSubmit() {
  17. const { t, adminCustomizeContainer } = this.props;
  18. try {
  19. await adminCustomizeContainer.updateCustomizeBehavior();
  20. toastSuccess(t('toaster.update_successed', { target: t('admin:customize_setting.behavior') }));
  21. }
  22. catch (err) {
  23. toastError(err);
  24. }
  25. }
  26. render() {
  27. const { t, adminCustomizeContainer } = this.props;
  28. return (
  29. <React.Fragment>
  30. <h2 className="admin-setting-header">{t('admin:customize_setting.behavior')}</h2>
  31. <div className="row">
  32. <div className="col-xs-6">
  33. <CustomizeBehaviorOption
  34. behaviorType="growi"
  35. isSelected={adminCustomizeContainer.state.currentBehavior === 'growi'}
  36. onSelected={() => adminCustomizeContainer.switchBehaviorType('growi')}
  37. labelHtml={`GROWI Simplified behavior <small class="text-success">${t('admin:customize_setting.recommended')}</small>`}
  38. >
  39. <ul>
  40. <li><span dangerouslySetInnerHTML={{ __html: t('admin:customize_setting.behavior_desc.growi_text1') }} /></li>
  41. <li><span dangerouslySetInnerHTML={{ __html: t('admin:customize_setting.behavior_desc.growi_text2') }} /></li>
  42. <li><span dangerouslySetInnerHTML={{ __html: t('admin:customize_setting.behavior_desc.growi_text3') }} /></li>
  43. </ul>
  44. </CustomizeBehaviorOption>
  45. </div>
  46. <div className="col-xs-6">
  47. <CustomizeBehaviorOption
  48. behaviorType="crowi-plus"
  49. isSelected={adminCustomizeContainer.state.currentBehavior === 'crowi-plus'}
  50. onSelected={() => adminCustomizeContainer.switchBehaviorType('crowi-plus')}
  51. labelHtml="Crowi classic behavior"
  52. >
  53. <ul>
  54. <li><span dangerouslySetInnerHTML={{ __html: t('admin:customize_setting.behavior_desc.crowi_text1') }} /></li>
  55. <li><span dangerouslySetInnerHTML={{ __html: t('admin:customize_setting.behavior_desc.crowi_text2') }} /></li>
  56. <ul>
  57. <li><span dangerouslySetInnerHTML={{ __html: t('admin:customize_setting.behavior_desc.crowi_text3') }} /></li>
  58. </ul>
  59. <li><span dangerouslySetInnerHTML={{ __html: t('admin:customize_setting.behavior_desc.crowi_text4') }} /></li>
  60. <li><span dangerouslySetInnerHTML={{ __html: t('admin:customize_setting.behavior_desc.crowi_text5') }} /></li>
  61. </ul>
  62. </CustomizeBehaviorOption>
  63. </div>
  64. </div>
  65. <AdminUpdateButtonRow onClick={this.onClickSubmit} disabled={adminCustomizeContainer.state.retrieveError != null} />
  66. </React.Fragment>
  67. );
  68. }
  69. }
  70. const CustomizeBehaviorSettingWrapper = (props) => {
  71. return createSubscribedElement(CustomizeBehaviorSetting, props, [AppContainer, AdminCustomizeContainer]);
  72. };
  73. CustomizeBehaviorSetting.propTypes = {
  74. t: PropTypes.func.isRequired, // i18next
  75. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  76. adminCustomizeContainer: PropTypes.instanceOf(AdminCustomizeContainer).isRequired,
  77. };
  78. export default withTranslation()(CustomizeBehaviorSettingWrapper);