shierro/territory-manager

View on GitHub
app/reducers.js

Summary

Maintainability
A
0 mins
Test Coverage
/**
 * Combine all reducers in this file and export the combined reducers.
 */

import { combineReducers } from 'redux-immutable';
import { fromJS } from 'immutable';
import { LOCATION_CHANGE } from 'react-router-redux';

import languageProviderReducer from 'containers/LanguageProvider/reducer';
import mapPageReducer from 'containers/MapPage/reducer';
import loginPageReducer from 'containers/LoginPage/reducer';
import peopleListPageReducer from 'containers/PeopleListPage/reducer';
import placementsPageReducer from 'containers/PlacementsPage/reducer';
/*
 * routeReducer
 *
 * The reducer merges route location changes into our immutable state.
 * The change is necessitated by moving to react-router-redux@4
 *
 */

// Initial routing state
const routeInitialState = fromJS({ location: null });

/**
 * Merge route into the global application state
 */
export function routeReducer(state = routeInitialState, action) {
  switch (action.type) {
    /* istanbul ignore next */
    case LOCATION_CHANGE:
      return state.merge({
        location: action.payload,
      });
    default:
      return state;
  }
}

export function rehydrateReducer(state = false, action) {
  switch (action.type) {
    /* istanbul ignore next */
    case 'REHYDRATE_STORE':
      return true;
    default:
      return state;
  }
}

/**
 * Creates the main reducer with the dynamically injected ones
 */
export default function createReducer(injectedReducers) {
  return combineReducers({
    mapPage: mapPageReducer,
    peopleListPage: peopleListPageReducer,
    loginPage: loginPageReducer,
    placementsPage: placementsPageReducer,
    rehydrate: rehydrateReducer,
    route: routeReducer,
    language: languageProviderReducer,
    ...injectedReducers,
  });
}