redux-devtools/packages/redux-devtools-slider-monitor/examples/todomvc/reducers/todos.js

57 lines
1.1 KiB
JavaScript
Raw Normal View History

2019-01-10 21:51:14 +03:00
import {
ADD_TODO,
DELETE_TODO,
EDIT_TODO,
MARK_TODO,
MARK_ALL,
CLEAR_MARKED,
2019-01-10 21:51:14 +03:00
} from '../constants/ActionTypes';
2019-01-10 21:51:14 +03:00
const initialState = [
{
text: 'Use Redux',
marked: false,
id: 0,
},
2019-01-10 21:51:14 +03:00
];
export default function todos(state = initialState, action) {
switch (action.type) {
case ADD_TODO:
2019-01-10 21:51:14 +03:00
return [
{
id: state.length === 0 ? 0 : state[0].id + 1,
marked: false,
text: action.text,
2019-01-10 21:51:14 +03:00
},
...state,
2019-01-10 21:51:14 +03:00
];
case DELETE_TODO:
return state.filter((todo) => todo.id !== action.id);
case EDIT_TODO:
return state.map((todo) =>
2019-01-10 21:51:14 +03:00
todo.id === action.id ? { ...todo, text: action.text } : todo
);
case MARK_TODO:
return state.map((todo) =>
2019-01-10 21:51:14 +03:00
todo.id === action.id ? { ...todo, marked: !todo.marked } : todo
);
case MARK_ALL: {
const areAllMarked = state.every((todo) => todo.marked);
return state.map((todo) => ({
...todo,
marked: !areAllMarked,
}));
}
case CLEAR_MARKED:
return state.filter((todo) => todo.marked === false);
default:
return state;
}
}