XssForm.jsx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /* eslint-disable react/no-unused-state */
  2. /* eslint-disable max-len */
  3. import React from 'react';
  4. import PropTypes from 'prop-types';
  5. import { withTranslation } from 'react-i18next';
  6. import { createSubscribedElement } from '../../UnstatedUtils';
  7. import AppContainer from '../../../services/AppContainer';
  8. import MarkDownSettingContainer from '../../../services/MarkDownSettingContainer';
  9. import WhiteListInput from './WhiteListInput';
  10. class XssForm extends React.Component {
  11. constructor(props) {
  12. super(props);
  13. this.onClickSubmit = this.onClickSubmit.bind(this);
  14. }
  15. async onClickSubmit() {
  16. // TODO GW-303 create apiV3 of update setting
  17. }
  18. xssOptions() {
  19. const { t, markDownSettingContainer } = this.props;
  20. return (
  21. <fieldset className="form-group col-xs-12 my-3">
  22. <div className="col-xs-4 radio radio-primary">
  23. <input type="radio" id="xssOption1" name="XssOption" onChange={() => { markDownSettingContainer.setState({ xssOption: 1 }) }} />
  24. <label htmlFor="xssOption1">
  25. <p className="font-weight-bold">{ t('markdown_setting.Ignore all tags') }</p>
  26. <div className="m-t-15">
  27. { t('markdown_setting.Ignore all tags desc') }
  28. </div>
  29. </label>
  30. </div>
  31. <div className="col-xs-4 radio radio-primary">
  32. <input type="radio" id="xssOption2" name="XssOption" onChange={() => { markDownSettingContainer.setState({ xssOption: 2 }) }} />
  33. <label htmlFor="xssOption2">
  34. <p className="font-weight-bold">{ t('markdown_setting.Recommended setting') }</p>
  35. <WhiteListInput customizable={false} />
  36. </label>
  37. </div>
  38. <div className="col-xs-4 radio radio-primary">
  39. <input type="radio" id="xssOption3" name="XssOption" onChange={() => { markDownSettingContainer.setState({ xssOption: 3 }) }} />
  40. <label htmlFor="xssOption3">
  41. <p className="font-weight-bold">{ t('markdown_setting.Custom Whitelist') }</p>
  42. <WhiteListInput customizable />
  43. </label>
  44. </div>
  45. </fieldset>
  46. );
  47. }
  48. render() {
  49. const { t, markDownSettingContainer } = this.props;
  50. return (
  51. <React.Fragment>
  52. <form className="row">
  53. <div className="form-group">
  54. <div className="col-xs-4 text-right">
  55. <div className="checkbox checkbox-success" onChange={markDownSettingContainer.switchEnableXss}>
  56. <input type="checkbox" id="XssEnable" className="form-check-input" name="isEnabledXss" checked={markDownSettingContainer.state.isEnabledXss} />
  57. <label htmlFor="XssEnable">
  58. { t('markdown_setting.Enable XSS prevention') }
  59. </label>
  60. </div>
  61. </div>
  62. {markDownSettingContainer.state.isEnabledXss && this.xssOptions()}
  63. </div>
  64. <div className="form-group my-3">
  65. <div className="col-xs-offset-4 col-xs-5">
  66. <div className="btn btn-primary" onClick={this.onClickSubmit}>{ t('Update') }</div>
  67. </div>
  68. </div>
  69. </form>
  70. </React.Fragment>
  71. );
  72. }
  73. }
  74. const XssFormWrapper = (props) => {
  75. return createSubscribedElement(XssForm, props, [AppContainer, MarkDownSettingContainer]);
  76. };
  77. XssForm.propTypes = {
  78. t: PropTypes.func.isRequired, // i18next
  79. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  80. markDownSettingContainer: PropTypes.instanceOf(MarkDownSettingContainer).isRequired,
  81. };
  82. export default withTranslation()(XssFormWrapper);