Skip to content
Snippets Groups Projects
HomeworksReducer.js 1.66 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { GET_TASKS,
      GET_SOLUTIONS,
    
      ADD_TASK,
      DELETE_TASK,
      EDIT_TASK,
      ADD_SOLUTION,
      GET_PROFILES,
      GET_DOCUMENTS } from '../actions/types';
    
    
    const INITIAL_STATE = {
    
      tasks: [],
      solutions: [],
    
    };
    
    
    export default (state = INITIAL_STATE, action) => {
      switch (action.type) {
    
        case GET_TASKS:
    
          return { ...state, tasks: action.payload };
        case GET_SOLUTIONS:
          return { ...state, solutions: action.payload };
    
        case CORRECT_SOLUTION:
          const modifiedSolution = state.solutions.find(sol => sol.id === action.payload.id);
          const modifiedSolutions = state.solutions.slice();
          modifiedSolutions.splice(state.solutions.indexOf(modifiedSolution), 1, action.payload);
          return { ...state, solutions: [...modifiedSolutions] };
    
        case ADD_SOLUTION:
    
          return { ...state, solutions: [action.payload, ...state.solutions], id: action.payload.id };
    
        case ADD_TASK:
    
          return { ...state, tasks: [action.payload, ...state.tasks] };
    
        case DELETE_TASK:
          return {
            ...state,
            tasks: [...state.tasks.slice(0, state.tasks.indexOf(action.payload)),
              ...state.tasks.slice(state.tasks.indexOf(action.payload) + 1)],
          };
    
        case EDIT_TASK:
          return {
            ...state,
            tasks: [...state.tasks.map((task) => {
              if (task.id !== action.payload.id) {
                return task;
              }
              return action.payload;
            }),
            ],
          };
    
        case GET_PROFILES:
          return { ...state, profiles: action.payload };
    
        case GET_DOCUMENTS:
          return { ...state, documents: action.payload };
    
        default:
          return state;
      }
    };