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
					
				| 
						 | 
				
			
			@ -36,6 +36,8 @@ const messages = defineMessages({
 | 
			
		|||
  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.' },
 | 
			
		||||
  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 = () => {
 | 
			
		||||
| 
						 | 
				
			
			@ -51,7 +53,18 @@ const makeMapStateToProps = () => {
 | 
			
		|||
const mapDispatchToProps = (dispatch, { intl }) => ({
 | 
			
		||||
 | 
			
		||||
  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) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,6 +54,8 @@ const messages = defineMessages({
 | 
			
		|||
  revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' },
 | 
			
		||||
  hideAll: { id: 'status.show_less_all', defaultMessage: 'Show less for all' },
 | 
			
		||||
  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 = () => {
 | 
			
		||||
| 
						 | 
				
			
			@ -98,6 +100,7 @@ const makeMapStateToProps = () => {
 | 
			
		|||
      status,
 | 
			
		||||
      ancestorsIds,
 | 
			
		||||
      descendantsIds,
 | 
			
		||||
      askReplyConfirmation: state.getIn(['compose', 'text']).trim().length !== 0,
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -119,6 +122,7 @@ class Status extends ImmutablePureComponent {
 | 
			
		|||
    ancestorsIds: ImmutablePropTypes.list,
 | 
			
		||||
    descendantsIds: ImmutablePropTypes.list,
 | 
			
		||||
    intl: PropTypes.object.isRequired,
 | 
			
		||||
    askReplyConfirmation: PropTypes.bool,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  state = {
 | 
			
		||||
| 
						 | 
				
			
			@ -157,7 +161,16 @@ class Status extends ImmutablePureComponent {
 | 
			
		|||
  }
 | 
			
		||||
 | 
			
		||||
  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) => {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue