Skip to content

Commit caf707e

Browse files
committed
working, cascading filter transform points
1 parent e1589bc commit caf707e

File tree

2 files changed

+36
-5
lines changed

2 files changed

+36
-5
lines changed

src/transforms/filter.js

+28-3
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,8 @@ exports.calcTransform = function(gd, trace, opts) {
170170
var d2c = Axes.getDataToCoordFunc(gd, trace, target, targetArray);
171171
var filterFunc = getFilterFunc(opts, d2c, targetCalendar);
172172
var originalArrays = {};
173+
var indexToPoints = {};
174+
var index = 0;
173175

174176
function forAllAttrs(fn, index) {
175177
for(var j = 0; j < arrayAttrs.length; j++) {
@@ -204,10 +206,33 @@ exports.calcTransform = function(gd, trace, opts) {
204206
forAllAttrs(initFn);
205207

206208
// loop through filter array, fill trace arrays if passed
207-
for(var i = 0; i < len; i++) {
208-
var passed = filterFunc(targetArray[i]);
209-
if(passed) forAllAttrs(fillFn, i);
209+
210+
var prevTransforms = trace.transforms.filter(function(tr) {return tr.indexToPoints;});
211+
212+
if(prevTransforms.length > 0) {
213+
214+
var prevTransform = prevTransforms[prevTransforms.length - 1];
215+
var prevIndexToPoints = prevTransform.indexToPoints;
216+
217+
for(var i = 0; i < len; i++) {
218+
var passed = filterFunc(targetArray[i]);
219+
if(passed) {
220+
forAllAttrs(fillFn, i);
221+
indexToPoints[index++] = prevIndexToPoints[i];
222+
}
223+
}
224+
} else {
225+
for(var i = 0; i < len; i++) {
226+
var passed = filterFunc(targetArray[i]);
227+
if(passed) {
228+
forAllAttrs(fillFn, i);
229+
indexToPoints[index++] = [i];
230+
}
231+
}
210232
}
233+
234+
opts.indexToPoints = indexToPoints;
235+
console.log(indexToPoints)
211236
};
212237

213238
function getFilterFunc(opts, d2c, targetCalendar) {

test/jasmine/tests/transform_filter_test.js

+8-2
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ describe('filter transforms defaults:', function() {
6262
traceIn = {
6363
x: [1, 2, 3],
6464
transforms: [{
65-
type: 'filter',
65+
type: 'filter'
6666
}, {
6767
type: 'filter',
6868
target: 0
@@ -143,6 +143,7 @@ describe('filter transforms calc:', function() {
143143
expect(out[0].x).toEqual([0, 1]);
144144
expect(out[0].y).toEqual([1, 2]);
145145
expect(out[0].z).toEqual(['2016-10-21', '2016-12-02']);
146+
expect(out[0].transforms[0].indexToPoints).toEqual({0: [3], 1 :[4]});
146147
});
147148

148149
it('should use the calendar from the target attribute if target is a string', function() {
@@ -261,13 +262,14 @@ describe('filter transforms calc:', function() {
261262
expect(out[0].x).toEqual([-2, 2, 3]);
262263
expect(out[0].y).toEqual([3, 3, 1]);
263264
expect(out[0].marker.color).toEqual([0.3, 0.3, 0.4]);
265+
expect(out[0].transforms[0].indexToPoints).toEqual({0: [2], 1 :[5], 2: [6]});
264266
});
265267

266268
it('filters should handle array on base trace attributes', function() {
267269
var out = _transform([Lib.extendDeep({}, base, {
268270
hoverinfo: ['x', 'y', 'text', 'name', 'none', 'skip', 'all'],
269271
hoverlabel: {
270-
bgcolor: ['red', 'green', 'blue', 'black', 'yellow', 'cyan', 'pink'],
272+
bgcolor: ['red', 'green', 'blue', 'black', 'yellow', 'cyan', 'pink']
271273
},
272274
transforms: [{
273275
type: 'filter',
@@ -314,6 +316,8 @@ describe('filter transforms calc:', function() {
314316

315317
expect(out[0].x).toEqual([1, 2]);
316318
expect(out[0].y).toEqual([2, 3]);
319+
expect(out[0].transforms[0].indexToPoints).toEqual({0: [4], 1 :[5], 2: [6]});
320+
expect(out[0].transforms[1].indexToPoints).toEqual({0: [4], 1 :[5]});
317321
});
318322

319323
it('filters should chain as AND (case 2)', function() {
@@ -339,6 +343,8 @@ describe('filter transforms calc:', function() {
339343

340344
expect(out[0].x).toEqual([3]);
341345
expect(out[0].y).toEqual([1]);
346+
expect(out[0].transforms[0].indexToPoints).toEqual({0: [4], 1 :[5], 2: [6]});
347+
expect(out[0].transforms[2].indexToPoints).toEqual({0: [6]});
342348
});
343349

344350
it('should preserve gaps in data when `preservegaps` is turned on', function() {

0 commit comments

Comments
 (0)