parent
							
								
									dd0dafed03
								
							
						
					
					
						commit
						15563f8421
					
				
					 4 changed files with 127 additions and 18 deletions
				
			
		|  | @ -10,6 +10,7 @@ export const REPORT_SUBMIT_FAIL    = 'REPORT_SUBMIT_FAIL'; | |||
| 
 | ||||
| export const REPORT_STATUS_TOGGLE  = 'REPORT_STATUS_TOGGLE'; | ||||
| export const REPORT_COMMENT_CHANGE = 'REPORT_COMMENT_CHANGE'; | ||||
| export const REPORT_FORWARD_CHANGE = 'REPORT_FORWARD_CHANGE'; | ||||
| 
 | ||||
| export function initReport(account, status) { | ||||
|   return dispatch => { | ||||
|  | @ -45,6 +46,7 @@ export function submitReport() { | |||
|       account_id: getState().getIn(['reports', 'new', 'account_id']), | ||||
|       status_ids: getState().getIn(['reports', 'new', 'status_ids']), | ||||
|       comment: getState().getIn(['reports', 'new', 'comment']), | ||||
|       forward: getState().getIn(['reports', 'new', 'forward']), | ||||
|     }).then(response => { | ||||
|       dispatch(closeModal()); | ||||
|       dispatch(submitReportSuccess(response.data)); | ||||
|  | @ -78,3 +80,10 @@ export function changeReportComment(comment) { | |||
|     comment, | ||||
|   }; | ||||
| }; | ||||
| 
 | ||||
| export function changeReportForward(forward) { | ||||
|   return { | ||||
|     type: REPORT_FORWARD_CHANGE, | ||||
|     forward, | ||||
|   }; | ||||
| }; | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| import React from 'react'; | ||||
| 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 PropTypes from 'prop-types'; | ||||
| import ImmutablePropTypes from 'react-immutable-proptypes'; | ||||
|  | @ -10,6 +10,7 @@ import StatusCheckBox from 'flavours/glitch/features/report/containers/status_ch | |||
| import { OrderedSet } from 'immutable'; | ||||
| import ImmutablePureComponent from 'react-immutable-pure-component'; | ||||
| import Button from 'flavours/glitch/components/button'; | ||||
| import Toggle from 'react-toggle'; | ||||
| 
 | ||||
| const messages = defineMessages({ | ||||
|   placeholder: { id: 'report.placeholder', defaultMessage: 'Additional comments' }, | ||||
|  | @ -26,6 +27,7 @@ const makeMapStateToProps = () => { | |||
|       isSubmitting: state.getIn(['reports', 'new', 'isSubmitting']), | ||||
|       account: getAccount(state, accountId), | ||||
|       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'])), | ||||
|     }; | ||||
|   }; | ||||
|  | @ -42,14 +44,19 @@ export default class ReportModal extends ImmutablePureComponent { | |||
|     account: ImmutablePropTypes.map, | ||||
|     statusIds: ImmutablePropTypes.orderedSet.isRequired, | ||||
|     comment: PropTypes.string.isRequired, | ||||
|     forward: PropTypes.bool, | ||||
|     dispatch: PropTypes.func.isRequired, | ||||
|     intl: PropTypes.object.isRequired, | ||||
|   }; | ||||
| 
 | ||||
|   handleCommentChange = (e) => { | ||||
|   handleCommentChange = e => { | ||||
|     this.props.dispatch(changeReportComment(e.target.value)); | ||||
|   } | ||||
| 
 | ||||
|   handleForwardChange = e => { | ||||
|     this.props.dispatch(changeReportForward(e.target.checked)); | ||||
|   } | ||||
| 
 | ||||
|   handleSubmit = () => { | ||||
|     this.props.dispatch(submitReport()); | ||||
|   } | ||||
|  | @ -65,12 +72,14 @@ export default class ReportModal extends ImmutablePureComponent { | |||
|   } | ||||
| 
 | ||||
|   render () { | ||||
|     const { account, comment, intl, statusIds, isSubmitting } = this.props; | ||||
|     const { account, comment, intl, statusIds, isSubmitting, forward } = this.props; | ||||
| 
 | ||||
|     if (!account) { | ||||
|       return null; | ||||
|     } | ||||
| 
 | ||||
|     const domain = account.get('acct').split('@')[1]; | ||||
| 
 | ||||
|     return ( | ||||
|       <div className='modal-root__modal report-modal'> | ||||
|         <div className='report-modal__target'> | ||||
|  | @ -78,13 +87,9 @@ export default class ReportModal extends ImmutablePureComponent { | |||
|         </div> | ||||
| 
 | ||||
|         <div className='report-modal__container'> | ||||
|           <div className='report-modal__statuses'> | ||||
|             <div> | ||||
|               {statusIds.map(statusId => <StatusCheckBox id={statusId} key={statusId} disabled={isSubmitting} />)} | ||||
|             </div> | ||||
|           </div> | ||||
| 
 | ||||
|           <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 | ||||
|               className='setting-text light' | ||||
|               placeholder={intl.formatMessage(messages.placeholder)} | ||||
|  | @ -92,11 +97,26 @@ export default class ReportModal extends ImmutablePureComponent { | |||
|               onChange={this.handleCommentChange} | ||||
|               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 }} /></label> | ||||
|                 </div> | ||||
|               </div> | ||||
|             )} | ||||
| 
 | ||||
|             <Button disabled={isSubmitting} text={intl.formatMessage(messages.submit)} onClick={this.handleSubmit} /> | ||||
|           </div> | ||||
| 
 | ||||
|         <div className='report-modal__action-bar'> | ||||
|           <Button disabled={isSubmitting} text={intl.formatMessage(messages.submit)} onClick={this.handleSubmit} /> | ||||
|           <div className='report-modal__statuses'> | ||||
|             <div> | ||||
|               {statusIds.map(statusId => <StatusCheckBox id={statusId} key={statusId} disabled={isSubmitting} />)} | ||||
|             </div> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|     ); | ||||
|  |  | |||
|  | @ -6,6 +6,7 @@ import { | |||
|   REPORT_CANCEL, | ||||
|   REPORT_STATUS_TOGGLE, | ||||
|   REPORT_COMMENT_CHANGE, | ||||
|   REPORT_FORWARD_CHANGE, | ||||
| } from 'flavours/glitch/actions/reports'; | ||||
| import { Map as ImmutableMap, Set as ImmutableSet } from 'immutable'; | ||||
| 
 | ||||
|  | @ -15,6 +16,7 @@ const initialState = ImmutableMap({ | |||
|     account_id: null, | ||||
|     status_ids: ImmutableSet(), | ||||
|     comment: '', | ||||
|     forward: false, | ||||
|   }), | ||||
| }); | ||||
| 
 | ||||
|  | @ -42,6 +44,8 @@ export default function reports(state = initialState, action) { | |||
|     }); | ||||
|   case REPORT_COMMENT_CHANGE: | ||||
|     return state.setIn(['new', 'comment'], action.comment); | ||||
|   case REPORT_FORWARD_CHANGE: | ||||
|     return state.setIn(['new', 'forward'], action.forward); | ||||
|   case REPORT_SUBMIT_REQUEST: | ||||
|     return state.setIn(['new', 'isSubmitting'], true); | ||||
|   case REPORT_SUBMIT_FAIL: | ||||
|  |  | |||
|  | @ -476,8 +476,7 @@ | |||
| .boost-modal__action-bar, | ||||
| .favourite-modal__action-bar, | ||||
| .confirmation-modal__action-bar, | ||||
| .mute-modal__action-bar, | ||||
| .report-modal__action-bar { | ||||
| .mute-modal__action-bar { | ||||
|   display: flex; | ||||
|   justify-content: space-between; | ||||
|   background: $ui-secondary-color; | ||||
|  | @ -523,22 +522,99 @@ | |||
|   vertical-align: middle; | ||||
| } | ||||
| 
 | ||||
| .report-modal { | ||||
|   width: 90vw; | ||||
|   max-width: 700px; | ||||
| } | ||||
| 
 | ||||
| .report-modal__container { | ||||
|   display: flex; | ||||
|   border-top: 1px solid $ui-secondary-color; | ||||
| 
 | ||||
|   @media screen and (max-width: 480px) { | ||||
|     flex-wrap: wrap; | ||||
|     overflow-y: auto; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| .report-modal__statuses, | ||||
| .report-modal__comment { | ||||
|   padding: 10px; | ||||
|   box-sizing: border-box; | ||||
|   width: 50%; | ||||
| 
 | ||||
|   @media screen and (max-width: 480px) { | ||||
|     width: 100%; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| .report-modal__statuses { | ||||
|   flex: 1 1 auto; | ||||
|   min-height: 20vh; | ||||
|   max-height: 40vh; | ||||
|   overflow-y: auto; | ||||
|   overflow-x: hidden; | ||||
| 
 | ||||
|   @media screen and (max-width: 480px) { | ||||
|     max-height: 10vh; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| .report-modal__comment { | ||||
|   .setting-text { | ||||
|     margin-top: 10px; | ||||
|   padding: 20px; | ||||
|   border-right: 1px solid $ui-secondary-color; | ||||
|   max-width: 320px; | ||||
| 
 | ||||
|   p { | ||||
|     font-size: 14px; | ||||
|     line-height: 20px; | ||||
|     margin-bottom: 20px; | ||||
|   } | ||||
| 
 | ||||
|   .setting-text { | ||||
|     display: block; | ||||
|     box-sizing: border-box; | ||||
|     width: 100%; | ||||
|     margin: 0; | ||||
|     color: $ui-base-color; | ||||
|     background: $white; | ||||
|     padding: 10px; | ||||
|     font-family: inherit; | ||||
|     font-size: 14px; | ||||
|     resize: vertical; | ||||
|     border: 0; | ||||
|     outline: 0; | ||||
|     border-radius: 4px; | ||||
|     border: 1px solid $ui-secondary-color; | ||||
|     margin-bottom: 20px; | ||||
| 
 | ||||
|     &:focus { | ||||
|       border: 1px solid darken($ui-secondary-color, 8%); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   .setting-toggle { | ||||
|     margin-top: 20px; | ||||
|     margin-bottom: 24px; | ||||
| 
 | ||||
|     &__label { | ||||
|       color: $ui-base-color; | ||||
|       font-size: 14px; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   @media screen and (max-width: 480px) { | ||||
|     padding: 10px; | ||||
|     max-width: 100%; | ||||
|     order: 2; | ||||
| 
 | ||||
|     .setting-toggle { | ||||
|       margin-bottom: 4px; | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| .report-modal__target { | ||||
|   padding: 20px; | ||||
| } | ||||
| 
 | ||||
| .actions-modal { | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue