@@ -8,11 +8,12 @@ var ORDER = {
8
8
nonCluster : [ 'fill' , 'line' , 'circle' , 'symbol' ] ,
9
9
} ;
10
10
11
- function ScatterMapbox ( subplot , uid , clusterEnabled ) {
11
+ function ScatterMapbox ( subplot , uid , clusterEnabled , isHidden ) {
12
12
this . type = 'scattermapbox' ;
13
13
this . subplot = subplot ;
14
14
this . uid = uid ;
15
15
this . clusterEnabled = clusterEnabled ;
16
+ this . isHidden = isHidden ;
16
17
17
18
this . sourceIds = {
18
19
fill : 'source-' + uid + '-fill' ,
@@ -85,51 +86,96 @@ proto.update = function update(calcTrace) {
85
86
var map = subplot . map ;
86
87
var optsAll = convert ( subplot . gd , calcTrace ) ;
87
88
var below = subplot . belowLookup [ 'trace-' + this . uid ] ;
88
- var i , k , opts ;
89
89
var hasCluster = ! ! ( trace . cluster && trace . cluster . enabled ) ;
90
90
var hadCluster = ! ! this . clusterEnabled ;
91
-
92
- if ( below !== this . below ) {
93
- var order = ORDER . nonCluster ;
94
-
95
- for ( i = order . length - 1 ; i >= 0 ; i -- ) {
96
- k = order [ i ] ;
97
- map . removeLayer ( this . layerIds [ k ] ) ;
91
+ var lThis = this ;
92
+
93
+ function addCluster ( noSource ) {
94
+ if ( ! noSource ) lThis . addSource ( 'circle' , optsAll . circle , trace . cluster ) ;
95
+ var order = ORDER . cluster ;
96
+ for ( var i = 0 ; i < order . length ; i ++ ) {
97
+ var k = order [ i ] ;
98
+ var opts = optsAll [ k ] ;
99
+ lThis . addLayer ( k , opts , below ) ;
98
100
}
99
- for ( i = 0 ; i < order . length ; i ++ ) {
100
- k = order [ i ] ;
101
- opts = optsAll [ k ] ;
102
- this . addLayer ( k , opts , below ) ;
103
- }
104
- this . below = below ;
105
- } else if ( hasCluster && ! hadCluster ) {
106
- for ( i = ORDER . nonCluster . length - 1 ; i >= 0 ; i -- ) {
107
- k = ORDER . nonCluster [ i ] ;
108
- map . removeLayer ( this . layerIds [ k ] ) ;
109
- map . removeSource ( this . sourceIds [ k ] ) ;
101
+ }
102
+
103
+ function removeCluster ( noSource ) {
104
+ var order = ORDER . cluster ;
105
+ for ( var i = order . length - 1 ; i >= 0 ; i -- ) {
106
+ var k = order [ i ] ;
107
+ map . removeLayer ( lThis . layerIds [ k ] ) ;
110
108
}
111
- this . addSource ( 'circle' , optsAll . circle , trace . cluster ) ;
112
- for ( i = 0 ; i < ORDER . cluster . length ; i ++ ) {
113
- k = ORDER . cluster [ i ] ;
114
- opts = optsAll [ k ] ;
115
- this . addLayer ( k , opts , below ) ;
109
+ if ( ! noSource ) map . removeSource ( lThis . sourceIds . circle ) ;
110
+ }
111
+
112
+ function addNonCluster ( noSource ) {
113
+ var order = ORDER . nonCluster ;
114
+ for ( var i = 0 ; i < order . length ; i ++ ) {
115
+ var k = order [ i ] ;
116
+ var opts = optsAll [ k ] ;
117
+ if ( ! noSource ) lThis . addSource ( k , opts ) ;
118
+ lThis . addLayer ( k , opts , below ) ;
116
119
}
117
- this . clusterEnabled = hasCluster ;
118
- } else if ( ! hasCluster && hadCluster ) {
119
- for ( i = 0 ; i < ORDER . cluster . length ; i ++ ) {
120
- k = ORDER . cluster [ i ] ;
121
- map . removeLayer ( this . layerIds [ k ] ) ;
120
+ }
121
+
122
+ function removeNonCluster ( noSource ) {
123
+ var order = ORDER . nonCluster ;
124
+ for ( var i = order . length - 1 ; i >= 0 ; i -- ) {
125
+ var k = order [ i ] ;
126
+ map . removeLayer ( lThis . layerIds [ k ] ) ;
127
+ if ( ! noSource ) map . removeSource ( lThis . sourceIds [ k ] ) ;
122
128
}
123
- map . removeSource ( this . sourceIds . circle ) ;
124
- for ( i = 0 ; i < ORDER . nonCluster . length ; i ++ ) {
125
- k = ORDER . nonCluster [ i ] ;
126
- opts = optsAll [ k ] ;
127
- this . addSource ( k , opts , trace . cluster ) ;
128
- this . addLayer ( k , opts , below ) ;
129
+ }
130
+
131
+ function remove ( noSource ) {
132
+ if ( hadCluster ) removeCluster ( noSource ) ; else removeNonCluster ( noSource ) ;
133
+ }
134
+
135
+ function add ( noSource ) {
136
+ if ( hasCluster ) addCluster ( noSource ) ; else addNonCluster ( noSource ) ;
137
+ }
138
+
139
+ function repaint ( ) {
140
+ var order = hasCluster ? ORDER . cluster : ORDER . nonCluster ;
141
+ for ( var i = 0 ; i < order . length ; i ++ ) {
142
+ var k = order [ i ] ;
143
+ var opts = optsAll [ k ] ;
144
+ if ( ! opts ) continue ;
145
+
146
+ subplot . setOptions ( lThis . layerIds [ k ] , 'setLayoutProperty' , opts . layout ) ;
147
+
148
+ if ( opts . layout . visibility === 'visible' ) {
149
+ if ( k !== 'cluster' ) {
150
+ lThis . setSourceData ( k , opts ) ;
151
+ }
152
+ subplot . setOptions ( lThis . layerIds [ k ] , 'setPaintProperty' , opts . paint ) ;
153
+ }
129
154
}
130
- this . clusterEnabled = hasCluster ;
131
155
}
132
156
157
+ var wasHidden = this . isHidden ;
158
+ var isHidden = trace . visible !== true ;
159
+
160
+ if ( isHidden ) {
161
+ if ( ! wasHidden ) remove ( ) ;
162
+ } else if ( wasHidden ) {
163
+ if ( ! isHidden ) add ( ) ;
164
+ } else if ( hadCluster !== hasCluster ) {
165
+ remove ( ) ;
166
+ add ( ) ;
167
+ } else if ( this . below !== below ) {
168
+ remove ( true ) ;
169
+ add ( true ) ;
170
+ repaint ( ) ;
171
+ } else {
172
+ repaint ( ) ;
173
+ }
174
+
175
+ this . clusterEnabled = hasCluster ;
176
+ this . isHidden = isHidden ;
177
+ this . below = below ;
178
+
133
179
// link ref for quick update during selections
134
180
calcTrace [ 0 ] . trace . _glTrace = this ;
135
181
} ;
@@ -147,10 +193,13 @@ proto.dispose = function dispose() {
147
193
module . exports = function createScatterMapbox ( subplot , calcTrace ) {
148
194
var trace = calcTrace [ 0 ] . trace ;
149
195
var hasCluster = trace . cluster && trace . cluster . enabled ;
196
+ var isHidden = trace . visible !== true ;
197
+
150
198
var scatterMapbox = new ScatterMapbox (
151
199
subplot ,
152
200
trace . uid ,
153
- hasCluster
201
+ hasCluster ,
202
+ isHidden
154
203
) ;
155
204
156
205
var optsAll = convert ( subplot . gd , calcTrace ) ;
0 commit comments