Skip to content

Commit

Permalink
Use time.unit option to create default min/max for empty chart (chart…
Browse files Browse the repository at this point in the history
  • Loading branch information
jcopperfield authored and simonbrunel committed Dec 15, 2017
1 parent 99f57be commit 512f633
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 5 deletions.
7 changes: 4 additions & 3 deletions src/scales/scale.time.js
Expand Up @@ -504,6 +504,7 @@ module.exports = function(Chart) {
var me = this;
var chart = me.chart;
var timeOpts = me.options.time;
var unit = timeOpts.unit || 'day';
var min = MAX_INTEGER;
var max = MIN_INTEGER;
var timestamps = [];
Expand Down Expand Up @@ -555,9 +556,9 @@ module.exports = function(Chart) {
min = parse(timeOpts.min, me) || min;
max = parse(timeOpts.max, me) || max;

// In case there is no valid min/max, let's use today limits
min = min === MAX_INTEGER ? +moment().startOf('day') : min;
max = max === MIN_INTEGER ? +moment().endOf('day') + 1 : max;
// In case there is no valid min/max, set limits based on unit time option
min = min === MAX_INTEGER ? +moment().startOf(unit) : min;
max = max === MIN_INTEGER ? +moment().endOf(unit) + 1 : max;

// Make sure that max is strictly higher than min (required by the lookup table)
me.min = Math.min(min, max);
Expand Down
32 changes: 30 additions & 2 deletions test/specs/scale.time.tests.js
Expand Up @@ -703,7 +703,7 @@ describe('Time scale tests', function() {
expect(getTicksLabels(scale)).toEqual([
'2017', '2019', '2020', '2025', '2042']);
});
it ('should correctly handle empty `data.labels`', function() {
it ('should correctly handle empty `data.labels` using "day" if `time.unit` is undefined`', function() {
var chart = this.chart;
var scale = chart.scales.x;

Expand All @@ -714,6 +714,19 @@ describe('Time scale tests', function() {
expect(scale.max).toEqual(+moment().endOf('day') + 1);
expect(getTicksLabels(scale)).toEqual([]);
});
it ('should correctly handle empty `data.labels` using `time.unit`', function() {
var chart = this.chart;
var scale = chart.scales.x;
var options = chart.options.scales.xAxes[0];

options.time.unit = 'year';
chart.data.labels = [];
chart.update();

expect(scale.min).toEqual(+moment().startOf('year'));
expect(scale.max).toEqual(+moment().endOf('year') + 1);
expect(getTicksLabels(scale)).toEqual([]);
});
});

describe('is "data"', function() {
Expand Down Expand Up @@ -784,7 +797,7 @@ describe('Time scale tests', function() {
expect(getTicksLabels(scale)).toEqual([
'2017', '2018', '2019', '2020', '2025', '2042', '2043']);
});
it ('should correctly handle empty `data.labels`', function() {
it ('should correctly handle empty `data.labels` using "day" if `time.unit` is undefined`', function() {
var chart = this.chart;
var scale = chart.scales.x;

Expand All @@ -796,6 +809,21 @@ describe('Time scale tests', function() {
expect(getTicksLabels(scale)).toEqual([
'2018', '2020', '2043']);
});
it ('should correctly handle empty `data.labels` and hidden datasets using `time.unit`', function() {
var chart = this.chart;
var scale = chart.scales.x;
var options = chart.options.scales.xAxes[0];

options.time.unit = 'year';
chart.data.labels = [];
var meta = chart.getDatasetMeta(1);
meta.hidden = true;
chart.update();

expect(scale.min).toEqual(+moment().startOf('year'));
expect(scale.max).toEqual(+moment().endOf('year') + 1);
expect(getTicksLabels(scale)).toEqual([]);
});
});
});

Expand Down

0 comments on commit 512f633

Please sign in to comment.