Skip to content

Commit 66645ed

Browse files
committed
set enabled:false when filter target array is empty
- see #2908 for more info, - this fixes many potential problems downstream
1 parent df35b38 commit 66645ed

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

src/transforms/filter.js

+7-1
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,16 @@ exports.supplyDefaults = function(transformIn) {
138138
var enabled = coerce('enabled');
139139

140140
if(enabled) {
141+
var target = coerce('target');
142+
143+
if(Lib.isArrayOrTypedArray(target) && target.length === 0) {
144+
transformOut.enabled = false;
145+
return transformOut;
146+
}
147+
141148
coerce('preservegaps');
142149
coerce('operation');
143150
coerce('value');
144-
coerce('target');
145151

146152
var handleCalendarDefaults = Registry.getComponentMethod('calendars', 'handleDefaults');
147153
handleCalendarDefaults(transformIn, transformOut, 'valuecalendar', null);

test/jasmine/tests/transform_filter_test.js

+27
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,33 @@ describe('filter transforms defaults:', function() {
8686
expect(traceOut.transforms[2].target).toEqual('x');
8787
expect(traceOut.transforms[3].target).toEqual('marker.color');
8888
});
89+
90+
it('supplyTraceDefaults should set *enabled:false* and return early when *target* is an empty array', function() {
91+
// see https://github.com/plotly/plotly.js/issues/2908
92+
// this solves multiple problems downstream
93+
94+
traceIn = {
95+
x: [1, 2, 3],
96+
transforms: [{
97+
type: 'filter',
98+
target: []
99+
}]
100+
};
101+
traceOut = Plots.supplyTraceDefaults(traceIn, {type: 'scatter'}, 0, fullLayout);
102+
expect(traceOut.transforms[0].target).toEqual([]);
103+
expect(traceOut.transforms[0].enabled).toBe(false, 'set to false!');
104+
105+
traceIn = {
106+
x: new Float32Array([1, 2, 3]),
107+
transforms: [{
108+
type: 'filter',
109+
target: new Float32Array()
110+
}]
111+
};
112+
traceOut = Plots.supplyTraceDefaults(traceIn, {type: 'scatter'}, 0, fullLayout);
113+
expect(traceOut.transforms[0].target).toEqual(new Float32Array());
114+
expect(traceOut.transforms[0].enabled).toBe(false, 'set to false!');
115+
});
89116
});
90117

91118
describe('filter transforms calc:', function() {

0 commit comments

Comments
 (0)