/ common / features / rates / sagas.ts
sagas.ts
 1  import { SagaIterator } from 'redux-saga';
 2  import { call, put, takeLatest } from 'redux-saga/effects';
 3  
 4  import { fetchRates, CCResponse } from 'api/rates';
 5  import * as types from './types';
 6  import * as actions from './actions';
 7  
 8  export function* fetchRatesSaga(action: types.FetchCCRatesRequested): SagaIterator {
 9    try {
10      const rates: CCResponse = yield call(fetchRates, action.payload);
11      yield put(actions.fetchCCRatesSucceeded(rates));
12    } catch (e) {
13      console.error('Failed to fetch rates:', e);
14      yield put(actions.fetchCCRatesFailed());
15      return;
16    }
17  }
18  
19  export function* ratesSaga(): SagaIterator {
20    yield takeLatest(types.RatesActions.CC_REQUESTED, fetchRatesSaga);
21  }