Skip to content

Commit dd035ef

Browse files
committed
Add registry methods for transforms
1 parent 8f37fc7 commit dd035ef

File tree

3 files changed

+97
-8
lines changed

3 files changed

+97
-8
lines changed

src/components/legend/draw.js

+5-8
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ function drawTexts(g, gd) {
397397

398398
if(!this.text()) text = ' \u0020\u0020 ';
399399

400-
var i, transforms, direction;
400+
var transforms, direction;
401401
var fullInput = legendItem.trace._fullInput || {};
402402
var needsRedraw = false;
403403
var update = {};
@@ -411,14 +411,11 @@ function drawTexts(g, gd) {
411411
direction = transforms[transforms.length - 1].direction;
412412

413413
update[direction + '.name'] = text;
414-
} else if(fullInput.transforms) {
415-
for(i = fullInput.transforms.length - 1; i >= 0; i--) {
416-
if(fullInput.transforms[i].type === 'groupby') {
417-
break;
418-
}
419-
}
414+
} else if(Registry.hasTransform(fullInput, 'groupby')) {
415+
var groupbyIndices = Registry.getTransformIndices(fullInput, 'groupby');
416+
var index = groupbyIndices[groupbyIndices.length - 1];
420417

421-
var carr = Lib.keyedContainer(fullInput, 'transforms[' + i + '].groupnames', 'group', 'name');
418+
var carr = Lib.keyedContainer(fullInput, 'transforms[' + index + '].groupnames', 'group', 'name');
422419

423420
if(BLANK_STRING_REGEX.test(origText)) {
424421
carr.remove(legendItem.trace._group);

src/registry.js

+42
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,48 @@ exports.traceIs = function(traceType, category) {
166166
return !!_module.categories[category];
167167
};
168168

169+
/**
170+
* Determine if this trace has a transform of the given type and return
171+
* array of matching indices.
172+
*
173+
* @param {object} data
174+
* a trace object (member of data or fullData)
175+
* @param {string} type
176+
* type of trace to test
177+
* @return {array}
178+
* array of matching indices. If none found, returns []
179+
*/
180+
exports.getTransformIndices = function(data, type) {
181+
var indices = [];
182+
var transforms = data.transforms || [];
183+
for(var i = 0; i < transforms.length; i++) {
184+
if(transforms[i].type === type) {
185+
indices.push(i);
186+
}
187+
}
188+
return indices;
189+
};
190+
191+
/**
192+
* Determine if this trace has a transform of the given type
193+
*
194+
* @param {object} data
195+
* a trace object (member of data or fullData)
196+
* @param {string} type
197+
* type of trace to test
198+
* @return {boolean}
199+
*/
200+
exports.hasTransform = function(data, type) {
201+
var transforms = data.transforms || [];
202+
for(var i = 0; i < transforms.length; i++) {
203+
if(transforms[i].type === type) {
204+
return true;
205+
}
206+
}
207+
return false;
208+
209+
};
210+
169211
/**
170212
* Retrieve component module method. Falls back on noop if either the
171213
* module or the method is missing, so the result can always be safely called

test/jasmine/tests/register_test.js

+50
Original file line numberDiff line numberDiff line change
@@ -277,4 +277,54 @@ describe('the register function', function() {
277277

278278
expect(Registry.transformsRegistry['mah-transform']).toBeDefined();
279279
});
280+
281+
describe('getTransformIndices', function() {
282+
it('returns an empty array if no transforms present', function() {
283+
expect(Registry.getTransformIndices({}, 'groupby')).toEqual([]);
284+
});
285+
286+
it('returns an empty array if none present', function() {
287+
expect(Registry.getTransformIndices({
288+
transforms: [
289+
{type: 'filter'},
290+
{type: 'groupby'}
291+
]
292+
}, 'degauss')).toEqual([]);
293+
});
294+
295+
it('returns an empty array if none present', function() {
296+
expect(Registry.getTransformIndices({
297+
transforms: [
298+
{type: 'filter'},
299+
{type: 'groupby'},
300+
{type: 'groupby'}
301+
]
302+
}, 'groupby')).toEqual([1, 2]);
303+
});
304+
});
305+
306+
describe('hasTransform', function() {
307+
it('returns an false array if no transforms present', function() {
308+
expect(Registry.hasTransform({}, 'groupby')).toBe(false);
309+
});
310+
311+
it('returns an empty array if none present', function() {
312+
expect(Registry.hasTransform({
313+
transforms: [
314+
{type: 'filter'},
315+
{type: 'groupby'}
316+
]
317+
}, 'degauss')).toBe(false);
318+
});
319+
320+
it('returns an empty array if none present', function() {
321+
expect(Registry.hasTransform({
322+
transforms: [
323+
{type: 'filter'},
324+
{type: 'groupby'},
325+
{type: 'groupby'}
326+
]
327+
}, 'groupby')).toBe(true);
328+
});
329+
});
280330
});

0 commit comments

Comments
 (0)