Skip to content
Snippets Groups Projects
homework.js 5.79 KiB
Newer Older
  • Learn to ignore specific revisions
  • import axios from './session';
    
    import { GET_TASKS,
      GET_SOLUTIONS,
      ADD_TASK,
    
      DELETE_TASK,
    
      WRITE_TASK,
    
      EDIT_TASK,
      SELECT_TASK,
    
      CLEAR_WRITE,
      ADD_SOLUTION,
      WRITE_SOLUTION,
      WRITE_SOLUTION_FILE,
    
      ADD_DOCUMENT,
      GET_DOCUMENTS,
      CORRECT_SOLUTION,
    
    export const getTasks = () => (
    
      async (dispatch) => {
        try {
          const response = await axios.get('/api/v1/homework/tasks/');
          dispatch({
    
            type: GET_TASKS,
    
            payload: response.data,
          });
        } catch (e) {
          console.log(e);
        }
      }
    );
    
    
    export const getSolutions = taskId => (
    
      async (dispatch) => {
        try {
    
          const response = await axios.get('/api/v1/homework/solutions/', { task: taskId });
    
          dispatch({
            type: GET_SOLUTIONS,
            payload: response.data,
          });
        } catch (e) {
          console.log(e);
        }
      }
    );
    
    
    export const addTask = ({ title, text, deadline }) => (
      async (dispatch) => {
        try {
          const response = await axios.post('/api/v1/homework/tasks/', {
            title,
            text,
            deadline,
          });
          if (response.data.id) {
            dispatch({
              type: ADD_TASK,
              payload: response.data,
            });
          }
        } catch (e) {
          console.log(e);
        }
      }
    );
    
    
    export const editTask = ({
      id,
      title,
      text,
      deadline,
    }) => (
      async (dispatch) => {
        try {
          const response = await axios.patch(`/api/v1/homework/tasks/${id}/`, {
            title,
            text,
            deadline,
          });
          if (response.data.id) {
            dispatch({
              type: EDIT_TASK,
              payload: response.data,
    
            });
          }
        } catch (e) {
          console.log(e);
        }
      }
    );
    
    
    export const deleteTask = task => (
      async (dispatch) => {
        try {
          const response = await axios.delete(`/api/v1/homework/tasks/${task.id}/`);
          if (!response.data.id) {
            dispatch({
              type: DELETE_TASK,
              payload: task,
            });
          }
        } catch (e) {
          console.log(e);
        }
      });
    
    
    export const setSelectedTask = task => (
      (dispatch) => {
        dispatch({ type: SELECT_TASK, payload: task });
      }
    );
    
    
    export const addDocument = ({
      name, description, file, solution,
    
    }) => (
      async (dispatch) => {
        try {
    
          const formData = new FormData();
          formData.append('name', name);
          formData.append('description', description);
          formData.append('file', file);
          formData.append('solution', solution);
          const config = {
            headers: {
              'content-type': 'multipart/form-data',
            },
          };
          const response = await axios.post('/api/v1/documents/', formData, config);
    
          if (response.data.id) {
            dispatch({
    
              payload: response.data,
            });
          }
        } catch (e) {
          console.log(e);
        }
      }
    );
    
    
    export const addSolution = ({
      task, accepted, corrected, note, name, description, file,
    
    }) => (
      async (dispatch) => {
        try {
    
          const response = await axios.post('/api/v1/homework/solutions/', {
            task,
            accepted,
            corrected,
            note,
          });
          if (response.data.id) {
            dispatch({
              type: ADD_SOLUTION,
              payload: response.data,
            });
          }
    
          const solution = response.data.id;
    
    
          const formData = new FormData();
          formData.append('name', name);
          formData.append('description', description);
          formData.append('file', file);
          formData.append('solution', solution);
          const config = {
            headers: {
              'content-type': 'multipart/form-data',
            },
          };
    
          const responsedoc = await axios.post('/api/v1/documents/', formData, config);
          if (responsedoc.data.id) {
    
            dispatch({
              type: ADD_DOCUMENT,
    
            });
          }
        } catch (e) {
          console.log(e);
        }
      }
    );
    
    
    export const getDocuments = (solutionID) => (
    
      async (dispatch) => {
        try {
          const response =
    
          await axios.get('/api/v1/documents', { params: { solution: solutionID } });
    
          dispatch({
            type: GET_DOCUMENTS,
            payload: response.data,
          });
        } catch (e) {
          console.log(e);
        }
      }
    );
    
    
    export const writeSolution = ({ target: { name, value } }) => (
      (dispatch) => {
        dispatch({ type: WRITE_SOLUTION, payload: value, target: name });
      }
    );
    
    export const writeSolutionFile = ({ target: { files } }) => (
      (dispatch) => {
    
        dispatch({ type: WRITE_SOLUTION_FILE, payload: files[0], target: 'file' });
    
      }
    );
    
    export const writeTask = ({ target: { name, value } }) => (
      (dispatch) => {
        dispatch({ type: WRITE_TASK, payload: value, target: name });
      }
    );
    
    export const writeTaskDeadline = ({ name, value }) => (
      (dispatch) => {
        dispatch({ type: WRITE_TASK, payload: value, target: name });
      }
    );
    
    export const clearWrite = () => (
      (dispatch) => {
        dispatch({ type: CLEAR_WRITE });
      }
    );
    
    
    export const getProfiles = () => (
      async (dispatch) => {
        try {
          const response = await axios.get('/api/v1/profiles/');
          dispatch({
            type: GET_PROFILES,
            payload: response.data,
          });
        } catch (e) {
          console.log(e);
        }
      }
    );
    
    
    export const correctSolution = (id, corrected, accepted, note) => (
      async (dispatch) => {
        try {
          const response = await axios.patch(`/api/v1/homework/solutions/${id}/`, {
            corrected,
            accepted,
            note,
          });
          if (response.data.id) {
            dispatch({
              type: CORRECT_SOLUTION,
              payload: response.data,
    
            });
          }
        } catch (e) {
          console.log(e);
        }
      }
    );
    
    
    export const check = name => (
    
        dispatch({ type: CHECK, target: name });
      }
    );
    
    export const selectSolution = solution => (
      (dispatch) => {
        dispatch({
          type: SELECT_SOLUTION,
          payload: solution,
        });