Add a confirmation dialog when hitting reply and the compose box isn't empty (#8893)
* Add a confirmation dialog when hitting reply and the compose box isn't empty Fixes #878 * Performance improvement
This commit is contained in:
		
					parent
					
						
							
								028ad4124c
							
						
					
				
			
			
				commit
				
					
						42aecb4c13
					
				
			
		
					 2 changed files with 28 additions and 2 deletions
				
			
		|  | @ -36,6 +36,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? Favourites and boosts will be lost, and replies to the original post will be orphaned.' }, |   redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.' }, | ||||||
|   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 = () => { | ||||||
|  | @ -51,7 +53,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) { | ||||||
|  |  | ||||||
|  | @ -54,6 +54,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 = () => { | ||||||
|  | @ -98,6 +100,7 @@ const makeMapStateToProps = () => { | ||||||
|       status, |       status, | ||||||
|       ancestorsIds, |       ancestorsIds, | ||||||
|       descendantsIds, |       descendantsIds, | ||||||
|  |       askReplyConfirmation: state.getIn(['compose', 'text']).trim().length !== 0, | ||||||
|     }; |     }; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  | @ -119,6 +122,7 @@ 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 = { | ||||||
|  | @ -157,7 +161,16 @@ 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…
	
	Add table
		Add a link
		
	
		Reference in a new issue