WikiEducationFoundation/WikiEduDashboard

View on GitHub
app/assets/javascripts/actions/course_creation_actions.js

Summary

Maintainability
B
5 hrs
Test Coverage
F
19%
import API from '../utils/api.js';
import request from '../utils/request';
import logErrorMessage from '../utils/log_error_message';

import { RECEIVE_INITIAL_CAMPAIGN, CREATED_COURSE, RECEIVE_COURSE_CLONE, API_FAIL } from '../constants';

const fetchCampaignPromise = async (slug) => {
  const response = await request(`/campaigns/${slug}.json`);
  if (!response.ok) {
    logErrorMessage(response);
    const data = await response.text();
    response.responseText = data;
    throw response;
  }
  return response.json();
};

export const fetchCampaign = slug => (dispatch) => {
  return fetchCampaignPromise(slug)
    .then(resp => dispatch({ type: RECEIVE_INITIAL_CAMPAIGN, data: resp }))
    .catch(resp => dispatch({ type: API_FAIL, data: resp }));
};

export const submitCourse = (course, failureCallback) => (dispatch) => {
  return API.saveCourse(course, null)
    .then(resp => dispatch({ type: CREATED_COURSE, data: resp }))
    .catch((resp) => {
      failureCallback();
      dispatch({ type: API_FAIL, data: resp });
    });
};

export const cloneCourse = (courseId, campaign, copyAssignments) => (dispatch) => {
  return API.cloneCourse(courseId, campaign, copyAssignments)
    .then(resp => dispatch({ type: RECEIVE_COURSE_CLONE, data: resp }))
    .catch(resp => dispatch({ type: API_FAIL, data: resp }));
};