/ common / features / rates / reducer.ts
reducer.ts
 1  import * as types from './types';
 2  
 3  export const INITIAL_STATE: types.RatesState = {
 4    rates: {},
 5    ratesError: null
 6  };
 7  
 8  function fetchCCRatesSucceeded(
 9    state: types.RatesState,
10    action: types.FetchCCRatesSucceeded
11  ): types.RatesState {
12    return {
13      ...state,
14      rates: {
15        ...state.rates,
16        ...action.payload
17      }
18    };
19  }
20  
21  function fetchCCRatesFailed(state: types.RatesState): types.RatesState {
22    // TODO: Make library for error messages
23    return {
24      ...state,
25      ratesError: 'Sorry. We were unable to fetch equivalent rates.'
26    };
27  }
28  
29  export function ratesReducer(
30    state: types.RatesState = INITIAL_STATE,
31    action: types.RatesAction
32  ): types.RatesState {
33    switch (action.type) {
34      case types.RatesActions.CC_SUCCEEDED:
35        return fetchCCRatesSucceeded(state, action);
36      case types.RatesActions.CC_FAILED:
37        return fetchCCRatesFailed(state);
38      default:
39        return state;
40    }
41  }