From bd8c4b82339a0ba98dec31974659d057a8f145ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 8 Nov 2016 12:16:19 -0500 Subject: [PATCH] filter: build target category list before applying filter fn --- src/transforms/filter.js | 6 ++++ test/jasmine/tests/transform_filter_test.js | 32 ++++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/transforms/filter.js b/src/transforms/filter.js index 8c9a23b7071..ca39d0861a8 100644 --- a/src/transforms/filter.js +++ b/src/transforms/filter.js @@ -184,7 +184,13 @@ function getDataToCoordFunc(gd, trace, target) { type: autoType(target), _categories: [] }; + setConvert(ax); + + // build up ax._categories (usually done during ax.makeCalcdata() + for(var i = 0; i < target.length; i++) { + ax.d2c(target[i]); + } } else { ax = axisIds.getFromTrace(gd, trace, target); diff --git a/test/jasmine/tests/transform_filter_test.js b/test/jasmine/tests/transform_filter_test.js index 722b810c7a2..02716cb7b81 100644 --- a/test/jasmine/tests/transform_filter_test.js +++ b/test/jasmine/tests/transform_filter_test.js @@ -638,7 +638,7 @@ describe('filter transforms calc:', function() { expect(out[0].transforms[0].target).toEqual([0, 0, 0]); }); - it('with categorical items', function() { + it('with categorical items and *{}*', function() { var out = _transform([Lib.extendDeep({}, _base, { transforms: [{ target: ['a', 'a', 'b', 'b', 'a', 'b', 'a'], @@ -651,6 +651,36 @@ describe('filter transforms calc:', function() { expect(out[0].transforms[0].target).toEqual(['b', 'b', 'b']); }); + it('with categorical items and *<* & *>=*', function() { + var out = _transform([{ + x: [1, 2, 3], + y: [10, 20, 30], + transforms: [{ + type: 'filter', + operation: '<', + target: ['a', 'b', 'c'], + value: 'c' + }] + }, { + x: [1, 2, 3], + y: [30, 20, 10], + transforms: [{ + type: 'filter', + operation: '>=', + target: ['a', 'b', 'c'], + value: 'b' + }] + }]); + + expect(out[0].x).toEqual([1, 2]); + expect(out[0].y).toEqual([10, 20]); + expect(out[0].transforms[0].target).toEqual(['a', 'b']); + + expect(out[1].x).toEqual([2, 3]); + expect(out[1].y).toEqual([20, 10]); + expect(out[1].transforms[0].target).toEqual(['b', 'c']); + }); + it('with dates items', function() { var out = _transform([Lib.extendDeep({}, _base, { transforms: [{