|
1 |
| -import { ActionType, TasksType, TaskType } from "../types"; |
| 1 | +import { ActionType, TaskType } from "../types"; |
2 | 2 |
|
3 |
| -let taskIdCounter = 1; |
| 3 | +let retrievedId = localStorage.getItem("taskIdCounter"); |
| 4 | +let taskIdCounter = retrievedId ? parseInt(retrievedId, 10) : 1; |
| 5 | + |
| 6 | +const taskReducer = (state: TaskType[], action: ActionType): TaskType[] => { |
| 7 | + let updatedState = state; |
4 | 8 |
|
5 |
| -const taskReducer = (state: TasksType, action: ActionType): TasksType => { |
6 | 9 | switch (action.type) {
|
7 | 10 | case "ADD_TASK":
|
8 | 11 | const newTask: TaskType = {
|
9 |
| - id: taskIdCounter++, |
| 12 | + id: taskIdCounter, |
10 | 13 | name: action.payload.name,
|
11 | 14 | status: "pending",
|
12 | 15 | createdAt: new Date(),
|
13 | 16 | completedAt: null,
|
14 | 17 | };
|
15 | 18 |
|
16 |
| - return [...state, newTask]; |
| 19 | + taskIdCounter++; |
| 20 | + localStorage.setItem("taskIdCounter", JSON.stringify(taskIdCounter)); |
| 21 | + |
| 22 | + updatedState = [...state, newTask]; |
| 23 | + break; |
17 | 24 |
|
18 | 25 | case "MARK_DONE":
|
19 |
| - return state.map((task) => |
| 26 | + updatedState = state.map((task) => |
20 | 27 | task.id === action.payload.id
|
21 | 28 | ? { ...task, status: "done", completedAt: new Date() }
|
22 | 29 | : task
|
23 | 30 | );
|
| 31 | + break; |
24 | 32 |
|
25 | 33 | case "REMOVE_TASK":
|
26 |
| - return state.filter((task) => task.id !== action.payload.id); |
| 34 | + updatedState = state.filter((task) => task.id !== action.payload.id); |
| 35 | + |
| 36 | + if (updatedState.length === 0) { |
| 37 | + taskIdCounter = 1; |
| 38 | + localStorage.setItem("taskIdCounter", "1"); |
| 39 | + } |
| 40 | + break; |
27 | 41 |
|
28 | 42 | default:
|
29 | 43 | return state;
|
30 | 44 | }
|
| 45 | + |
| 46 | + localStorage.setItem("tasks", JSON.stringify(updatedState)); |
| 47 | + return updatedState; |
31 | 48 | };
|
32 | 49 |
|
33 | 50 | export default taskReducer;
|
0 commit comments