Export getRange to helper funciton
parent
63adc6e556
commit
c2850bb670
ui/src/shared
components
parsing
|
@ -1,6 +1,7 @@
|
||||||
/* eslint-disable no-magic-numbers */
|
/* eslint-disable no-magic-numbers */
|
||||||
import React, {PropTypes} from 'react';
|
import React, {PropTypes} from 'react';
|
||||||
import Dygraph from '../../external/dygraph';
|
import Dygraph from '../../external/dygraph';
|
||||||
|
import getRange from 'src/shared/parsing/getRangeForDygraph';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
|
|
||||||
const {
|
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;
|
|
||||||
}
|
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
Loading…
Reference in New Issue