@@ -85,41 +85,28 @@ proto.update = function update(calcTrace) {
8585 var map = subplot . map ;
8686 var optsAll = convert ( subplot . gd , calcTrace ) ;
8787 var below = subplot . belowLookup [ 'trace-' + this . uid ] ;
88- var i , k , opts , order ;
88+ var i , k , opts ;
8989 var hasCluster = ! ! ( trace . cluster && trace . cluster . enabled ) ;
9090 var hadCluster = ! ! this . clusterEnabled ;
9191
92- if ( below !== this . below ) {
93- order = hadCluster ? ORDER . cluster : ORDER . nonCluster ;
94- for ( i = order . length - 1 ; i >= 0 ; i -- ) {
95- k = order [ i ] ;
96- map . removeLayer ( this . layerIds [ k ] ) ;
97- }
98-
99- order = hasCluster ? ORDER . cluster : ORDER . nonCluster ;
100- for ( i = 0 ; i < order . length ; i ++ ) {
101- k = order [ i ] ;
102- opts = optsAll [ k ] ;
103- this . addLayer ( k , opts , below ) ;
104- }
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 ] ) ;
110- }
92+ function addCluster ( ) {
11193 this . addSource ( 'circle' , optsAll . circle , trace . cluster ) ;
11294 for ( i = 0 ; i < ORDER . cluster . length ; i ++ ) {
11395 k = ORDER . cluster [ i ] ;
11496 opts = optsAll [ k ] ;
11597 this . addLayer ( k , opts , below ) ;
11698 }
117- } else if ( ! hasCluster && hadCluster ) {
118- for ( i = 0 ; i < ORDER . cluster . length ; i ++ ) {
99+ }
100+
101+ function removeCluster ( ) {
102+ for ( i = ORDER . cluster . length - 1 ; i >= 0 ; i -- ) {
119103 k = ORDER . cluster [ i ] ;
120104 map . removeLayer ( this . layerIds [ k ] ) ;
121105 }
122106 map . removeSource ( this . sourceIds . circle ) ;
107+ }
108+
109+ function addNonCluster ( ) {
123110 for ( i = 0 ; i < ORDER . nonCluster . length ; i ++ ) {
124111 k = ORDER . nonCluster [ i ] ;
125112 opts = optsAll [ k ] ;
@@ -128,16 +115,40 @@ proto.update = function update(calcTrace) {
128115 }
129116 }
130117
131- order = hasCluster ? ORDER . cluster : ORDER . nonCluster ;
132- for ( i = 0 ; i < order . length ; i ++ ) {
133- k = order [ i ] ;
134- opts = optsAll [ k ] ;
118+ function removeNonCluster ( ) {
119+ for ( i = ORDER . nonCluster . length - 1 ; i >= 0 ; i -- ) {
120+ k = ORDER . nonCluster [ i ] ;
121+ map . removeLayer ( this . layerIds [ k ] ) ;
122+ map . removeSource ( this . sourceIds [ k ] ) ;
123+ }
124+ }
125+
126+ if ( hasCluster && ! hadCluster ) {
127+ removeNonCluster ( ) ;
128+ addCluster ( ) ;
129+ } else if ( ! hasCluster && hadCluster ) {
130+ removeCluster ( ) ;
131+ addNonCluster ( ) ;
132+ } else if ( below !== this . below ) {
133+ if ( ! hasCluster && ! hadCluster ) {
134+ removeNonCluster ( ) ;
135+ addNonCluster ( ) ;
136+ } else if ( hasCluster && hadCluster ) {
137+ removeCluster ( ) ;
138+ addCluster ( ) ;
139+ }
140+ } else {
141+ var order = hasCluster ? ORDER . cluster : ORDER . nonCluster ;
142+ for ( i = 0 ; i < order . length ; i ++ ) {
143+ k = order [ i ] ;
144+ opts = optsAll [ k ] ;
135145
136- subplot . setOptions ( this . layerIds [ k ] , 'setLayoutProperty' , opts . layout ) ;
146+ subplot . setOptions ( this . layerIds [ k ] , 'setLayoutProperty' , opts . layout ) ;
137147
138- if ( opts . layout . visibility === 'visible' ) {
139- this . setSourceData ( k , opts ) ;
140- subplot . setOptions ( this . layerIds [ k ] , 'setPaintProperty' , opts . paint ) ;
148+ if ( opts . layout . visibility === 'visible' ) {
149+ this . setSourceData ( k , opts ) ;
150+ subplot . setOptions ( this . layerIds [ k ] , 'setPaintProperty' , opts . paint ) ;
151+ }
141152 }
142153 }
143154
0 commit comments