diff options
Diffstat (limited to 'modern/src/reducers/index.js')
-rw-r--r-- | modern/src/reducers/index.js | 35 |
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 |