124 lines
2.6 KiB
JavaScript
124 lines
2.6 KiB
JavaScript
/* 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,
|
|
EDIT_DEVICE,
|
|
LOAD_DEVICE_LIST_START,
|
|
LOAD_DEVICE_LIST_ERROR,
|
|
LOAD_DEVICE_LIST_END,
|
|
REMOVE_DEVICE,
|
|
UPDATE_DEVICE_DISPLAYED,
|
|
UPDATE_DEVICE_MODAL,
|
|
} = require("resource://devtools/client/responsive/actions/index.js");
|
|
|
|
const Types = require("resource://devtools/client/responsive/types.js");
|
|
|
|
const INITIAL_DEVICES = {
|
|
isModalOpen: false,
|
|
listState: Types.loadableState.INITIALIZED,
|
|
modalOpenedFromViewport: null,
|
|
types: [],
|
|
};
|
|
|
|
const reducers = {
|
|
[ADD_DEVICE](devices, { device, deviceType }) {
|
|
return {
|
|
...devices,
|
|
[deviceType]: [...devices[deviceType], device],
|
|
};
|
|
},
|
|
|
|
[ADD_DEVICE_TYPE](devices, { deviceType }) {
|
|
return {
|
|
...devices,
|
|
types: [...devices.types, deviceType],
|
|
[deviceType]: [],
|
|
};
|
|
},
|
|
|
|
[EDIT_DEVICE](devices, { oldDevice, newDevice, deviceType }) {
|
|
const index = devices[deviceType].indexOf(oldDevice);
|
|
if (index < 0) {
|
|
return devices;
|
|
}
|
|
|
|
devices[deviceType].splice(index, 1, newDevice);
|
|
|
|
return {
|
|
...devices,
|
|
[deviceType]: [...devices[deviceType]],
|
|
};
|
|
},
|
|
|
|
[UPDATE_DEVICE_DISPLAYED](devices, { device, deviceType, displayed }) {
|
|
const newDevices = devices[deviceType].map(d => {
|
|
if (d == device) {
|
|
d.displayed = displayed;
|
|
}
|
|
|
|
return d;
|
|
});
|
|
|
|
return {
|
|
...devices,
|
|
[deviceType]: newDevices,
|
|
};
|
|
},
|
|
|
|
[LOAD_DEVICE_LIST_START](devices) {
|
|
return {
|
|
...devices,
|
|
listState: Types.loadableState.LOADING,
|
|
};
|
|
},
|
|
|
|
[LOAD_DEVICE_LIST_ERROR](devices) {
|
|
return {
|
|
...devices,
|
|
listState: Types.loadableState.ERROR,
|
|
};
|
|
},
|
|
|
|
[LOAD_DEVICE_LIST_END](devices) {
|
|
return {
|
|
...devices,
|
|
listState: Types.loadableState.LOADED,
|
|
};
|
|
},
|
|
|
|
[REMOVE_DEVICE](devices, { device, deviceType }) {
|
|
const index = devices[deviceType].indexOf(device);
|
|
if (index < 0) {
|
|
return devices;
|
|
}
|
|
|
|
const list = [...devices[deviceType]];
|
|
list.splice(index, 1);
|
|
|
|
return {
|
|
...devices,
|
|
[deviceType]: list,
|
|
};
|
|
},
|
|
|
|
[UPDATE_DEVICE_MODAL](devices, { isOpen, modalOpenedFromViewport }) {
|
|
return {
|
|
...devices,
|
|
isModalOpen: isOpen,
|
|
modalOpenedFromViewport,
|
|
};
|
|
},
|
|
};
|
|
|
|
module.exports = function (devices = INITIAL_DEVICES, action) {
|
|
const reducer = reducers[action.type];
|
|
if (!reducer) {
|
|
return devices;
|
|
}
|
|
return reducer(devices, action);
|
|
};
|