Export annotation logic
parent
487877e2d4
commit
b1a3807939
|
@ -0,0 +1,34 @@
|
||||||
|
export const getAnnotations = (graph, annotations) => {
|
||||||
|
if (!graph) {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
|
||||||
|
const [xStart, xEnd] = graph.xAxisRange()
|
||||||
|
return annotations.reduce((acc, a) => {
|
||||||
|
// Don't render if annotation.time is outside the graph
|
||||||
|
if (+a.time < xStart || +a.time > xEnd) {
|
||||||
|
return acc
|
||||||
|
}
|
||||||
|
// If annotation does not have duration, include in array
|
||||||
|
if (!a.duration) {
|
||||||
|
return [...acc, a]
|
||||||
|
}
|
||||||
|
|
||||||
|
const annotationEndpoint = {
|
||||||
|
...a,
|
||||||
|
time: String(Number(a.time) + Number(a.duration)),
|
||||||
|
duration: '',
|
||||||
|
}
|
||||||
|
|
||||||
|
const endpointOutOfBounds =
|
||||||
|
+annotationEndpoint.time < xStart || +annotationEndpoint.time > xEnd
|
||||||
|
|
||||||
|
// If endpoint is out of bounds, just render the start point
|
||||||
|
if (endpointOutOfBounds) {
|
||||||
|
return [...acc, a]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Render both the start and end point
|
||||||
|
return [...acc, a, annotationEndpoint]
|
||||||
|
}, [])
|
||||||
|
}
|
|
@ -13,6 +13,7 @@ import getRange, {getStackedRange} from 'shared/parsing/getRangeForDygraph'
|
||||||
import {DISPLAY_OPTIONS} from 'src/dashboards/constants'
|
import {DISPLAY_OPTIONS} from 'src/dashboards/constants'
|
||||||
import {buildDefaultYLabel} from 'shared/presenters'
|
import {buildDefaultYLabel} from 'shared/presenters'
|
||||||
import {numberValueFormatter} from 'src/utils/formatting'
|
import {numberValueFormatter} from 'src/utils/formatting'
|
||||||
|
import {getAnnotations} from 'src/shared/annotations/helpers'
|
||||||
import {
|
import {
|
||||||
OPTIONS,
|
OPTIONS,
|
||||||
LINE_COLORS,
|
LINE_COLORS,
|
||||||
|
@ -403,47 +404,14 @@ export default class Dygraph extends Component {
|
||||||
isFilterVisible,
|
isFilterVisible,
|
||||||
} = this.state
|
} = this.state
|
||||||
|
|
||||||
let annotationsWithEndpoints = []
|
|
||||||
|
|
||||||
if (this.dygraph) {
|
|
||||||
const [xStart, xEnd] = this.dygraph.xAxisRange()
|
|
||||||
annotationsWithEndpoints = annotations.reduce((acc, a) => {
|
|
||||||
// Don't render if annotation.time is outside the graph
|
|
||||||
if (+a.time < xStart || +a.time > xEnd) {
|
|
||||||
return acc
|
|
||||||
}
|
|
||||||
// If annotation does not have duration, include in array
|
|
||||||
if (!a.duration) {
|
|
||||||
return [...acc, a]
|
|
||||||
}
|
|
||||||
|
|
||||||
const annotationEndpoint = {
|
|
||||||
...a,
|
|
||||||
time: String(Number(a.time) + Number(a.duration)),
|
|
||||||
duration: '',
|
|
||||||
}
|
|
||||||
|
|
||||||
const endpointOutOfBounds =
|
|
||||||
+annotationEndpoint.time < xStart || +annotationEndpoint.time > xEnd
|
|
||||||
|
|
||||||
// If endpoint is out of bounds, just render the start point
|
|
||||||
if (endpointOutOfBounds) {
|
|
||||||
return [...acc, a]
|
|
||||||
}
|
|
||||||
|
|
||||||
// Render both the start and end point
|
|
||||||
return [...acc, a, annotationEndpoint]
|
|
||||||
}, [])
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="dygraph-child" onMouseLeave={this.deselectCrosshair}>
|
<div className="dygraph-child" onMouseLeave={this.deselectCrosshair}>
|
||||||
<Annotations
|
<Annotations
|
||||||
annotations={annotationsWithEndpoints}
|
annotations={getAnnotations(this.dygraph, annotations)}
|
||||||
dygraph={this.dygraph}
|
dygraph={this.dygraph}
|
||||||
/>
|
/>
|
||||||
<AnnotationWindows
|
<AnnotationWindows
|
||||||
annotations={annotationsWithEndpoints}
|
annotations={getAnnotations(this.dygraph, annotations)}
|
||||||
dygraph={this.dygraph}
|
dygraph={this.dygraph}
|
||||||
/>
|
/>
|
||||||
<DygraphLegend
|
<DygraphLegend
|
||||||
|
|
Loading…
Reference in New Issue