46 lines
1.1 KiB
TypeScript
46 lines
1.1 KiB
TypeScript
import type { Task, TaskAction, TaskState } from './types';
|
|
|
|
export const initialState: TaskState = {
|
|
tasks: [],
|
|
loading: false,
|
|
error: null,
|
|
};
|
|
|
|
export const taskReducer = (
|
|
state: TaskState,
|
|
action: TaskAction,
|
|
): TaskState => {
|
|
switch (action.type) {
|
|
case 'set-tasks':
|
|
return { ...state, tasks: action.payload, loading: false };
|
|
case 'add-task':
|
|
return {
|
|
...state,
|
|
tasks: [...state.tasks, action.payload],
|
|
loading: false,
|
|
};
|
|
case 'update-task':
|
|
const { id, ...payload } = action.payload;
|
|
|
|
return {
|
|
...state,
|
|
tasks: state.tasks.map((task) =>
|
|
task.id === id ? { ...task, ...payload } : task,
|
|
),
|
|
loading: false,
|
|
};
|
|
case 'remove-task':
|
|
return {
|
|
...state,
|
|
tasks: state.tasks.filter((task) => task.id !== action.payload),
|
|
loading: false,
|
|
};
|
|
case 'set-loading':
|
|
return { ...state, loading: action.payload };
|
|
case 'set-error':
|
|
return { ...state, error: action.payload, loading: false };
|
|
default:
|
|
return state;
|
|
}
|
|
};
|