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((_, 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));
 | 
					        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
		
		Reference in a new issue