diff options
Diffstat (limited to 'devtools/client/responsive.html/reducers/devices.js')
-rw-r--r-- | devtools/client/responsive.html/reducers/devices.js | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/devtools/client/responsive.html/reducers/devices.js b/devtools/client/responsive.html/reducers/devices.js new file mode 100644 index 000000000..e78632b24 --- /dev/null +++ b/devtools/client/responsive.html/reducers/devices.js @@ -0,0 +1,86 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +const { + ADD_DEVICE, + ADD_DEVICE_TYPE, + LOAD_DEVICE_LIST_START, + LOAD_DEVICE_LIST_ERROR, + LOAD_DEVICE_LIST_END, + UPDATE_DEVICE_DISPLAYED, + UPDATE_DEVICE_MODAL_OPEN, +} = require("../actions/index"); + +const Types = require("../types"); + +const INITIAL_DEVICES = { + types: [], + isModalOpen: false, + listState: Types.deviceListState.INITIALIZED, +}; + +let reducers = { + + [ADD_DEVICE](devices, { device, deviceType }) { + return Object.assign({}, devices, { + [deviceType]: [...devices[deviceType], device], + }); + }, + + [ADD_DEVICE_TYPE](devices, { deviceType }) { + return Object.assign({}, devices, { + types: [...devices.types, deviceType], + [deviceType]: [], + }); + }, + + [UPDATE_DEVICE_DISPLAYED](devices, { device, deviceType, displayed }) { + let newDevices = devices[deviceType].map(d => { + if (d == device) { + d.displayed = displayed; + } + + return d; + }); + + return Object.assign({}, devices, { + [deviceType]: newDevices, + }); + }, + + [LOAD_DEVICE_LIST_START](devices, action) { + return Object.assign({}, devices, { + listState: Types.deviceListState.LOADING, + }); + }, + + [LOAD_DEVICE_LIST_ERROR](devices, action) { + return Object.assign({}, devices, { + listState: Types.deviceListState.ERROR, + }); + }, + + [LOAD_DEVICE_LIST_END](devices, action) { + return Object.assign({}, devices, { + listState: Types.deviceListState.LOADED, + }); + }, + + [UPDATE_DEVICE_MODAL_OPEN](devices, { isOpen }) { + return Object.assign({}, devices, { + isModalOpen: isOpen, + }); + }, + +}; + +module.exports = function (devices = INITIAL_DEVICES, action) { + let reducer = reducers[action.type]; + if (!reducer) { + return devices; + } + return reducer(devices, action); +}; |