trc-client-core
Version:
The core of the TRC Client
104 lines (85 loc) • 2.97 kB
JavaScript
import reflux from 'reflux';
import xhr from 'trc-client-core/src/utils/xhr';
import {courses} from 'trc-client-core/src/utils/Request';
import createRequestActions from 'trc-client-core/src/utils/createRequestActions';
import {createAction} from 'redux-actions';
import {
COURSE_PARTICIPATION_ENDPOINT,
COURSE_SCORM_DATA_ENDPOINT,
COURSE_ENDPOINT
} from 'trc-client-core/src/constants/Endpoints';
import {
COURSE_PARTICIPATION_FETCH,
COURSE_PARTICIPATION_RECEIVE,
COURSE_PARTICIPATION_ERROR,
COURSE_FETCH,
COURSE_RECEIVE,
COURSE_ERROR,
COURSE_LIST_FETCH,
COURSE_LIST_RECEIVE,
COURSE_LIST_ERROR,
COURSE_SIMILAR_FETCH,
COURSE_SIMILAR_RECEIVE,
COURSE_SIMILAR_ERROR,
COURSE_DELETE_SCORM_SAVE_DATA_FETCH,
COURSE_DELETE_SCORM_SAVE_DATA_RECEIVE,
COURSE_DELETE_SCORM_SAVE_DATA_ERROR
} from 'trc-client-core/src/constants/ActionTypes';
//
// Reflux
//
var CourseActions = reflux.createActions({
'publish': {asyncResult: true},
'fetchCourse': {asyncResult: true},
'fetchCourses': {asyncResult: true},
'fetchParticipation': {asyncResult: true}
});
CourseActions.publish.listenAndPromise(course => xhr.post('/api/course/publish/' + course.id));
CourseActions.fetchCourses.listenAndPromise(query => xhr.get('/api/course/', query));
CourseActions.fetchCourse.listenAndPromise((courseCode, query) => xhr.get(COURSE_ENDPOINT + courseCode, query));
CourseActions.fetchParticipation.listenAndPromise(query => {
if (query.participantId) {
return xhr.get('/api/course_participation', {
...query,
withEligibility: true
});
}
return Promise.reject(new Error('Course Participantion requires a participantId'));
});
//
// Redux
//
CourseActions.requestCourseList = createRequestActions(
COURSE_LIST_FETCH,
COURSE_LIST_RECEIVE,
COURSE_LIST_ERROR,
courses.list
)
CourseActions.requestCourse = createRequestActions(
COURSE_FETCH,
COURSE_RECEIVE,
COURSE_ERROR,
courses.get
);
CourseActions.requestCourseListSimilar = createRequestActions(
COURSE_SIMILAR_FETCH,
COURSE_SIMILAR_RECEIVE,
COURSE_SIMILAR_ERROR,
(query) => xhr.get('/api/course/similarcourses', query)
);
CourseActions.courseParticipationRequest = (query) => (dispatch) => {
if(query.participantId) {
dispatch(createAction(COURSE_PARTICIPATION_FETCH)());
return xhr.get(COURSE_PARTICIPATION_ENDPOINT, query).then(
(data) => Promise.resolve(dispatch(createAction(COURSE_PARTICIPATION_RECEIVE)(data))),
(error) => Promise.reject(dispatch(createAction(COURSE_PARTICIPATION_ERROR)(error)))
)
}
}
CourseActions.courseDeleteScormSaveData = createRequestActions(
COURSE_DELETE_SCORM_SAVE_DATA_FETCH,
COURSE_DELETE_SCORM_SAVE_DATA_RECEIVE,
COURSE_DELETE_SCORM_SAVE_DATA_ERROR,
query => xhr.get(COURSE_SCORM_DATA_ENDPOINT, query)
);
module.exports = CourseActions;