rules.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import ImmutablePropTypes from 'react-immutable-proptypes';
  4. import { connect } from 'react-redux';
  5. import { FormattedMessage } from 'react-intl';
  6. import Button from 'mastodon/components/button';
  7. import Option from './components/option';
  8. const mapStateToProps = state => ({
  9. rules: state.getIn(['server', 'server', 'rules']),
  10. });
  11. export default @connect(mapStateToProps)
  12. class Rules extends React.PureComponent {
  13. static propTypes = {
  14. onNextStep: PropTypes.func.isRequired,
  15. rules: ImmutablePropTypes.list,
  16. selectedRuleIds: ImmutablePropTypes.set.isRequired,
  17. onToggle: PropTypes.func.isRequired,
  18. };
  19. handleNextClick = () => {
  20. const { onNextStep } = this.props;
  21. onNextStep('statuses');
  22. };
  23. handleRulesToggle = (value, checked) => {
  24. const { onToggle } = this.props;
  25. onToggle(value, checked);
  26. };
  27. render () {
  28. const { rules, selectedRuleIds } = this.props;
  29. return (
  30. <React.Fragment>
  31. <h3 className='report-dialog-modal__title'><FormattedMessage id='report.rules.title' defaultMessage='Which rules are being violated?' /></h3>
  32. <p className='report-dialog-modal__lead'><FormattedMessage id='report.rules.subtitle' defaultMessage='Select all that apply' /></p>
  33. <div>
  34. {rules.map(item => (
  35. <Option
  36. key={item.get('id')}
  37. name='rule_ids'
  38. value={item.get('id')}
  39. checked={selectedRuleIds.includes(item.get('id'))}
  40. onToggle={this.handleRulesToggle}
  41. label={item.get('text')}
  42. multiple
  43. />
  44. ))}
  45. </div>
  46. <div className='flex-spacer' />
  47. <div className='report-dialog-modal__actions'>
  48. <Button onClick={this.handleNextClick} disabled={selectedRuleIds.size < 1}><FormattedMessage id='report.next' defaultMessage='Next' /></Button>
  49. </div>
  50. </React.Fragment>
  51. );
  52. }
  53. }