From 77dc25604aa0450b47cb482aba3c04a85dd0dd15 Mon Sep 17 00:00:00 2001 From: Igor Dykhta Date: Tue, 9 Aug 2022 19:56:11 +0300 Subject: [PATCH] [BUG] Fix crash after layer type change (UN-2007) (#298) (#1912) - reset clicked and hover values for a layer affected by LAYER_TYPE_CHANGE --- src/reducers/vis-state-updaters.ts | 12 ++++++++++-- test/node/reducers/vis-state-test.js | 11 +++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/reducers/vis-state-updaters.ts b/src/reducers/vis-state-updaters.ts index 4b67f27a20..1894a3f463 100644 --- a/src/reducers/vis-state-updaters.ts +++ b/src/reducers/vis-state-updaters.ts @@ -785,8 +785,16 @@ export function layerTypeChangeUpdater( newLayer.updateLayerDomain(state.datasets); } - const {layerData, layer} = calculateLayerData(newLayer, state); - let newState = updateStateWithLayerAndData(state, {layerData, layer, idx}); + const {clicked, hoverInfo} = state; + + let newState = { + ...state, + clicked: oldLayer.isLayerHovered(clicked) ? undefined : clicked, + hoverInfo: oldLayer.isLayerHovered(hoverInfo) ? undefined : hoverInfo + }; + + const {layerData, layer} = calculateLayerData(newLayer, newState); + newState = updateStateWithLayerAndData(newState, {layerData, layer, idx}); if (layer.config.animation.enabled || oldLayer.config.animation.enabled) { newState = updateAnimationDomain(newState); diff --git a/test/node/reducers/vis-state-test.js b/test/node/reducers/vis-state-test.js index f6c6699d8b..3f47f1d4af 100644 --- a/test/node/reducers/vis-state-test.js +++ b/test/node/reducers/vis-state-test.js @@ -321,6 +321,14 @@ test('#visStateReducer -> LAYER_TYPE_CHANGE.1', t => { layers: [{id: 'existing_layer'}, layer], layerData: [[{data: [1, 2, 3]}, {data: [4, 5, 6]}]], layerOrder: [1, 0], + hoverInfo: { + layer: {props: {id: 'more_layer'}}, + picked: true + }, + clicked: { + layer: {props: {id: 'more_layer'}}, + picked: true + }, splitMaps: [ { layers: { @@ -364,6 +372,9 @@ test('#visStateReducer -> LAYER_TYPE_CHANGE.1', t => { 'should add newId to SplitMaps, and replace old id' ); + t.ok(!nextState.clicked, 'should reset clicked'); + t.ok(!nextState.hoverInfo, 'should reset hoverInfo'); + t.end(); });