From 54933ef3fd5e74d009bd3fd2b731f8f8a6f2e33b Mon Sep 17 00:00:00 2001 From: Sandro Mani Date: Sat, 8 Oct 2016 00:13:03 +0200 Subject: [PATCH 1/2] Add removeLayer action --- web/client/actions/layers.js | 12 ++++++++++-- web/client/reducers/layers.js | 19 ++++++++++++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/web/client/actions/layers.js b/web/client/actions/layers.js index d55d4ae998..39a09d2381 100644 --- a/web/client/actions/layers.js +++ b/web/client/actions/layers.js @@ -17,6 +17,7 @@ const LAYER_LOAD = 'LAYER_LOAD'; const LAYER_ERROR = 'LAYER_ERROR'; const INVALID_LAYER = 'INVALID_LAYER'; const ADD_LAYER = 'ADD_LAYER'; +const REMOVE_LAYER = 'REMOVE_LAYER'; const SHOW_SETTINGS = 'SHOW_SETTINGS'; const HIDE_SETTINGS = 'HIDE_SETTINGS'; const UPDATE_SETTINGS = 'UPDATE_SETTINGS'; @@ -132,6 +133,13 @@ function addLayer(layer) { }; } +function removeLayer(layerId) { + return { + type: REMOVE_LAYER, + layerId: layerId + }; +} + function invalidLayer(layerType, options) { return { type: INVALID_LAYER, @@ -218,9 +226,9 @@ function getLayerCapabilities(layer, options) { module.exports = {changeLayerProperties, changeGroupProperties, toggleNode, sortNode, removeNode, invalidLayer, - updateNode, layerLoading, layerLoad, layerError, addLayer, showSettings, hideSettings, updateSettings, + updateNode, layerLoading, layerLoad, layerError, addLayer, removeLayer, showSettings, hideSettings, updateSettings, getDescribeLayer, getLayerCapabilities, CHANGE_LAYER_PROPERTIES, CHANGE_GROUP_PROPERTIES, TOGGLE_NODE, SORT_NODE, - REMOVE_NODE, UPDATE_NODE, LAYER_LOADING, LAYER_LOAD, LAYER_ERROR, ADD_LAYER, + REMOVE_NODE, UPDATE_NODE, LAYER_LOADING, LAYER_LOAD, LAYER_ERROR, ADD_LAYER, REMOVE_LAYER, SHOW_SETTINGS, HIDE_SETTINGS, UPDATE_SETTINGS, INVALID_LAYER }; diff --git a/web/client/reducers/layers.js b/web/client/reducers/layers.js index 371b8e910a..56dd093296 100644 --- a/web/client/reducers/layers.js +++ b/web/client/reducers/layers.js @@ -7,7 +7,7 @@ */ var {LAYER_LOADING, LAYER_LOAD, LAYER_ERROR, CHANGE_LAYER_PROPERTIES, CHANGE_GROUP_PROPERTIES, - TOGGLE_NODE, SORT_NODE, REMOVE_NODE, UPDATE_NODE, ADD_LAYER, + TOGGLE_NODE, SORT_NODE, REMOVE_NODE, UPDATE_NODE, ADD_LAYER, REMOVE_LAYER, SHOW_SETTINGS, HIDE_SETTINGS, UPDATE_SETTINGS, INVALID_LAYER } = require('../actions/layers'); @@ -264,6 +264,23 @@ function layers(state = [], action) { groups: newGroups }; } + case REMOVE_LAYER: { + let layer = head((state.flat || []).filter(obj => obj.id === action.layerId)); + let groupName = layer && layer.group ? layer.group : 'Default'; + let newLayers = (state.flat || []).filter(lyr => lyr.id !== action.layerId); + let newGroups = (state.groups || []).concat(); + let gidx = newGroups.findIndex(entry => entry.id === groupName); + if (gidx >= 0) { + let newGroup = assign({}, newGroups[gidx]); + let nidx = newGroup.nodes.indexOf(action.layerId); + newGroup.nodes = [...newGroup.nodes.slice(0, nidx), ...newGroup.nodes.slice(nidx + 1)]; + newGroups[gidx] = newGroup; + } + return { + flat: newLayers, + groups: newGroups + }; + } case SHOW_SETTINGS: { let settings = assign({}, state.settings, { expanded: true, From e42dcc7f71f2685432e14277efe4de9c036e62ca Mon Sep 17 00:00:00 2001 From: Sandro Mani Date: Mon, 17 Oct 2016 19:27:51 +0200 Subject: [PATCH 2/2] Add unit tests for removeLayer action --- web/client/actions/__tests__/layers-test.js | 11 +++++ web/client/reducers/__tests__/layers-test.js | 44 ++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/web/client/actions/__tests__/layers-test.js b/web/client/actions/__tests__/layers-test.js index f1c1c128c2..1e92923d4e 100644 --- a/web/client/actions/__tests__/layers-test.js +++ b/web/client/actions/__tests__/layers-test.js @@ -17,6 +17,7 @@ var { LAYER_LOAD, LAYER_ERROR, ADD_LAYER, + REMOVE_LAYER, SHOW_SETTINGS, HIDE_SETTINGS, UPDATE_SETTINGS, @@ -29,6 +30,7 @@ var { layerLoad, layerError, addLayer, + removeLayer, showSettings, hideSettings, updateSettings @@ -127,6 +129,15 @@ describe('Test correctness of the layers actions', () => { expect(retval.layer).toBe(testVal); }); + it('remove layer', () => { + const testVal = 'layerid1'; + const retval = removeLayer(testVal); + + expect(retval).toExist(); + expect(retval.type).toBe(REMOVE_LAYER); + expect(retval.layerId).toBe(testVal); + }); + it('show settings', () => { const action = showSettings("node1", "layers", {opacity: 0.5}); expect(action).toExist(); diff --git a/web/client/reducers/__tests__/layers-test.js b/web/client/reducers/__tests__/layers-test.js index 32bf4ea89c..6b752b7551 100644 --- a/web/client/reducers/__tests__/layers-test.js +++ b/web/client/reducers/__tests__/layers-test.js @@ -309,6 +309,50 @@ describe('Test the layers reducer', () => { expect(state.groups[0].nodes[0]).toBe("test_id"); }); + it('remove layer', () => { + let addAction = { + type: "ADD_LAYER", + layer: {group: "group1", id: "test_id1"} + }; + let state = layers({}, addAction); + + addAction = { + type: "ADD_LAYER", + layer: {group: "group1", id: "test_id2"} + }; + state = layers(state, addAction); + addAction = { + type: "ADD_LAYER", + layer: {group: "group2", id: "test_id3"} + }; + state = layers(state, addAction); + + let removeAction = { + type: "REMOVE_LAYER", + layerId: "test_id1" + }; + state = layers(state, removeAction); + + /* bogous on purpose */ + removeAction = { + type: "REMOVE_LAYER", + layerId: "test_id4" + }; + state = layers(state, removeAction); + + expect(state).toExist(); + expect(state.flat).toExist(); + expect(state.flat).toExclude({group: "group1", id: "test_id1"}); + expect(state.flat).toInclude({group: "group1", id: "test_id2"}); + expect(state.flat).toInclude({group: "group2", id: "test_id3"}); + expect(state.groups).toExist(); + expect(state.groups[1].nodes).toExclude('test_id1'); + expect(state.groups[1].nodes).toInclude('test_id2'); + expect(state.groups[1].name).toBe('group1'); + expect(state.groups[0].nodes).toInclude('test_id3'); + expect(state.groups[0].name).toBe('group2'); + }); + it('show settings', () => { const action = { type: "SHOW_SETTINGS",