mirror of
https://github.com/reduxjs/redux-devtools.git
synced 2024-11-23 10:03:53 +03:00
62 lines
1.3 KiB
JavaScript
62 lines
1.3 KiB
JavaScript
|
import {
|
||
|
ADD_TODO,
|
||
|
DELETE_TODO,
|
||
|
EDIT_TODO,
|
||
|
COMPLETE_TODO,
|
||
|
COMPLETE_ALL,
|
||
|
CLEAR_COMPLETED,
|
||
|
} from '../constants/ActionTypes';
|
||
|
|
||
|
const initialState = [
|
||
|
{
|
||
|
text: 'Use Redux',
|
||
|
completed: false,
|
||
|
id: 0,
|
||
|
},
|
||
|
];
|
||
|
|
||
|
export default function todos(state = initialState, action) {
|
||
|
switch (action.type) {
|
||
|
case ADD_TODO:
|
||
|
return [
|
||
|
{
|
||
|
id: state.reduce((maxId, todo) => Math.max(todo.id, maxId), -1) + 1,
|
||
|
completed: false,
|
||
|
text: action.text,
|
||
|
},
|
||
|
...state,
|
||
|
];
|
||
|
|
||
|
case DELETE_TODO:
|
||
|
return state.filter((todo) => todo.id !== action.id);
|
||
|
|
||
|
case EDIT_TODO:
|
||
|
return state.map((todo) =>
|
||
|
todo.id === action.id
|
||
|
? Object.assign({}, todo, { text: action.text })
|
||
|
: todo
|
||
|
);
|
||
|
|
||
|
case COMPLETE_TODO:
|
||
|
return state.map((todo) =>
|
||
|
todo.id === action.id
|
||
|
? Object.assign({}, todo, { completed: !todo.completed })
|
||
|
: todo
|
||
|
);
|
||
|
|
||
|
case COMPLETE_ALL:
|
||
|
const areAllMarked = state.every((todo) => todo.completed);
|
||
|
return state.map((todo) =>
|
||
|
Object.assign({}, todo, {
|
||
|
completed: !areAllMarked,
|
||
|
})
|
||
|
);
|
||
|
|
||
|
case CLEAR_COMPLETED:
|
||
|
return state.filter((todo) => todo.completed === false);
|
||
|
|
||
|
default:
|
||
|
return state;
|
||
|
}
|
||
|
}
|