aboutsummaryrefslogtreecommitdiff
path: root/modern/src/reducers/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'modern/src/reducers/index.js')
-rw-r--r--modern/src/reducers/index.js35
1 files changed, 35 insertions, 0 deletions
diff --git a/modern/src/reducers/index.js b/modern/src/reducers/index.js
new file mode 100644
index 0000000..752a4c3
--- /dev/null
+++ b/modern/src/reducers/index.js
@@ -0,0 +1,35 @@
+const initialState = {
+ devices: new Map(),
+ positions: new Map()
+};
+
+function updateMap(map, array, key) {
+ for (let value of array) {
+ map.set(value[key], value);
+ }
+ return map;
+}
+
+function rootReducer(state = initialState, action) {
+ switch (action.type) {
+ case 'UPDATE_DEVICES':
+ return Object.assign({}, {
+ ...state,
+ devices: updateMap(state.devices, action.devices, 'id')
+ });
+ case 'UPDATE_POSITIONS':
+ return Object.assign({}, {
+ ...state,
+ positions: updateMap(state.positions, action.positions, 'deviceId')
+ });
+ case 'SELECT_DEVICE':
+ return Object.assign({}, {
+ ...state,
+ selectedDevice: action.device.id
+ });
+ default:
+ return state;
+ }
+}
+
+export default rootReducer