trc-client-core
Version:
The core of the TRC Client
55 lines (45 loc) • 1.45 kB
JavaScript
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;
}
}