From 88678db3bd957b4bf17ae8d8cd64a7cbd61d8558 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Thu, 1 Dec 2022 18:47:12 -0500 Subject: [PATCH 01/15] bring back restyle in scattermapbox plot update --- src/traces/scattermapbox/plot.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/traces/scattermapbox/plot.js b/src/traces/scattermapbox/plot.js index a04b3e5f222..481bc4120f3 100644 --- a/src/traces/scattermapbox/plot.js +++ b/src/traces/scattermapbox/plot.js @@ -85,12 +85,12 @@ proto.update = function update(calcTrace) { var map = subplot.map; var optsAll = convert(subplot.gd, calcTrace); var below = subplot.belowLookup['trace-' + this.uid]; - var i, k, opts; + var i, k, opts, order; var hasCluster = !!(trace.cluster && trace.cluster.enabled); var hadCluster = !!this.clusterEnabled; if(below !== this.below) { - var order = ORDER.nonCluster; + order = ORDER.nonCluster; for(i = order.length - 1; i >= 0; i--) { k = order[i]; @@ -130,6 +130,19 @@ proto.update = function update(calcTrace) { this.clusterEnabled = hasCluster; } + order = hasCluster ? ORDER.cluster : ORDER.nonCluster; + for(i = 0; i < order.length; i++) { + k = order[i]; + opts = optsAll[k]; + + subplot.setOptions(this.layerIds[k], 'setLayoutProperty', opts.layout); + + if(opts.layout.visibility === 'visible') { + this.setSourceData(k, opts); + subplot.setOptions(this.layerIds[k], 'setPaintProperty', opts.paint); + } + } + // link ref for quick update during selections calcTrace[0].trace._glTrace = this; }; From b60d347033239c603d8edf17be8a156476359cb6 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Thu, 1 Dec 2022 19:01:58 -0500 Subject: [PATCH 02/15] correct add & remove orders depending on old & new cluster options --- src/traces/scattermapbox/plot.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/traces/scattermapbox/plot.js b/src/traces/scattermapbox/plot.js index 481bc4120f3..20871b18468 100644 --- a/src/traces/scattermapbox/plot.js +++ b/src/traces/scattermapbox/plot.js @@ -90,12 +90,13 @@ proto.update = function update(calcTrace) { var hadCluster = !!this.clusterEnabled; if(below !== this.below) { - order = ORDER.nonCluster; - + order = hadCluster ? ORDER.cluster : ORDER.nonCluster; for(i = order.length - 1; i >= 0; i--) { k = order[i]; map.removeLayer(this.layerIds[k]); } + + order = hasCluster ? ORDER.cluster : ORDER.nonCluster; for(i = 0; i < order.length; i++) { k = order[i]; opts = optsAll[k]; From 0a41ffa0afd8a30aa4bf6d36223ae0daf996de18 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 2 Dec 2022 09:15:16 -0500 Subject: [PATCH 03/15] refactor - move sets to the end --- src/traces/scattermapbox/plot.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/traces/scattermapbox/plot.js b/src/traces/scattermapbox/plot.js index 20871b18468..33a93150423 100644 --- a/src/traces/scattermapbox/plot.js +++ b/src/traces/scattermapbox/plot.js @@ -102,7 +102,6 @@ proto.update = function update(calcTrace) { opts = optsAll[k]; this.addLayer(k, opts, below); } - this.below = below; } else if(hasCluster && !hadCluster) { for(i = ORDER.nonCluster.length - 1; i >= 0; i--) { k = ORDER.nonCluster[i]; @@ -115,7 +114,6 @@ proto.update = function update(calcTrace) { opts = optsAll[k]; this.addLayer(k, opts, below); } - this.clusterEnabled = hasCluster; } else if(!hasCluster && hadCluster) { for(i = 0; i < ORDER.cluster.length; i++) { k = ORDER.cluster[i]; @@ -128,7 +126,6 @@ proto.update = function update(calcTrace) { this.addSource(k, opts, trace.cluster); this.addLayer(k, opts, below); } - this.clusterEnabled = hasCluster; } order = hasCluster ? ORDER.cluster : ORDER.nonCluster; @@ -144,6 +141,9 @@ proto.update = function update(calcTrace) { } } + this.clusterEnabled = hasCluster; + this.below = below; + // link ref for quick update during selections calcTrace[0].trace._glTrace = this; }; From 14cbf6a6906154c4fd48f61d0456340558d50b63 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 2 Dec 2022 11:17:43 -0500 Subject: [PATCH 04/15] revise adding and removing cluster and non-cluster layers --- src/traces/scattermapbox/plot.js | 71 ++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 30 deletions(-) diff --git a/src/traces/scattermapbox/plot.js b/src/traces/scattermapbox/plot.js index 33a93150423..98deac2bf9f 100644 --- a/src/traces/scattermapbox/plot.js +++ b/src/traces/scattermapbox/plot.js @@ -85,41 +85,28 @@ proto.update = function update(calcTrace) { var map = subplot.map; var optsAll = convert(subplot.gd, calcTrace); var below = subplot.belowLookup['trace-' + this.uid]; - var i, k, opts, order; + var i, k, opts; var hasCluster = !!(trace.cluster && trace.cluster.enabled); var hadCluster = !!this.clusterEnabled; - if(below !== this.below) { - order = hadCluster ? ORDER.cluster : ORDER.nonCluster; - for(i = order.length - 1; i >= 0; i--) { - k = order[i]; - map.removeLayer(this.layerIds[k]); - } - - order = hasCluster ? ORDER.cluster : ORDER.nonCluster; - for(i = 0; i < order.length; i++) { - k = order[i]; - opts = optsAll[k]; - this.addLayer(k, opts, below); - } - } else if(hasCluster && !hadCluster) { - for(i = ORDER.nonCluster.length - 1; i >= 0; i--) { - k = ORDER.nonCluster[i]; - map.removeLayer(this.layerIds[k]); - map.removeSource(this.sourceIds[k]); - } + function addCluster() { this.addSource('circle', optsAll.circle, trace.cluster); for(i = 0; i < ORDER.cluster.length; i++) { k = ORDER.cluster[i]; opts = optsAll[k]; this.addLayer(k, opts, below); } - } else if(!hasCluster && hadCluster) { - for(i = 0; i < ORDER.cluster.length; i++) { + } + + function removeCluster() { + for(i = ORDER.cluster.length - 1; i >= 0; i--) { k = ORDER.cluster[i]; map.removeLayer(this.layerIds[k]); } map.removeSource(this.sourceIds.circle); + } + + function addNonCluster() { for(i = 0; i < ORDER.nonCluster.length; i++) { k = ORDER.nonCluster[i]; opts = optsAll[k]; @@ -128,16 +115,40 @@ proto.update = function update(calcTrace) { } } - order = hasCluster ? ORDER.cluster : ORDER.nonCluster; - for(i = 0; i < order.length; i++) { - k = order[i]; - opts = optsAll[k]; + function removeNonCluster() { + for(i = ORDER.nonCluster.length - 1; i >= 0; i--) { + k = ORDER.nonCluster[i]; + map.removeLayer(this.layerIds[k]); + map.removeSource(this.sourceIds[k]); + } + } + + if(hasCluster && !hadCluster) { + removeNonCluster(); + addCluster(); + } else if(!hasCluster && hadCluster) { + removeCluster(); + addNonCluster(); + } else if(below !== this.below) { + if(!hasCluster && !hadCluster) { + removeNonCluster(); + addNonCluster(); + } else if(hasCluster && hadCluster) { + removeCluster(); + addCluster(); + } + } else { + var order = hasCluster ? ORDER.cluster : ORDER.nonCluster; + for(i = 0; i < order.length; i++) { + k = order[i]; + opts = optsAll[k]; - subplot.setOptions(this.layerIds[k], 'setLayoutProperty', opts.layout); + subplot.setOptions(this.layerIds[k], 'setLayoutProperty', opts.layout); - if(opts.layout.visibility === 'visible') { - this.setSourceData(k, opts); - subplot.setOptions(this.layerIds[k], 'setPaintProperty', opts.paint); + if(opts.layout.visibility === 'visible') { + this.setSourceData(k, opts); + subplot.setOptions(this.layerIds[k], 'setPaintProperty', opts.paint); + } } } From 282caadf13a6551db0125eb4f6a53a4faa761259 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 2 Dec 2022 12:10:05 -0500 Subject: [PATCH 05/15] revise draw and restyle logic --- src/traces/scattermapbox/plot.js | 34 +++++++++++--------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/src/traces/scattermapbox/plot.js b/src/traces/scattermapbox/plot.js index 98deac2bf9f..2b8268bc9ff 100644 --- a/src/traces/scattermapbox/plot.js +++ b/src/traces/scattermapbox/plot.js @@ -88,55 +88,45 @@ proto.update = function update(calcTrace) { var i, k, opts; var hasCluster = !!(trace.cluster && trace.cluster.enabled); var hadCluster = !!this.clusterEnabled; + var lThis = this; function addCluster() { - this.addSource('circle', optsAll.circle, trace.cluster); + lThis.addSource('circle', optsAll.circle, trace.cluster); for(i = 0; i < ORDER.cluster.length; i++) { k = ORDER.cluster[i]; opts = optsAll[k]; - this.addLayer(k, opts, below); + lThis.addLayer(k, opts, below); } } function removeCluster() { for(i = ORDER.cluster.length - 1; i >= 0; i--) { k = ORDER.cluster[i]; - map.removeLayer(this.layerIds[k]); + map.removeLayer(lThis.layerIds[k]); } - map.removeSource(this.sourceIds.circle); + map.removeSource(lThis.sourceIds.circle); } function addNonCluster() { for(i = 0; i < ORDER.nonCluster.length; i++) { k = ORDER.nonCluster[i]; opts = optsAll[k]; - this.addSource(k, opts, trace.cluster); - this.addLayer(k, opts, below); + lThis.addSource(k, opts, trace.cluster); + lThis.addLayer(k, opts, below); } } function removeNonCluster() { for(i = ORDER.nonCluster.length - 1; i >= 0; i--) { k = ORDER.nonCluster[i]; - map.removeLayer(this.layerIds[k]); - map.removeSource(this.sourceIds[k]); + map.removeLayer(lThis.layerIds[k]); + map.removeSource(lThis.sourceIds[k]); } } - if(hasCluster && !hadCluster) { - removeNonCluster(); - addCluster(); - } else if(!hasCluster && hadCluster) { - removeCluster(); - addNonCluster(); - } else if(below !== this.below) { - if(!hasCluster && !hadCluster) { - removeNonCluster(); - addNonCluster(); - } else if(hasCluster && hadCluster) { - removeCluster(); - addCluster(); - } + if(hadCluster !== hasCluster || below !== this.below) { + if(hadCluster) removeCluster(); else removeNonCluster(); + if(hasCluster) addCluster(); else addNonCluster(); } else { var order = hasCluster ? ORDER.cluster : ORDER.nonCluster; for(i = 0; i < order.length; i++) { From 6987bc6828782ff62d6ea95524c80e32cbf3a45d Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 2 Dec 2022 12:24:47 -0500 Subject: [PATCH 06/15] improve functions --- src/traces/scattermapbox/plot.js | 49 ++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/src/traces/scattermapbox/plot.js b/src/traces/scattermapbox/plot.js index 2b8268bc9ff..a5d1f0ce67c 100644 --- a/src/traces/scattermapbox/plot.js +++ b/src/traces/scattermapbox/plot.js @@ -85,63 +85,70 @@ proto.update = function update(calcTrace) { var map = subplot.map; var optsAll = convert(subplot.gd, calcTrace); var below = subplot.belowLookup['trace-' + this.uid]; - var i, k, opts; var hasCluster = !!(trace.cluster && trace.cluster.enabled); var hadCluster = !!this.clusterEnabled; var lThis = this; function addCluster() { lThis.addSource('circle', optsAll.circle, trace.cluster); - for(i = 0; i < ORDER.cluster.length; i++) { - k = ORDER.cluster[i]; - opts = optsAll[k]; + var order = ORDER.cluster; + for(var i = 0; i < order.length; i++) { + var k = order[i]; + var opts = optsAll[k]; lThis.addLayer(k, opts, below); } } function removeCluster() { - for(i = ORDER.cluster.length - 1; i >= 0; i--) { - k = ORDER.cluster[i]; + var order = ORDER.cluster; + for(var i = order.length - 1; i >= 0; i--) { + var k = order[i]; map.removeLayer(lThis.layerIds[k]); } map.removeSource(lThis.sourceIds.circle); } function addNonCluster() { - for(i = 0; i < ORDER.nonCluster.length; i++) { - k = ORDER.nonCluster[i]; - opts = optsAll[k]; + var order = ORDER.nonCluster; + for(var i = 0; i < order.length; i++) { + var k = order[i]; + var opts = optsAll[k]; lThis.addSource(k, opts, trace.cluster); lThis.addLayer(k, opts, below); } } function removeNonCluster() { - for(i = ORDER.nonCluster.length - 1; i >= 0; i--) { - k = ORDER.nonCluster[i]; + var order = ORDER.nonCluster; + for(var i = order.length - 1; i >= 0; i--) { + var k = order[i]; map.removeLayer(lThis.layerIds[k]); map.removeSource(lThis.sourceIds[k]); } } - if(hadCluster !== hasCluster || below !== this.below) { - if(hadCluster) removeCluster(); else removeNonCluster(); - if(hasCluster) addCluster(); else addNonCluster(); - } else { + function reset() { var order = hasCluster ? ORDER.cluster : ORDER.nonCluster; - for(i = 0; i < order.length; i++) { - k = order[i]; - opts = optsAll[k]; + for(var i = 0; i < order.length; i++) { + var k = order[i]; + var opts = optsAll[k]; - subplot.setOptions(this.layerIds[k], 'setLayoutProperty', opts.layout); + subplot.setOptions(lThis.layerIds[k], 'setLayoutProperty', opts.layout); if(opts.layout.visibility === 'visible') { - this.setSourceData(k, opts); - subplot.setOptions(this.layerIds[k], 'setPaintProperty', opts.paint); + lThis.setSourceData(k, opts); + subplot.setOptions(lThis.layerIds[k], 'setPaintProperty', opts.paint); } } } + if(hadCluster !== hasCluster || below !== this.below) { + if(hadCluster) removeCluster(); else removeNonCluster(); + if(hasCluster) addCluster(); else addNonCluster(); + } else { + reset(); + } + this.clusterEnabled = hasCluster; this.below = below; From 845d990364bbc1aeffdcf2c7baecc717c4106394 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 2 Dec 2022 13:43:20 -0500 Subject: [PATCH 07/15] avoid mapbox-gl errors --- src/traces/scattermapbox/plot.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/traces/scattermapbox/plot.js b/src/traces/scattermapbox/plot.js index a5d1f0ce67c..f3eb552ee56 100644 --- a/src/traces/scattermapbox/plot.js +++ b/src/traces/scattermapbox/plot.js @@ -136,7 +136,9 @@ proto.update = function update(calcTrace) { subplot.setOptions(lThis.layerIds[k], 'setLayoutProperty', opts.layout); if(opts.layout.visibility === 'visible') { - lThis.setSourceData(k, opts); + if(k !== 'cluster') { + lThis.setSourceData(k, opts); + } subplot.setOptions(lThis.layerIds[k], 'setPaintProperty', opts.paint); } } From eb630b56854820abe8882a54554485db3033e667 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 2 Dec 2022 14:07:27 -0500 Subject: [PATCH 08/15] avoid jumps in zoom interactions --- src/traces/scattermapbox/plot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/traces/scattermapbox/plot.js b/src/traces/scattermapbox/plot.js index f3eb552ee56..efccc84f59f 100644 --- a/src/traces/scattermapbox/plot.js +++ b/src/traces/scattermapbox/plot.js @@ -144,7 +144,7 @@ proto.update = function update(calcTrace) { } } - if(hadCluster !== hasCluster || below !== this.below) { + if(hadCluster !== hasCluster) { if(hadCluster) removeCluster(); else removeNonCluster(); if(hasCluster) addCluster(); else addNonCluster(); } else { From 257b32c82efe9992f5bf5e3f54d61ae997de3d04 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 2 Dec 2022 14:38:47 -0500 Subject: [PATCH 09/15] fix visiblity tweaks --- src/traces/scattermapbox/plot.js | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/traces/scattermapbox/plot.js b/src/traces/scattermapbox/plot.js index efccc84f59f..15700fa5bc5 100644 --- a/src/traces/scattermapbox/plot.js +++ b/src/traces/scattermapbox/plot.js @@ -8,11 +8,12 @@ var ORDER = { nonCluster: ['fill', 'line', 'circle', 'symbol'], }; -function ScatterMapbox(subplot, uid, clusterEnabled) { +function ScatterMapbox(subplot, uid, clusterEnabled, isHidden) { this.type = 'scattermapbox'; this.subplot = subplot; this.uid = uid; this.clusterEnabled = clusterEnabled; + this.isHidden = isHidden; this.sourceIds = { fill: 'source-' + uid + '-fill', @@ -127,11 +128,12 @@ proto.update = function update(calcTrace) { } } - function reset() { + function repaint() { var order = hasCluster ? ORDER.cluster : ORDER.nonCluster; for(var i = 0; i < order.length; i++) { var k = order[i]; var opts = optsAll[k]; + if(!opts) continue; subplot.setOptions(lThis.layerIds[k], 'setLayoutProperty', opts.layout); @@ -144,14 +146,22 @@ proto.update = function update(calcTrace) { } } - if(hadCluster !== hasCluster) { + var wasHidden = this.isHidden; + var isHidden = trace.visible !== true; + + if(isHidden && !wasHidden) { + if(hadCluster) removeCluster(); else removeNonCluster(); + } else if(!isHidden && wasHidden) { + if(hasCluster) addCluster(); else addNonCluster(); + } else if(hadCluster !== hasCluster) { if(hadCluster) removeCluster(); else removeNonCluster(); if(hasCluster) addCluster(); else addNonCluster(); } else { - reset(); + repaint(); } this.clusterEnabled = hasCluster; + this.isHidden = isHidden; this.below = below; // link ref for quick update during selections @@ -171,10 +181,13 @@ proto.dispose = function dispose() { module.exports = function createScatterMapbox(subplot, calcTrace) { var trace = calcTrace[0].trace; var hasCluster = trace.cluster && trace.cluster.enabled; + var isHidden = trace.visible !== true; + var scatterMapbox = new ScatterMapbox( subplot, trace.uid, - hasCluster + hasCluster, + isHidden ); var optsAll = convert(subplot.gd, calcTrace); From 697db136a1d0f279501c8bc4dbe327042fc63025 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 2 Dec 2022 14:44:54 -0500 Subject: [PATCH 10/15] refactor functions --- src/traces/scattermapbox/plot.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/traces/scattermapbox/plot.js b/src/traces/scattermapbox/plot.js index 15700fa5bc5..554673c9709 100644 --- a/src/traces/scattermapbox/plot.js +++ b/src/traces/scattermapbox/plot.js @@ -128,6 +128,14 @@ proto.update = function update(calcTrace) { } } + function remove() { + if(hadCluster) removeCluster(); else removeNonCluster(); + } + + function add() { + if(hasCluster) addCluster(); else addNonCluster(); + } + function repaint() { var order = hasCluster ? ORDER.cluster : ORDER.nonCluster; for(var i = 0; i < order.length; i++) { @@ -150,12 +158,12 @@ proto.update = function update(calcTrace) { var isHidden = trace.visible !== true; if(isHidden && !wasHidden) { - if(hadCluster) removeCluster(); else removeNonCluster(); + remove(); } else if(!isHidden && wasHidden) { - if(hasCluster) addCluster(); else addNonCluster(); + add(); } else if(hadCluster !== hasCluster) { - if(hadCluster) removeCluster(); else removeNonCluster(); - if(hasCluster) addCluster(); else addNonCluster(); + remove(); + add(); } else { repaint(); } From 70213e16704df9a46c09106eed9188d06a4a0208 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 2 Dec 2022 15:01:50 -0500 Subject: [PATCH 11/15] reconsider below during updates --- src/traces/scattermapbox/plot.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/traces/scattermapbox/plot.js b/src/traces/scattermapbox/plot.js index 554673c9709..5a048000e45 100644 --- a/src/traces/scattermapbox/plot.js +++ b/src/traces/scattermapbox/plot.js @@ -157,12 +157,15 @@ proto.update = function update(calcTrace) { var wasHidden = this.isHidden; var isHidden = trace.visible !== true; - if(isHidden && !wasHidden) { + if( + this.below !== below || + hadCluster !== hasCluster + ) { remove(); - } else if(!isHidden && wasHidden) { add(); - } else if(hadCluster !== hasCluster) { + } else if(isHidden && !wasHidden) { remove(); + } else if(!isHidden && wasHidden) { add(); } else { repaint(); From d4d0d6cb44a32dcf9da0c2eb751dfc36bb5182f0 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 2 Dec 2022 17:56:51 -0500 Subject: [PATCH 12/15] do not pass trace.cluster in case of nonCluster --- src/traces/scattermapbox/plot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/traces/scattermapbox/plot.js b/src/traces/scattermapbox/plot.js index 5a048000e45..4970693957a 100644 --- a/src/traces/scattermapbox/plot.js +++ b/src/traces/scattermapbox/plot.js @@ -114,7 +114,7 @@ proto.update = function update(calcTrace) { for(var i = 0; i < order.length; i++) { var k = order[i]; var opts = optsAll[k]; - lThis.addSource(k, opts, trace.cluster); + lThis.addSource(k, opts); lThis.addLayer(k, opts, below); } } From 7b59109178b72e1e6b3c75a46213f2684918b501 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Tue, 6 Dec 2022 12:29:59 -0500 Subject: [PATCH 13/15] avoid jumps on zoom --- src/traces/scattermapbox/plot.js | 33 ++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/traces/scattermapbox/plot.js b/src/traces/scattermapbox/plot.js index 4970693957a..c6209772ca7 100644 --- a/src/traces/scattermapbox/plot.js +++ b/src/traces/scattermapbox/plot.js @@ -90,8 +90,8 @@ proto.update = function update(calcTrace) { var hadCluster = !!this.clusterEnabled; var lThis = this; - function addCluster() { - lThis.addSource('circle', optsAll.circle, trace.cluster); + function addCluster(noSource) { + if(!noSource) lThis.addSource('circle', optsAll.circle, trace.cluster); var order = ORDER.cluster; for(var i = 0; i < order.length; i++) { var k = order[i]; @@ -100,40 +100,40 @@ proto.update = function update(calcTrace) { } } - function removeCluster() { + function removeCluster(noSource) { var order = ORDER.cluster; for(var i = order.length - 1; i >= 0; i--) { var k = order[i]; map.removeLayer(lThis.layerIds[k]); } - map.removeSource(lThis.sourceIds.circle); + if(!noSource) map.removeSource(lThis.sourceIds.circle); } - function addNonCluster() { + function addNonCluster(noSource) { var order = ORDER.nonCluster; for(var i = 0; i < order.length; i++) { var k = order[i]; var opts = optsAll[k]; - lThis.addSource(k, opts); + if(!noSource) lThis.addSource(k, opts); lThis.addLayer(k, opts, below); } } - function removeNonCluster() { + function removeNonCluster(noSource) { var order = ORDER.nonCluster; for(var i = order.length - 1; i >= 0; i--) { var k = order[i]; map.removeLayer(lThis.layerIds[k]); - map.removeSource(lThis.sourceIds[k]); + if(!noSource) map.removeSource(lThis.sourceIds[k]); } } - function remove() { - if(hadCluster) removeCluster(); else removeNonCluster(); + function remove(noSource) { + if(hadCluster) removeCluster(noSource); else removeNonCluster(noSource); } - function add() { - if(hasCluster) addCluster(); else addNonCluster(); + function add(noSource) { + if(hasCluster) addCluster(noSource); else addNonCluster(noSource); } function repaint() { @@ -157,10 +157,11 @@ proto.update = function update(calcTrace) { var wasHidden = this.isHidden; var isHidden = trace.visible !== true; - if( - this.below !== below || - hadCluster !== hasCluster - ) { + if(this.below !== below) { + remove(true); + add(true); + repaint(); + } else if(hadCluster !== hasCluster) { remove(); add(); } else if(isHidden && !wasHidden) { From 0c6079c889d0538e89292b4d73b474d9173e74d2 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Tue, 6 Dec 2022 12:59:08 -0500 Subject: [PATCH 14/15] fix hide & unhide --- src/traces/scattermapbox/plot.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/traces/scattermapbox/plot.js b/src/traces/scattermapbox/plot.js index c6209772ca7..2b472cdfcd9 100644 --- a/src/traces/scattermapbox/plot.js +++ b/src/traces/scattermapbox/plot.js @@ -164,10 +164,10 @@ proto.update = function update(calcTrace) { } else if(hadCluster !== hasCluster) { remove(); add(); - } else if(isHidden && !wasHidden) { - remove(); - } else if(!isHidden && wasHidden) { - add(); + } else if(isHidden) { + if(!wasHidden) remove(); + } else if(wasHidden) { + if(!isHidden) add(); } else { repaint(); } From ebbeb8aaffbdfae6f8abe0a079075490d2c41cf4 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Tue, 6 Dec 2022 13:02:57 -0500 Subject: [PATCH 15/15] revise order of ifs to better handle hidden traces --- src/traces/scattermapbox/plot.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/traces/scattermapbox/plot.js b/src/traces/scattermapbox/plot.js index 2b472cdfcd9..03db06144fd 100644 --- a/src/traces/scattermapbox/plot.js +++ b/src/traces/scattermapbox/plot.js @@ -157,17 +157,17 @@ proto.update = function update(calcTrace) { var wasHidden = this.isHidden; var isHidden = trace.visible !== true; - if(this.below !== below) { - remove(true); - add(true); - repaint(); - } else if(hadCluster !== hasCluster) { - remove(); - add(); - } else if(isHidden) { + if(isHidden) { if(!wasHidden) remove(); } else if(wasHidden) { if(!isHidden) add(); + } else if(hadCluster !== hasCluster) { + remove(); + add(); + } else if(this.below !== below) { + remove(true); + add(true); + repaint(); } else { repaint(); }