Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import _ from 'lodash';
- import {
- actionTypes,
- updateResults,
- updateEntities,
- } from '@digitalwing.co/redux-query-immutable';
- import { toast, token } from 'helpers';
- import Immutable from 'immutable';
- import { store } from '../configureStore';
- import i18n from '../i18next';
- const termsErrorMessage = 'user didn\'t confirm the latest terms version';
- /**
- * Если прилетела 401, удаляем токен и юзера из редакса, что перекинет нас на авторизацию.
- * Если запрос произошел с ошибкой, отображает тостер с текстом ошибки.
- * Тоаст можно отключить, передав параметр meta.withoutErrorToast: true.
- * Ключ ошибки для i18n передается в конфиге в поле meta.errorKey.
- * Если передан meta.errorCallback, он будет вызван.
- *
- * @return {void}
- */
- export default () => next => (action) => {
- if (action.type === actionTypes.REQUEST_FAILURE) {
- if (action.status === 401
- || (action.status === 400 && action.queryKey === 'https://users.empo.io/u')) {
- toast.error(i18n.t('API_ERRORS.SESSION'));
- store.dispatch(updateEntities({ user: Immutable.Map() }));
- store.dispatch(updateResults({ user: '' }));
- token.removeToken();
- } else {
- if (action.status === 403 && _.get(action, 'responseBody.data.message') === termsErrorMessage) {
- store.dispatch(updateResults({ isTermsAccept: false }));
- } else if (!action.meta.withoutErrorToast) {
- toast.error(
- i18n.t(`API_ERRORS.${action.meta.errorKey}`,
- { defaultValue: i18n.t('API_ERRORS.BASIC'), ...(action.meta.errorParams || {}) }),
- );
- }
- const { errorCallback } = action.meta;
- if (errorCallback && _.isFunction(errorCallback)) {
- errorCallback(action.responseBody);
- }
- }
- }
- return next(action);
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement