summaryrefslogtreecommitdiff
path: root/frontend/src/reducers/states.js
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/reducers/states.js')
-rw-r--r--frontend/src/reducers/states.js33
1 files changed, 33 insertions, 0 deletions
diff --git a/frontend/src/reducers/states.js b/frontend/src/reducers/states.js
new file mode 100644
index 00000000..793f7b7d
--- /dev/null
+++ b/frontend/src/reducers/states.js
@@ -0,0 +1,33 @@
+import { combineReducers } from "redux";
+import { ADD_BATCH_TO_STATES } from "../actions/states";
+
+export const states = combineReducers({
+ task: objectStates("task"),
+ room: objectStates("room"),
+ rack: objectStates("rack"),
+ machine: objectStates("machine")
+});
+
+function objectStates(type) {
+ return (state = {}, action) => {
+ if (action.objectType !== type) {
+ return state;
+ }
+
+ if (action.type === ADD_BATCH_TO_STATES) {
+ const batch = {};
+ for (let i in action.objects) {
+ batch[action.objects[i].tick] = Object.assign(
+ {},
+ state[action.objects[i].tick],
+ batch[action.objects[i].tick],
+ { [action.objects[i][action.objectType + "Id"]]: action.objects[i] }
+ );
+ }
+
+ return Object.assign({}, state, batch);
+ }
+
+ return state;
+ };
+}