@ -1,6 +1,6 @@
import React from 'react' ;
import React from 'react' ;
import { connect } from 'react-redux' ;
import { connect } from 'react-redux' ;
import { changeReportComment , submitReport } from 'flavours/glitch/actions/reports' ;
import { changeReportComment , changeReportForward , submitReport } from 'flavours/glitch/actions/reports' ;
import { refreshAccountTimeline } from 'flavours/glitch/actions/timelines' ;
import { refreshAccountTimeline } from 'flavours/glitch/actions/timelines' ;
import PropTypes from 'prop-types' ;
import PropTypes from 'prop-types' ;
import ImmutablePropTypes from 'react-immutable-proptypes' ;
import ImmutablePropTypes from 'react-immutable-proptypes' ;
@ -10,8 +10,11 @@ import StatusCheckBox from 'flavours/glitch/features/report/containers/status_ch
import { OrderedSet } from 'immutable' ;
import { OrderedSet } from 'immutable' ;
import ImmutablePureComponent from 'react-immutable-pure-component' ;
import ImmutablePureComponent from 'react-immutable-pure-component' ;
import Button from 'flavours/glitch/components/button' ;
import Button from 'flavours/glitch/components/button' ;
import Toggle from 'react-toggle' ;
import IconButton from '../../../components/icon_button' ;
const messages = defineMessages ( {
const messages = defineMessages ( {
close : { id : 'lightbox.close' , defaultMessage : 'Close' } ,
placeholder : { id : 'report.placeholder' , defaultMessage : 'Additional comments' } ,
placeholder : { id : 'report.placeholder' , defaultMessage : 'Additional comments' } ,
submit : { id : 'report.submit' , defaultMessage : 'Submit' } ,
submit : { id : 'report.submit' , defaultMessage : 'Submit' } ,
} ) ;
} ) ;
@ -26,6 +29,7 @@ const makeMapStateToProps = () => {
isSubmitting : state . getIn ( [ 'reports' , 'new' , 'isSubmitting' ] ) ,
isSubmitting : state . getIn ( [ 'reports' , 'new' , 'isSubmitting' ] ) ,
account : getAccount ( state , accountId ) ,
account : getAccount ( state , accountId ) ,
comment : state . getIn ( [ 'reports' , 'new' , 'comment' ] ) ,
comment : state . getIn ( [ 'reports' , 'new' , 'comment' ] ) ,
forward : state . getIn ( [ 'reports' , 'new' , 'forward' ] ) ,
statusIds : OrderedSet ( state . getIn ( [ 'timelines' , ` account: ${ accountId } ` , 'items' ] ) ) . union ( state . getIn ( [ 'reports' , 'new' , 'status_ids' ] ) ) ,
statusIds : OrderedSet ( state . getIn ( [ 'timelines' , ` account: ${ accountId } ` , 'items' ] ) ) . union ( state . getIn ( [ 'reports' , 'new' , 'status_ids' ] ) ) ,
} ;
} ;
} ;
} ;
@ -42,14 +46,19 @@ export default class ReportModal extends ImmutablePureComponent {
account : ImmutablePropTypes . map ,
account : ImmutablePropTypes . map ,
statusIds : ImmutablePropTypes . orderedSet . isRequired ,
statusIds : ImmutablePropTypes . orderedSet . isRequired ,
comment : PropTypes . string . isRequired ,
comment : PropTypes . string . isRequired ,
forward : PropTypes . bool ,
dispatch : PropTypes . func . isRequired ,
dispatch : PropTypes . func . isRequired ,
intl : PropTypes . object . isRequired ,
intl : PropTypes . object . isRequired ,
} ;
} ;
handleCommentChange = ( e ) => {
handleCommentChange = e => {
this . props . dispatch ( changeReportComment ( e . target . value ) ) ;
this . props . dispatch ( changeReportComment ( e . target . value ) ) ;
}
}
handleForwardChange = e => {
this . props . dispatch ( changeReportForward ( e . target . checked ) ) ;
}
handleSubmit = ( ) => {
handleSubmit = ( ) => {
this . props . dispatch ( submitReport ( ) ) ;
this . props . dispatch ( submitReport ( ) ) ;
}
}
@ -65,26 +74,25 @@ export default class ReportModal extends ImmutablePureComponent {
}
}
render ( ) {
render ( ) {
const { account , comment , intl , statusIds , isSubmitting } = this . props ;
const { account , comment , intl , statusIds , isSubmitting , forward , onClose } = this . props ;
if ( ! account ) {
if ( ! account ) {
return null ;
return null ;
}
}
const domain = account . get ( 'acct' ) . split ( '@' ) [ 1 ] ;
return (
return (
< div className = 'modal-root__modal report-modal' >
< div className = 'modal-root__modal report-modal' >
< div className = 'report-modal__target' >
< div className = 'report-modal__target' >
< IconButton className = 'media-modal__close' title = { intl . formatMessage ( messages . close ) } icon = 'times' onClick = { onClose } size = { 16 } / >
< FormattedMessage id = 'report.target' defaultMessage = 'Report {target}' values = { { target : < strong > { account . get ( 'acct' ) } < /strong> }} / >
< FormattedMessage id = 'report.target' defaultMessage = 'Report {target}' values = { { target : < strong > { account . get ( 'acct' ) } < /strong> }} / >
< / d i v >
< / d i v >
< div className = 'report-modal__container' >
< div className = 'report-modal__container' >
< div className = 'report-modal__statuses' >
< div >
{ statusIds . map ( statusId => < StatusCheckBox id = { statusId } key = { statusId } disabled = { isSubmitting } / > ) }
< / d i v >
< / d i v >
< div className = 'report-modal__comment' >
< div className = 'report-modal__comment' >
< p > < FormattedMessage id = 'report.hint' defaultMessage = 'The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:' / > < / p >
< textarea
< textarea
className = 'setting-text light'
className = 'setting-text light'
placeholder = { intl . formatMessage ( messages . placeholder ) }
placeholder = { intl . formatMessage ( messages . placeholder ) }
@ -92,11 +100,26 @@ export default class ReportModal extends ImmutablePureComponent {
onChange = { this . handleCommentChange }
onChange = { this . handleCommentChange }
disabled = { isSubmitting }
disabled = { isSubmitting }
/ >
/ >
{ domain && (
< div >
< p > < FormattedMessage id = 'report.forward_hint' defaultMessage = 'The account is from another server. Send an anonymized copy of the report there as well?' / > < / p >
< div className = 'setting-toggle' >
< Toggle id = 'report-forward' checked = { forward } disabled = { isSubmitting } onChange = { this . handleForwardChange } / >
< label htmlFor = 'report-forward' className = 'setting-toggle__label' > < FormattedMessage id = 'report.forward' defaultMessage = 'Forward to {target}' values = { { target : domain } } / > < / l a b e l >
< / d i v >
< / d i v >
) }
< Button disabled = { isSubmitting } text = { intl . formatMessage ( messages . submit ) } onClick = { this . handleSubmit } / >
< / d i v >
< / d i v >
< / d i v >
< div className = 'report-modal__action-bar' >
< div className = 'report-modal__statuses' >
< Button disabled = { isSubmitting } text = { intl . formatMessage ( messages . submit ) } onClick = { this . handleSubmit } / >
< div >
{ statusIds . map ( statusId => < StatusCheckBox id = { statusId } key = { statusId } disabled = { isSubmitting } / > ) }
< / d i v >
< / d i v >
< / d i v >
< / d i v >
< / d i v >
< / d i v >
) ;
) ;