UNPKG

trc-client-core

Version:
83 lines (71 loc) 2.65 kB
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; } }