@@ -56,6 +56,8 @@ function Geo(options, fullLayout) {
56
56
57
57
this . makeFramework ( ) ;
58
58
this . updateFx ( fullLayout . hovermode ) ;
59
+
60
+ this . traceHash = { } ;
59
61
}
60
62
61
63
module . exports = Geo ;
@@ -152,25 +154,47 @@ function filterData(dataIn) {
152
154
}
153
155
154
156
proto . onceTopojsonIsLoaded = function ( geoData , geoLayout ) {
155
- var traceData = { } ;
157
+ var i ;
156
158
157
159
this . drawLayout ( geoLayout ) ;
158
160
159
- for ( var i = 0 ; i < geoData . length ; i ++ ) {
161
+ var traceHashOld = this . traceHash ;
162
+ var traceHash = { } ;
163
+
164
+ for ( i = 0 ; i < geoData . length ; i ++ ) {
160
165
var trace = geoData [ i ] ;
161
166
162
- traceData [ trace . type ] = traceData [ trace . type ] || [ ] ;
163
- traceData [ trace . type ] . push ( trace ) ;
167
+ traceHash [ trace . type ] = traceHash [ trace . type ] || [ ] ;
168
+ traceHash [ trace . type ] . push ( trace ) ;
164
169
}
165
170
166
- var traceKeys = Object . keys ( traceData ) ;
167
- for ( var j = 0 ; j < traceKeys . length ; j ++ ) {
168
- var moduleData = traceData [ traceKeys [ j ] ] ;
171
+ var moduleNamesOld = Object . keys ( traceHashOld ) ;
172
+ var moduleNames = Object . keys ( traceHash ) ;
173
+
174
+ // when a trace gets deleted, make sure that its module's
175
+ // plot method is called so that it is properly
176
+ // removed from the DOM.
177
+ for ( i = 0 ; i < moduleNamesOld . length ; i ++ ) {
178
+ var moduleName = moduleNamesOld [ i ] ;
179
+
180
+ if ( moduleNames . indexOf ( moduleName ) === - 1 ) {
181
+ var fakeModule = traceHashOld [ moduleName ] [ 0 ] ;
182
+ fakeModule . visible = false ;
183
+ traceHash [ moduleName ] = [ fakeModule ] ;
184
+ }
185
+ }
186
+
187
+ moduleNames = Object . keys ( traceHash ) ;
188
+
189
+ for ( i = 0 ; i < moduleNames . length ; i ++ ) {
190
+ var moduleData = traceHash [ moduleNames [ i ] ] ;
169
191
var _module = moduleData [ 0 ] . _module ;
170
192
171
193
_module . plot ( this , filterData ( moduleData ) , geoLayout ) ;
172
194
}
173
195
196
+ this . traceHash = traceHash ;
197
+
174
198
this . render ( ) ;
175
199
} ;
176
200
0 commit comments