LineBreakSetting.jsx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import { createSubscribedElement } from '../../UnstatedUtils';
  5. import { toastSuccess, toastError } from '../../../util/apiNotification';
  6. import AppContainer from '../../../services/AppContainer';
  7. class LineBreakSetting extends React.Component {
  8. constructor(props) {
  9. super(props);
  10. const { appContainer } = this.props;
  11. this.state = {
  12. isEnabledLinebreaks: appContainer.config.isEnabledLinebreaks,
  13. isEnabledLinebreaksInComments: appContainer.config.isEnabledLinebreaksInComments,
  14. };
  15. this.handleInputChange = this.handleInputChange.bind(this);
  16. this.changeLineBreakSetting = this.changeLineBreakSetting.bind(this);
  17. }
  18. handleInputChange(e) {
  19. const target = e.target;
  20. const value = target.type === 'checkbox' ? target.checked : target.value;
  21. const name = target.name;
  22. this.setState({ [name]: value });
  23. }
  24. async changeLineBreakSetting () {
  25. const { appContainer } = this.props;
  26. const params = {
  27. isEnabledLinebreaks: this.state.isEnabledLinebreaks,
  28. isEnabledLinebreaksInComments: this.state.isEnabledLinebreaksInComments,
  29. };
  30. try {
  31. await appContainer.apiPost('/admin/markdown/lineBreaksSetting', { params });
  32. toastSuccess('Success change line braek setting');
  33. }
  34. catch (err) {
  35. toastError(err);
  36. }
  37. }
  38. render() {
  39. const { t } = this.props;
  40. return (
  41. <React.Fragment>
  42. <div className="row my-3">
  43. <div className="form-group">
  44. <legend>{ t('markdown_setting.line_break_setting') }</legend>
  45. <p className="well">{ t('markdown_setting.line_break_setting_desc') }</p>
  46. <fieldset className="row">
  47. <div className="form-group">
  48. <label className="col-xs-4 control-label text-right">
  49. { t('markdown_setting.Enable Line Break') }
  50. </label>
  51. <div className="col-xs-5">
  52. <input type="checkbox" name="isEnabledLinebreaks" checked={this.state.isEnabledLinebreaks} onChange={this.handleInputChange} />
  53. <p className="help-block">{ t('markdown_setting.Enable Line Break desc') }</p>
  54. </div>
  55. </div>
  56. </fieldset>
  57. <fieldset className="row">
  58. <div className="form-group my-3">
  59. <label className="col-xs-4 control-label text-right">
  60. { t('markdown_setting.Enable Line Break for comment') }
  61. </label>
  62. <div className="col-xs-5">
  63. <input type="checkbox" name="isEnabledLinebreaksInComments" checked={this.state.isEnabledLinebreaksInComments} onChange={this.handleInputChange} />
  64. <p className="help-block">{ t('markdown_setting.Enable Line Break for comment desc') }</p>
  65. </div>
  66. </div>
  67. </fieldset>
  68. </div>
  69. <div className="form-group my-3">
  70. <div className="col-xs-offset-4 col-xs-5">
  71. <button type="submit" className="btn btn-primary" onClick={this.changeLineBreakSetting}>{ t('Update') }</button>
  72. </div>
  73. </div>
  74. </div>
  75. </React.Fragment>
  76. );
  77. }
  78. }
  79. /**
  80. * Wrapper component for using unstated
  81. */
  82. const LineBreakSettingWrapper = (props) => {
  83. return createSubscribedElement(LineBreakSetting, props, [AppContainer]);
  84. };
  85. LineBreakSetting.propTypes = {
  86. t: PropTypes.func.isRequired, // i18next
  87. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  88. };
  89. export default withTranslation()(LineBreakSettingWrapper);