..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); }; PK