Skip to content
Snippets Groups Projects
todoSlice.ts 1.01 KiB
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
import { ToDo } from "../models/ToDo";

const initialState = [] as ToDo[];

const todoSlice = createSlice({
  name: "todos",
  initialState,
  reducers: {
    addTodo: {
      reducer: (state, action: PayloadAction<ToDo>) => {
        state.push(action.payload);
      },
      prepare: (description: string) => ({
        payload: {
          id: Date.now(),
          description,
          completed: false,
        } as ToDo,
      }),
    },
    removeTodo(state, action: PayloadAction<number>) {
      const index = state.findIndex((todo) => todo.id === action.payload);
      state.splice(index, 1);
    },
    setTodoStatus(
      state,
      action: PayloadAction<{ completed: boolean; id: number }>
    ) {
      const index = state.findIndex((todo) => todo.id === action.payload.id);
      state[index].completed = action.payload.completed;
    },
  },
});

export const { addTodo, removeTodo, setTodoStatus } = todoSlice.actions;
export default todoSlice.reducer;