Export getRange to helper funciton

pull/765/head
Andrew Watkins 2017-01-12 13:44:22 -08:00
parent 63adc6e556
commit c2850bb670
2 changed files with 57 additions and 57 deletions

View File

@ -1,6 +1,7 @@
/* eslint-disable no-magic-numbers */
import React, {PropTypes} from 'react';
import Dygraph from '../../external/dygraph';
import getRange from 'src/shared/parsing/getRangeForDygraph';
import _ from 'lodash';
const {
@ -179,60 +180,3 @@ export default React.createClass({
);
},
});
const PADDING_FACTOR = 0.1;
function getRange(timeSeries, override, value = null, rangeValue = null) {
if (override) {
return override;
}
const subtractPadding = (val) => +val - val * PADDING_FACTOR;
const addPadding = (val) => +val + val * PADDING_FACTOR;
const pad = (val, side) => {
if (val === null || val === '') {
return null;
}
if (val < 0) {
return side === "top" ? subtractPadding(val) : addPadding(val);
}
return side === "top" ? addPadding(val) : subtractPadding(val);
};
const points = [
...timeSeries,
[null, pad(value)],
[null, pad(rangeValue, "top")],
];
const range = points.reduce(([min, max], series) => {
for (let i = 1; i < series.length; i++) {
const val = series[i];
if (max === null) {
max = val;
}
if (min === null) {
min = val;
}
if (typeof val === "number") {
min = Math.min(min, val);
max = Math.max(max, val);
}
return [min, max];
}
}, [null, null]);
// Dygraph will not reliably plot X / Y axis labels if min and max are both 0
if (range[0] === 0 && range[1] === 0) {
return [null, null];
}
return range;
}

View File

@ -0,0 +1,56 @@
const PADDING_FACTOR = 0.1;
export default function getRange(timeSeries, override, value = null, rangeValue = null) {
if (override) {
return override;
}
const subtractPadding = (val) => +val - val * PADDING_FACTOR;
const addPadding = (val) => +val + val * PADDING_FACTOR;
const pad = (val, side) => {
if (val === null || val === '') {
return null;
}
if (val < 0) {
return side === "top" ? subtractPadding(val) : addPadding(val);
}
return side === "top" ? addPadding(val) : subtractPadding(val);
};
const points = [
...timeSeries,
[null, pad(value)],
[null, pad(rangeValue, "top")],
];
const range = points.reduce(([min, max], series) => {
for (let i = 1; i < series.length; i++) {
const val = series[i];
if (max === null) {
max = val;
}
if (min === null) {
min = val;
}
if (typeof val === "number") {
min = Math.min(min, val);
max = Math.max(max, val);
}
}
return [min, max];
}, [null, null]);
// If time series is such that min and max are equal use Dygraph defaults
if (range[0] === range[1]) {
return [null, null];
}
return range;
}