comment.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { injectIntl, defineMessages, FormattedMessage } from 'react-intl';
  4. import Button from 'mastodon/components/button';
  5. import Toggle from 'react-toggle';
  6. const messages = defineMessages({
  7. placeholder: { id: 'report.placeholder', defaultMessage: 'Type or paste additional comments' },
  8. });
  9. export default @injectIntl
  10. class Comment extends React.PureComponent {
  11. static propTypes = {
  12. onSubmit: PropTypes.func.isRequired,
  13. comment: PropTypes.string.isRequired,
  14. onChangeComment: PropTypes.func.isRequired,
  15. intl: PropTypes.object.isRequired,
  16. isSubmitting: PropTypes.bool,
  17. forward: PropTypes.bool,
  18. isRemote: PropTypes.bool,
  19. domain: PropTypes.string,
  20. onChangeForward: PropTypes.func.isRequired,
  21. };
  22. handleClick = () => {
  23. const { onSubmit } = this.props;
  24. onSubmit();
  25. };
  26. handleChange = e => {
  27. const { onChangeComment } = this.props;
  28. onChangeComment(e.target.value);
  29. };
  30. handleKeyDown = e => {
  31. if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) {
  32. this.handleClick();
  33. }
  34. };
  35. handleForwardChange = e => {
  36. const { onChangeForward } = this.props;
  37. onChangeForward(e.target.checked);
  38. };
  39. render () {
  40. const { comment, isRemote, forward, domain, isSubmitting, intl } = this.props;
  41. return (
  42. <React.Fragment>
  43. <h3 className='report-dialog-modal__title'><FormattedMessage id='report.comment.title' defaultMessage='Is there anything else you think we should know?' /></h3>
  44. <textarea
  45. className='report-dialog-modal__textarea'
  46. placeholder={intl.formatMessage(messages.placeholder)}
  47. value={comment}
  48. onChange={this.handleChange}
  49. onKeyDown={this.handleKeyDown}
  50. disabled={isSubmitting}
  51. />
  52. {isRemote && (
  53. <React.Fragment>
  54. <p className='report-dialog-modal__lead'><FormattedMessage id='report.forward_hint' defaultMessage='The account is from another server. Send an anonymized copy of the report there as well?' /></p>
  55. <label className='report-dialog-modal__toggle'>
  56. <Toggle checked={forward} disabled={isSubmitting} onChange={this.handleForwardChange} />
  57. <FormattedMessage id='report.forward' defaultMessage='Forward to {target}' values={{ target: domain }} />
  58. </label>
  59. </React.Fragment>
  60. )}
  61. <div className='flex-spacer' />
  62. <div className='report-dialog-modal__actions'>
  63. <Button onClick={this.handleClick} disabled={isSubmitting}><FormattedMessage id='report.submit' defaultMessage='Submit report' /></Button>
  64. </div>
  65. </React.Fragment>
  66. );
  67. }
  68. }