Skip to content

Commit 053be81

Browse files
committed
handle to-date with step > 1 case
1 parent 8b4340e commit 053be81

File tree

3 files changed

+81
-9
lines changed

3 files changed

+81
-9
lines changed

src/components/rangeselector/button_attributes.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ module.exports = {
3131
count: {
3232
valType: 'number',
3333
role: 'info',
34+
min: 0,
3435
dflt: 1,
3536
description: [
3637
''

src/components/rangeselector/get_update_object.js

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,21 +36,24 @@ function getXRange(axisLayout, buttonLayout) {
3636
var currentRange = axisLayout.range;
3737
var base = new Date(currentRange[1]);
3838

39-
var range0, range1;
39+
var step = buttonLayout.step,
40+
count = buttonLayout.count;
41+
42+
var range0;
4043

4144
switch(buttonLayout.stepmode) {
4245
case 'backward':
43-
range1 = currentRange[1];
44-
range0 = d3.time[buttonLayout.step]
45-
.offset(base, -buttonLayout.count).getTime();
46+
range0 = d3.time[step].offset(base, -count).getTime();
4647
break;
4748

4849
case 'to date':
49-
range1 = currentRange[1];
50-
range0 = d3.time[buttonLayout.step]
51-
.floor(base).getTime();
50+
var base2 = d3.time[step].offset(base, -(count - 1));
51+
52+
range0 = d3.time[step].floor(base2).getTime();
5253
break;
5354
}
5455

56+
var range1 = currentRange[1];
57+
5558
return [range0, range1];
5659
}

test/jasmine/tests/range_selector_test.js

Lines changed: 70 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ describe('[range selector suite]', function() {
8383

8484
});
8585

86-
describe('getUpdateObject', function() {
86+
describe('getUpdateObject:', function() {
8787
var axisLayout = {
8888
range: [
8989
(new Date(1948, 0, 1)).getTime(),
@@ -132,7 +132,19 @@ describe('[range selector suite]', function() {
132132
assertRanges(update, new Date(2015, 4, 30), new Date(2015, 10, 30));
133133
});
134134

135-
it('should return update object (year-to-date case)', function() {
135+
it('should return update object (5 months to-date case)', function() {
136+
var buttonLayout = {
137+
step: 'month',
138+
stepmode: 'to date',
139+
count: 5
140+
};
141+
142+
var update = getUpdateObject(axisLayout, buttonLayout);
143+
144+
assertRanges(update, new Date(2015, 6, 1), new Date(2015, 10, 30));
145+
});
146+
147+
it('should return update object (1 year to-date case)', function() {
136148
var buttonLayout = {
137149
step: 'year',
138150
stepmode: 'to date',
@@ -144,6 +156,18 @@ describe('[range selector suite]', function() {
144156
assertRanges(update, new Date(2015, 0, 1), new Date(2015, 10, 30));
145157
});
146158

159+
it('should return update object (10 year to-date case)', function() {
160+
var buttonLayout = {
161+
step: 'year',
162+
stepmode: 'to date',
163+
count: 10
164+
};
165+
166+
var update = getUpdateObject(axisLayout, buttonLayout);
167+
168+
assertRanges(update, new Date(2006, 0, 1), new Date(2015, 10, 30));
169+
});
170+
147171
it('should return update object (1 year backward case)', function() {
148172
var buttonLayout = {
149173
step: 'year',
@@ -216,6 +240,50 @@ describe('[range selector suite]', function() {
216240

217241
assertRanges(update, new Date(2015, 10, 29, 23, 59, 50), new Date(2015, 10, 30));
218242
});
243+
244+
it('should return update object (12 hour to-date case)', function() {
245+
var buttonLayout = {
246+
step: 'hour',
247+
stepmode: 'to date',
248+
count: 12
249+
};
250+
251+
axisLayout.range[1] = new Date(2015, 10, 30, 12).getTime();
252+
253+
var update = getUpdateObject(axisLayout, buttonLayout);
254+
255+
assertRanges(update, new Date(2015, 10, 30, 1), new Date(2015, 10, 30, 12));
256+
});
257+
258+
it('should return update object (15 minute backward case)', function() {
259+
var buttonLayout = {
260+
step: 'minute',
261+
stepmode: 'to date',
262+
count: 20
263+
};
264+
265+
axisLayout.range[1] = new Date(2015, 10, 30, 12, 20).getTime();
266+
267+
var update = getUpdateObject(axisLayout, buttonLayout);
268+
269+
assertRanges(update, new Date(2015, 10, 30, 12, 1), new Date(2015, 10, 30, 12, 20));
270+
});
271+
272+
it('should return update object (2 second to-date case)', function() {
273+
274+
var buttonLayout = {
275+
step: 'second',
276+
stepmode: 'to date',
277+
count: 2
278+
};
279+
280+
axisLayout.range[1] = new Date(2015, 10, 30, 12, 20, 2).getTime();
281+
282+
var update = getUpdateObject(axisLayout, buttonLayout);
283+
284+
assertRanges(update, new Date(2015, 10, 30, 12, 20, 1), new Date(2015, 10, 30, 12, 20, 2));
285+
});
286+
219287
});
220288

221289

0 commit comments

Comments
 (0)