[Glitch] Add missing rejection handling for Promises
Port missing parts from 2c51bc0ca5a4c3a4bb140b4b40dabdda859ebb94 to glitch-soc
This commit is contained in:
		
							parent
							
								
									6b2eefc7bf
								
							
						
					
					
						commit
						a963ea67dd
					
				@ -1,3 +1,10 @@
 | 
				
			|||||||
 | 
					import { defineMessages } from 'react-intl';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const messages = defineMessages({
 | 
				
			||||||
 | 
					  unexpectedTitle: { id: 'alert.unexpected.title', defaultMessage: 'Oops!' },
 | 
				
			||||||
 | 
					  unexpectedMessage: { id: 'alert.unexpected.message', defaultMessage: 'An unexpected error occurred.' },
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const ALERT_SHOW    = 'ALERT_SHOW';
 | 
					export const ALERT_SHOW    = 'ALERT_SHOW';
 | 
				
			||||||
export const ALERT_DISMISS = 'ALERT_DISMISS';
 | 
					export const ALERT_DISMISS = 'ALERT_DISMISS';
 | 
				
			||||||
export const ALERT_CLEAR   = 'ALERT_CLEAR';
 | 
					export const ALERT_CLEAR   = 'ALERT_CLEAR';
 | 
				
			||||||
@ -22,3 +29,21 @@ export function showAlert(title, message) {
 | 
				
			|||||||
    message,
 | 
					    message,
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function showAlertForError(error) {
 | 
				
			||||||
 | 
					  if (error.response) {
 | 
				
			||||||
 | 
					    const { data, status, statusText } = error.response;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let message = statusText;
 | 
				
			||||||
 | 
					    let title   = `${status}`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (data.error) {
 | 
				
			||||||
 | 
					      message = data.error;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return showAlert(title, message);
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    console.error(error);
 | 
				
			||||||
 | 
					    return showAlert(messages.unexpectedTitle, messages.unexpectedMessage);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
import api from 'flavours/glitch/util/api';
 | 
					import api from 'flavours/glitch/util/api';
 | 
				
			||||||
import { CancelToken } from 'axios';
 | 
					import { CancelToken, isCancel } from 'axios';
 | 
				
			||||||
import { throttle } from 'lodash';
 | 
					import { throttle } from 'lodash';
 | 
				
			||||||
import { search as emojiSearch } from 'flavours/glitch/util/emoji/emoji_mart_search_light';
 | 
					import { search as emojiSearch } from 'flavours/glitch/util/emoji/emoji_mart_search_light';
 | 
				
			||||||
import { useEmoji } from './emojis';
 | 
					import { useEmoji } from './emojis';
 | 
				
			||||||
@ -8,6 +8,7 @@ import { recoverHashtags } from 'flavours/glitch/util/hashtag';
 | 
				
			|||||||
import resizeImage from 'flavours/glitch/util/resize_image';
 | 
					import resizeImage from 'flavours/glitch/util/resize_image';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { updateTimeline } from './timelines';
 | 
					import { updateTimeline } from './timelines';
 | 
				
			||||||
 | 
					import { showAlertForError } from './alerts';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let cancelFetchComposeSuggestionsAccounts;
 | 
					let cancelFetchComposeSuggestionsAccounts;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -320,6 +321,10 @@ const fetchComposeSuggestionsAccounts = throttle((dispatch, getState, token) =>
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
  }).then(response => {
 | 
					  }).then(response => {
 | 
				
			||||||
    dispatch(readyComposeSuggestionsAccounts(token, response.data));
 | 
					    dispatch(readyComposeSuggestionsAccounts(token, response.data));
 | 
				
			||||||
 | 
					  }).catch(error => {
 | 
				
			||||||
 | 
					    if (!isCancel(error)) {
 | 
				
			||||||
 | 
					      dispatch(showAlertForError(error));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
}, 200, { leading: true, trailing: true });
 | 
					}, 200, { leading: true, trailing: true });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,5 @@
 | 
				
			|||||||
import api from 'flavours/glitch/util/api';
 | 
					import api from 'flavours/glitch/util/api';
 | 
				
			||||||
 | 
					import { showAlertForError } from './alerts';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const LIST_FETCH_REQUEST = 'LIST_FETCH_REQUEST';
 | 
					export const LIST_FETCH_REQUEST = 'LIST_FETCH_REQUEST';
 | 
				
			||||||
export const LIST_FETCH_SUCCESS = 'LIST_FETCH_SUCCESS';
 | 
					export const LIST_FETCH_SUCCESS = 'LIST_FETCH_SUCCESS';
 | 
				
			||||||
@ -239,7 +240,8 @@ export const fetchListSuggestions = q => (dispatch, getState) => {
 | 
				
			|||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  api(getState).get('/api/v1/accounts/search', { params })
 | 
					  api(getState).get('/api/v1/accounts/search', { params })
 | 
				
			||||||
    .then(({ data }) => dispatch(fetchListSuggestionsReady(q, data)));
 | 
					    .then(({ data }) => dispatch(fetchListSuggestionsReady(q, data)))
 | 
				
			||||||
 | 
					    .catch(error => dispatch(showAlertForError(error)));
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const fetchListSuggestionsReady = (query, accounts) => ({
 | 
					export const fetchListSuggestionsReady = (query, accounts) => ({
 | 
				
			||||||
 | 
				
			|||||||
@ -109,14 +109,11 @@ export function register () {
 | 
				
			|||||||
            pushNotificationsSetting.remove(me);
 | 
					            pushNotificationsSetting.remove(me);
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          try {
 | 
					          return getRegistration()
 | 
				
			||||||
            getRegistration()
 | 
					            .then(getPushSubscription)
 | 
				
			||||||
              .then(getPushSubscription)
 | 
					            .then(unsubscribe);
 | 
				
			||||||
              .then(unsubscribe);
 | 
					        })
 | 
				
			||||||
          } catch (e) {
 | 
					        .catch(console.warn);
 | 
				
			||||||
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      console.warn('Your browser does not support Web Push Notifications.');
 | 
					      console.warn('Your browser does not support Web Push Notifications.');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -137,6 +134,6 @@ export function saveSettings() {
 | 
				
			|||||||
      if (me) {
 | 
					      if (me) {
 | 
				
			||||||
        pushNotificationsSetting.set(me, data);
 | 
					        pushNotificationsSetting.set(me, data);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    });
 | 
					    }).catch(console.warn);
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,6 @@
 | 
				
			|||||||
import api from 'flavours/glitch/util/api';
 | 
					import api from 'flavours/glitch/util/api';
 | 
				
			||||||
import { debounce } from 'lodash';
 | 
					import { debounce } from 'lodash';
 | 
				
			||||||
 | 
					import { showAlertForError } from './alerts';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const SETTING_CHANGE = 'SETTING_CHANGE';
 | 
					export const SETTING_CHANGE = 'SETTING_CHANGE';
 | 
				
			||||||
export const SETTING_SAVE   = 'SETTING_SAVE';
 | 
					export const SETTING_SAVE   = 'SETTING_SAVE';
 | 
				
			||||||
@ -23,7 +24,9 @@ const debouncedSave = debounce((dispatch, getState) => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  const data = getState().get('settings').filter((_, path) => path !== 'saved').toJS();
 | 
					  const data = getState().get('settings').filter((_, path) => path !== 'saved').toJS();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  api(getState).put('/api/web/settings', { data }).then(() => dispatch({ type: SETTING_SAVE }));
 | 
					  api(getState).put('/api/web/settings', { data })
 | 
				
			||||||
 | 
					    .then(() => dispatch({ type: SETTING_SAVE }))
 | 
				
			||||||
 | 
					    .catch(error => dispatch(showAlertForError(error)));
 | 
				
			||||||
}, 5000, { trailing: true });
 | 
					}, 5000, { trailing: true });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function saveSettings() {
 | 
					export function saveSettings() {
 | 
				
			||||||
 | 
				
			|||||||
@ -25,6 +25,7 @@ import { openModal } from 'flavours/glitch/actions/modal';
 | 
				
			|||||||
import { changeLocalSetting } from 'flavours/glitch/actions/local_settings';
 | 
					import { changeLocalSetting } from 'flavours/glitch/actions/local_settings';
 | 
				
			||||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
 | 
					import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
 | 
				
			||||||
import { boostModal, favouriteModal, deleteModal } from 'flavours/glitch/util/initial_state';
 | 
					import { boostModal, favouriteModal, deleteModal } from 'flavours/glitch/util/initial_state';
 | 
				
			||||||
 | 
					import { showAlertForError } from '../actions/alerts';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const messages = defineMessages({
 | 
					const messages = defineMessages({
 | 
				
			||||||
  deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },
 | 
					  deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },
 | 
				
			||||||
@ -134,7 +135,10 @@ const mapDispatchToProps = (dispatch, { intl }) => ({
 | 
				
			|||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onEmbed (status) {
 | 
					  onEmbed (status) {
 | 
				
			||||||
    dispatch(openModal('EMBED', { url: status.get('url') }));
 | 
					    dispatch(openModal('EMBED', {
 | 
				
			||||||
 | 
					      url: status.get('url'),
 | 
				
			||||||
 | 
					      onError: error => dispatch(showAlertForError(error)),
 | 
				
			||||||
 | 
					    }));
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onDelete (status, history, withRedraft = false) {
 | 
					  onDelete (status, history, withRedraft = false) {
 | 
				
			||||||
 | 
				
			|||||||
@ -10,6 +10,7 @@ export default class EmbedModal extends ImmutablePureComponent {
 | 
				
			|||||||
  static propTypes = {
 | 
					  static propTypes = {
 | 
				
			||||||
    url: PropTypes.string.isRequired,
 | 
					    url: PropTypes.string.isRequired,
 | 
				
			||||||
    onClose: PropTypes.func.isRequired,
 | 
					    onClose: PropTypes.func.isRequired,
 | 
				
			||||||
 | 
					    onError: PropTypes.func.isRequired,
 | 
				
			||||||
    intl: PropTypes.object.isRequired,
 | 
					    intl: PropTypes.object.isRequired,
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -35,6 +36,8 @@ export default class EmbedModal extends ImmutablePureComponent {
 | 
				
			|||||||
      iframeDocument.body.style.margin = 0;
 | 
					      iframeDocument.body.style.margin = 0;
 | 
				
			||||||
      this.iframe.width  = iframeDocument.body.scrollWidth;
 | 
					      this.iframe.width  = iframeDocument.body.scrollWidth;
 | 
				
			||||||
      this.iframe.height = iframeDocument.body.scrollHeight;
 | 
					      this.iframe.height = iframeDocument.body.scrollHeight;
 | 
				
			||||||
 | 
					    }).catch(error => {
 | 
				
			||||||
 | 
					      this.props.onError(error);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
import { showAlert } from 'flavours/glitch/actions/alerts';
 | 
					import { showAlertForError } from 'flavours/glitch/actions/alerts';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const defaultFailSuffix = 'FAIL';
 | 
					const defaultFailSuffix = 'FAIL';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -8,21 +8,7 @@ export default function errorsMiddleware() {
 | 
				
			|||||||
      const isFail = new RegExp(`${defaultFailSuffix}$`, 'g');
 | 
					      const isFail = new RegExp(`${defaultFailSuffix}$`, 'g');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (action.type.match(isFail)) {
 | 
					      if (action.type.match(isFail)) {
 | 
				
			||||||
        if (action.error.response) {
 | 
					        dispatch(showAlertForError(action.error));
 | 
				
			||||||
          const { data, status, statusText } = action.error.response;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          let message = statusText;
 | 
					 | 
				
			||||||
          let title   = `${status}`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          if (data.error) {
 | 
					 | 
				
			||||||
            message = data.error;
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          dispatch(showAlert(title, message));
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
          console.error(action.error);
 | 
					 | 
				
			||||||
          dispatch(showAlert('Oops!', 'An unexpected error occurred.'));
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user