Advertisement
Guest User

Untitled

a guest
Jul 19th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import _ from 'lodash';
  2. import {
  3.   actionTypes,
  4.   updateResults,
  5.   updateEntities,
  6. } from '@digitalwing.co/redux-query-immutable';
  7. import { toast, token } from 'helpers';
  8. import Immutable from 'immutable';
  9. import { store } from '../configureStore';
  10. import i18n from '../i18next';
  11.  
  12. const termsErrorMessage = 'user didn\'t confirm the latest terms version';
  13.  
  14. /**
  15.  * Если прилетела 401, удаляем токен и юзера из редакса, что перекинет нас на авторизацию.
  16.  * Если запрос произошел с ошибкой, отображает тостер с текстом ошибки.
  17.  * Тоаст можно отключить, передав параметр meta.withoutErrorToast: true.
  18.  * Ключ ошибки для i18n передается в конфиге в поле meta.errorKey.
  19.  * Если передан meta.errorCallback, он будет вызван.
  20.  *
  21.  * @return {void}
  22.  */
  23. export default () => next => (action) => {
  24.   if (action.type === actionTypes.REQUEST_FAILURE) {
  25.     if (action.status === 401
  26.       || (action.status === 400 && action.queryKey === 'https://users.empo.io/u')) {
  27.       toast.error(i18n.t('API_ERRORS.SESSION'));
  28.       store.dispatch(updateEntities({ user: Immutable.Map() }));
  29.       store.dispatch(updateResults({ user: '' }));
  30.       token.removeToken();
  31.     } else {
  32.       if (action.status === 403 && _.get(action, 'responseBody.data.message') === termsErrorMessage) {
  33.         store.dispatch(updateResults({ isTermsAccept: false }));
  34.       } else if (!action.meta.withoutErrorToast) {
  35.         toast.error(
  36.           i18n.t(`API_ERRORS.${action.meta.errorKey}`,
  37.             { defaultValue: i18n.t('API_ERRORS.BASIC'), ...(action.meta.errorParams || {}) }),
  38.         );
  39.       }
  40.  
  41.       const { errorCallback } = action.meta;
  42.  
  43.       if (errorCallback && _.isFunction(errorCallback)) {
  44.         errorCallback(action.responseBody);
  45.       }
  46.     }
  47.   }
  48.  
  49.   return next(action);
  50. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement