@@ -74,9 +74,18 @@ var attrs = exports.attributes = {
74
74
'the first (last) linked value.'
75
75
] . join ( ' ' )
76
76
} ,
77
+ enabled : {
78
+ valType : 'boolean' ,
79
+ dflt : true ,
80
+ description : [
81
+ 'Determines whether this aggregation function is enabled or disabled.'
82
+ ] . join ( ' ' )
83
+ }
77
84
}
78
85
} ;
79
86
87
+ var aggAttrs = attrs . aggregations ;
88
+
80
89
/**
81
90
* Supply transform attributes defaults
82
91
*
@@ -129,20 +138,22 @@ exports.supplyDefaults = function(transformIn, traceOut) {
129
138
}
130
139
131
140
var aggregationsIn = transformIn . aggregations ;
132
- var aggregationsOut = transformOut . aggregations = [ ] ;
141
+ var aggregationsOut = transformOut . aggregations = new Array ( aggregationsIn . length ) ;
133
142
134
143
if ( aggregationsIn ) {
135
144
for ( i = 0 ; i < aggregationsIn . length ; i ++ ) {
136
145
var aggregationOut = { } ;
137
- var target = Lib . coerce ( aggregationsIn [ i ] , aggregationOut , attrs . aggregations , 'target' ) ;
138
- var func = Lib . coerce ( aggregationsIn [ i ] , aggregationOut , attrs . aggregations , 'func' ) ;
146
+ var target = Lib . coerce ( aggregationsIn [ i ] , aggregationOut , aggAttrs , 'target' ) ;
147
+ var func = Lib . coerce ( aggregationsIn [ i ] , aggregationOut , aggAttrs , 'func' ) ;
148
+ var enabledi = Lib . coerce ( aggregationsIn [ i ] , aggregationOut , aggAttrs , 'enabled' ) ;
139
149
140
150
// add this aggregation to the output only if it's the first instance
141
151
// of a valid target attribute - or an unused target attribute with "count"
142
- if ( target && ( arrayAttrs [ target ] || ( func === 'count' && arrayAttrs [ target ] === undefined ) ) ) {
152
+ if ( enabledi && target && ( arrayAttrs [ target ] || ( func === 'count' && arrayAttrs [ target ] === undefined ) ) ) {
143
153
arrayAttrs [ target ] = 0 ;
144
- aggregationsOut . push ( aggregationOut ) ;
154
+ aggregationsOut [ i ] = aggregationOut ;
145
155
}
156
+ else aggregationsOut [ i ] = { enabled : false } ;
146
157
}
147
158
}
148
159
@@ -151,7 +162,8 @@ exports.supplyDefaults = function(transformIn, traceOut) {
151
162
if ( arrayAttrs [ arrayAttrArray [ i ] ] ) {
152
163
aggregationsOut . push ( {
153
164
target : arrayAttrArray [ i ] ,
154
- func : attrs . aggregations . func . dflt
165
+ func : aggAttrs . func . dflt ,
166
+ enabled : true
155
167
} ) ;
156
168
}
157
169
}
@@ -189,11 +201,17 @@ exports.calcTransform = function(gd, trace, opts) {
189
201
}
190
202
191
203
if ( typeof groups === 'string' ) {
192
- aggregateOneArray ( gd , trace , groupings , { target : groups , func : 'first' } ) ;
204
+ aggregateOneArray ( gd , trace , groupings , {
205
+ target : groups ,
206
+ func : 'first' ,
207
+ enabled : true
208
+ } ) ;
193
209
}
194
210
} ;
195
211
196
212
function aggregateOneArray ( gd , trace , groupings , aggregation ) {
213
+ if ( ! aggregation . enabled ) return ;
214
+
197
215
var attr = aggregation . target ;
198
216
var targetNP = Lib . nestedProperty ( trace , attr ) ;
199
217
var arrayIn = targetNP . get ( ) ;
0 commit comments