match-curriculum / react-todo-app-starter-files / src / slices / todoSlice.js
todoSlice.js
Raw
import { createSlice } from '@reduxjs/toolkit';

const getInitalTodo = () => {
  const localtodolist = window.localStorage.getItem('todoList');
  if (localtodolist) {
    return JSON.parse(localtodolist);
  }
  window.localStorage.setItem('todoList', JSON.stringify([]));
  return [];
};

const initialValue = {
  filterStatus: 'all',
  filterTT: '',
  todoList: getInitalTodo(),
};

export const todoSlice = createSlice({
  name: 'todo',
  initialState: initialValue,
  reducers: {
    addTodo: (state, action) => {
      state.todoList.push(action.payload);
      const todoList = window.localStorage.getItem('todoList');
      if (todoList) {
        const todoListArr = JSON.parse(todoList);
        todoListArr.push({ ...action.payload });
        window.localStorage.setItem('todoList', JSON.stringify(todoListArr));
      } else {
        window.localStorage.setItem(
          'todoList',
          JSON.stringify([{ ...action.payload }])
        );
      }
    },
    deleteTodo: (state, action) => {
      const todoList = window.localStorage.getItem('todoList');
      if (todoList) {
        const todoListArr = JSON.parse(todoList);
        todoListArr.forEach((todo, index) => {
          if (todo.id === action.payload) {
            todoListArr.splice(index, 1);
          }
        });
        window.localStorage.setItem('todoList', JSON.stringify(todoListArr));
        state.todoList = todoListArr;
      }
    },
    updateTodo: (state, action) => {
      const todoList = window.localStorage.getItem('todoList');
      if (todoList) {
        const todoListArr = JSON.parse(todoList);
        todoListArr.forEach((todo, index) => {
          if (todo.id === action.payload.id) {
            todo.title = action.payload.title;
            todo.tasktype = action.payload.tasktype;
            todo.status = action.payload.status;
          }
        });
        window.localStorage.setItem('todoList', JSON.stringify(todoListArr));
        state.todoList = todoListArr;
      }
    },
    updateStatusFilter: (state, action) => {
      state.filterStatus = action.payload;
    },
    updateTTFilter: (state, action) => {
      state.filterTT = action.payload;
    },
  },
});

export const {
  addTodo,
  deleteTodo,
  updateTodo,
  updateStatusFilter,
  updateTTFilter,
} = todoSlice.actions;
export default todoSlice.reducer;