62 lines
1.6 KiB
JavaScript
62 lines
1.6 KiB
JavaScript
import { ADD_TASK, ADD_CDB_TASK, TOGGLE_COMPLETED } from "../actionTypes";
|
|
|
|
import { v4 as uuidv4 } from "uuid";
|
|
|
|
const initialState = { tasks: [] };
|
|
|
|
export default function taskReducer(state = initialState, action) {
|
|
switch (action.type) {
|
|
// Used when task is added during session but not committed to cloud
|
|
case ADD_TASK: {
|
|
return {
|
|
...state,
|
|
tasks: [
|
|
...state.tasks,
|
|
{
|
|
taskId: action.taskId,
|
|
taskName: action.taskName,
|
|
description: action.description,
|
|
status: action.status,
|
|
parentIds: action.parentIds,
|
|
completed: action.completed,
|
|
},
|
|
],
|
|
};
|
|
}
|
|
// Used during initial synchronization of the local storage using cloud data
|
|
// a local pouchdb database is also created into which task commits can be done
|
|
// during initialization of the database
|
|
case ADD_CDB_TASK: {
|
|
return {
|
|
...state,
|
|
tasks: [
|
|
...state.tasks,
|
|
{
|
|
_id: action.task.taskId,
|
|
taskId: action.task.taskId,
|
|
taskName: action.task.taskName,
|
|
description: action.task.description,
|
|
status: action.task.status,
|
|
parentIds: action.task.parentIds,
|
|
completed: action.task.completed,
|
|
},
|
|
],
|
|
};
|
|
}
|
|
// Toggle completed
|
|
case TOGGLE_COMPLETED: {
|
|
console.log(action.id);
|
|
return {
|
|
...state,
|
|
tasks: state.tasks.map((task) =>
|
|
task.taskId === action.id
|
|
? { ...task, completed: !task.completed }
|
|
: task
|
|
),
|
|
};
|
|
}
|
|
default:
|
|
return state;
|
|
}
|
|
}
|