summaryrefslogtreecommitdiffstats
path: root/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/react-redux/src/reducers/todos.js
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/react-redux/src/reducers/todos.js')
-rw-r--r--third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/react-redux/src/reducers/todos.js49
1 files changed, 49 insertions, 0 deletions
diff --git a/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/react-redux/src/reducers/todos.js b/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/react-redux/src/reducers/todos.js
new file mode 100644
index 0000000000..84d982664d
--- /dev/null
+++ b/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/react-redux/src/reducers/todos.js
@@ -0,0 +1,49 @@
+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
+ }
+}