[Glitch] Add a confirmation dialog when hitting reply and the compose box isn't empty
This commit is contained in:
		
							parent
							
								
									515ce8f469
								
							
						
					
					
						commit
						c6e4c48942
					
				
					 2 changed files with 28 additions and 2 deletions
				
			
		|  | @ -31,6 +31,8 @@ const messages = defineMessages({ | ||||||
|   redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' }, |   redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' }, | ||||||
|   redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.' }, |   redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.' }, | ||||||
|   blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' }, |   blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' }, | ||||||
|  |   replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' }, | ||||||
|  |   replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' }, | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| const makeMapStateToProps = () => { | const makeMapStateToProps = () => { | ||||||
|  | @ -67,7 +69,18 @@ const makeMapStateToProps = () => { | ||||||
| const mapDispatchToProps = (dispatch, { intl }) => ({ | const mapDispatchToProps = (dispatch, { intl }) => ({ | ||||||
| 
 | 
 | ||||||
|   onReply (status, router) { |   onReply (status, router) { | ||||||
|     dispatch(replyCompose(status, router)); |     dispatch((_, getState) => { | ||||||
|  |       let state = getState(); | ||||||
|  |       if (state.getIn(['compose', 'text']).trim().length !== 0) { | ||||||
|  |         dispatch(openModal('CONFIRM', { | ||||||
|  |           message: intl.formatMessage(messages.replyMessage), | ||||||
|  |           confirm: intl.formatMessage(messages.replyConfirm), | ||||||
|  |           onConfirm: () => dispatch(replyCompose(status, router)), | ||||||
|  |         })); | ||||||
|  |       } else { | ||||||
|  |         dispatch(replyCompose(status, router)); | ||||||
|  |       } | ||||||
|  |     }); | ||||||
|   }, |   }, | ||||||
| 
 | 
 | ||||||
|   onModalReblog (status) { |   onModalReblog (status) { | ||||||
|  |  | ||||||
|  | @ -50,6 +50,8 @@ const messages = defineMessages({ | ||||||
|   revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' }, |   revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' }, | ||||||
|   hideAll: { id: 'status.show_less_all', defaultMessage: 'Show less for all' }, |   hideAll: { id: 'status.show_less_all', defaultMessage: 'Show less for all' }, | ||||||
|   detailedStatus: { id: 'status.detailed_status', defaultMessage: 'Detailed conversation view' }, |   detailedStatus: { id: 'status.detailed_status', defaultMessage: 'Detailed conversation view' }, | ||||||
|  |   replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' }, | ||||||
|  |   replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' }, | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| const makeMapStateToProps = () => { | const makeMapStateToProps = () => { | ||||||
|  | @ -60,6 +62,7 @@ const makeMapStateToProps = () => { | ||||||
|     settings: state.get('local_settings'), |     settings: state.get('local_settings'), | ||||||
|     ancestorsIds: state.getIn(['contexts', 'ancestors', props.params.statusId]), |     ancestorsIds: state.getIn(['contexts', 'ancestors', props.params.statusId]), | ||||||
|     descendantsIds: state.getIn(['contexts', 'descendants', props.params.statusId]), |     descendantsIds: state.getIn(['contexts', 'descendants', props.params.statusId]), | ||||||
|  |     askReplyConfirmation: state.getIn(['compose', 'text']).trim().length !== 0, | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   return mapStateToProps; |   return mapStateToProps; | ||||||
|  | @ -81,6 +84,7 @@ export default class Status extends ImmutablePureComponent { | ||||||
|     ancestorsIds: ImmutablePropTypes.list, |     ancestorsIds: ImmutablePropTypes.list, | ||||||
|     descendantsIds: ImmutablePropTypes.list, |     descendantsIds: ImmutablePropTypes.list, | ||||||
|     intl: PropTypes.object.isRequired, |     intl: PropTypes.object.isRequired, | ||||||
|  |     askReplyConfirmation: PropTypes.bool, | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   state = { |   state = { | ||||||
|  | @ -140,7 +144,16 @@ export default class Status extends ImmutablePureComponent { | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   handleReplyClick = (status) => { |   handleReplyClick = (status) => { | ||||||
|     this.props.dispatch(replyCompose(status, this.context.router.history)); |     let { askReplyConfirmation, dispatch, intl } = this.props; | ||||||
|  |     if (askReplyConfirmation) { | ||||||
|  |       dispatch(openModal('CONFIRM', { | ||||||
|  |         message: intl.formatMessage(messages.replyMessage), | ||||||
|  |         confirm: intl.formatMessage(messages.replyConfirm), | ||||||
|  |         onConfirm: () => dispatch(replyCompose(status, this.context.router.history)), | ||||||
|  |       })); | ||||||
|  |     } else { | ||||||
|  |       dispatch(replyCompose(status, this.context.router.history)); | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   handleModalReblog = (status) => { |   handleModalReblog = (status) => { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue