Home Reference Source

src/sagas/global.js

import { call, put, takeEvery, select } from 'redux-saga/effects';
import { CHANGE_LOCALE, REQUEST_CONFIG } from '../constants/global';
import { requestConfigSuccess, requestConfigFail } from '../actions/global';
import { userLogin } from '../actions/auth';
import { localeSelector } from '../selectors/global';
import fetchSaga from './fetch.js';
import { FETCH_APP_CONFIG } from '../core/api.js';

/**
 * Сага для вызова настроек приложения
 * @param action
 */
export function* getConfig(action) {
  try {
    const params = {
      locale: yield select(localeSelector),
      ...action.payload.params,
    };
    const config = yield call(fetchSaga, FETCH_APP_CONFIG, params);

    if (config.user) {
      yield put(userLogin(config.user));
    }
    yield put(requestConfigSuccess(config));
  } catch (err) {
    // todo: реальная ошибка
    yield put(
      requestConfigFail({
        label: 'Ошибка',
        text: 'Не удалось получить конфигурацию приложения',
        closeButton: false,
        severity: 'danger',
      })
    );
  }
}

/**
 * Сайд-эффекты для global редюсера
 * @ignore
 */
export const globalSagas = [
  takeEvery([REQUEST_CONFIG, CHANGE_LOCALE], getConfig),
];