import { ADD_TODO, DELETE_TODO, EDIT_TODO, COMPLETE_TODO, COMPLETE_ALL, CLEAR_COMPLETED } from '../constants/ActionTypes' | |
const initialState = [] | |
export default function todos(state = initialState, action) { | |
switch (action.type) { | |
case ADD_TODO: | |
return [ | |
...state, | |
{ | |
id: state.reduce((maxId, todo) => Math.max(todo.id, maxId), -1) + 1, | |
completed: false, | |
text: action.text | |
} | |
] | |
case DELETE_TODO: | |
return state.filter(todo => | |
todo.id !== action.id | |
) | |
case EDIT_TODO: | |
return state.map(todo => | |
todo.id === action.id ? | |
{ ...todo, text: action.text } : | |
todo | |
) | |
case COMPLETE_TODO: | |
return state.map(todo => | |
todo.id === action.id ? | |
{ ...todo, completed: !todo.completed } : | |
todo | |
) | |
case COMPLETE_ALL: | |
const areAllMarked = state.every(todo => todo.completed) | |
return state.map(todo => ({ | |
...todo, | |
completed: !areAllMarked | |
})) | |
case CLEAR_COMPLETED: | |
return state.filter(todo => todo.completed === false) | |
default: | |
return state | |
} | |
} |