trc-client-core
Version:
The core of the TRC Client
83 lines (71 loc) • 2.65 kB
JavaScript
import createRequestActions from 'trc-client-core/src/utils/createRequestActions';
import {Map, OrderedMap, fromJS} from 'immutable';
import {prerequisite, courses} from 'trc-client-core/src/utils/Request';
import {parsePrerequisite, stringifyPrerequisite} from 'trc-client-core/src/course/Prerequisite';
const GET_FETCH = 'trc/prerequisite/GET_FETCH';
const GET_RECEIVE = 'trc/prerequisite/GET_RECEIVE';
const GET_ERROR = 'trc/prerequisite/GET_ERROR';
const UPDATE_FETCH = 'trc/prerequisite/UPDATE_FETCH';
const UPDATE_RECEIVE = 'trc/prerequisite/UPDATE_RECEIVE';
const UPDATE_ERROR = 'trc/prerequisite/UPDATE_ERROR';
export const requestPrerequisiteGet = createRequestActions(
GET_FETCH,
GET_RECEIVE,
GET_ERROR,
(query) => {
return prerequisite
.get(query)
.then(
(prereq) => {
return Promise
.all(prereq.prerequisiteCourses.map(courses.get))
.then(cc => {
return {
...prereq,
prerequisiteCourses: cc
}
})
},
(error) => {
return Promise.reject(new Error(error.message));
}
);
}
);
export const requestPrerequisiteUpdate = createRequestActions(
UPDATE_FETCH,
UPDATE_RECEIVE,
UPDATE_ERROR,
(course) => prerequisite.update(course.courseCode, {
courseCode: course.courseCode,
condtionAction: (course.type === 'CERTIFICATION' || course.type === 'ACHIEVEMENT' ) ? 'MARK_AS_COMPLETE' : 'ALLOW_TO_START',
prerequisite: parsePrerequisite(course.prerequisiteExpression)
})
);
const initialState = Map({
fetching: false,
collection: OrderedMap({})
});
export default function prerequisiteReducer(state = initialState, action = {}) {
var {payload, type} = action;
switch (type) {
case GET_FETCH:
return state
.set('fetching', true);
case GET_ERROR:
case UPDATE_ERROR:
return state
.set('fetching', false)
.set('error', action.payload);
case GET_RECEIVE:
const newState = fromJS(payload)
.set('expression', stringifyPrerequisite(payload.prerequisite));
return state
.set('fetching', false)
.setIn(['collection', payload.courseCode], newState);
case UPDATE_RECEIVE:
return state;
default:
return state;
}
}