UNPKG

trc-client-core

Version:
55 lines (45 loc) 1.45 kB
import { COURSE_ERROR, COURSE_FETCH, COURSE_RECEIVE, COURSE_SIMILAR_ERROR, COURSE_SIMILAR_FETCH, COURSE_SIMILAR_RECEIVE, COURSE_LIST_FETCH, COURSE_LIST_RECEIVE, COURSE_LIST_ERROR } from 'trc-client-core/src/constants/ActionTypes'; import {Map, OrderedMap, fromJS} from 'immutable'; const initialState = Map({ fetching: false, collection: OrderedMap({}) }); function reduceToOrderedMap(payload) { return fromJS(payload) .reduce((reduction, item) => reduction.set(item.get('courseCode'), item), OrderedMap()); } export default function course(state = initialState, action) { switch (action.type) { case COURSE_FETCH: case COURSE_LIST_FETCH: case COURSE_SIMILAR_FETCH: return state .set('fetching', true); case COURSE_ERROR: case COURSE_LIST_ERROR: case COURSE_SIMILAR_ERROR: return state .set('fetching', false) .set('error', action.payload); case COURSE_RECEIVE: return state .setIn(['collection', action.payload.courseCode], fromJS(action.payload)) .set('fetching', false); case COURSE_LIST_RECEIVE: case COURSE_SIMILAR_RECEIVE: return state .mergeDeepIn(['collection'], reduceToOrderedMap(action.payload)); default: return state; } }