diff --git a/public/app/plugins/panel/candlestick/CandlestickPanel.tsx b/public/app/plugins/panel/candlestick/CandlestickPanel.tsx index 5d27d426974..dff38c09883 100644 --- a/public/app/plugins/panel/candlestick/CandlestickPanel.tsx +++ b/public/app/plugins/panel/candlestick/CandlestickPanel.tsx @@ -308,7 +308,7 @@ export const CandlestickPanel: React.FC = ({ /> )} - + ); }} diff --git a/public/app/plugins/panel/state-timeline/StateTimelinePanel.tsx b/public/app/plugins/panel/state-timeline/StateTimelinePanel.tsx index 54d5ea2f0b0..3a0f899c06a 100755 --- a/public/app/plugins/panel/state-timeline/StateTimelinePanel.tsx +++ b/public/app/plugins/panel/state-timeline/StateTimelinePanel.tsx @@ -118,7 +118,7 @@ export const StateTimelinePanel: React.FC = ({ timeZone={timeZone} renderTooltip={renderCustomTooltip} /> - + ); }} diff --git a/public/app/plugins/panel/status-history/StatusHistoryPanel.tsx b/public/app/plugins/panel/status-history/StatusHistoryPanel.tsx index e7b35c9eca5..982ea02d88f 100755 --- a/public/app/plugins/panel/status-history/StatusHistoryPanel.tsx +++ b/public/app/plugins/panel/status-history/StatusHistoryPanel.tsx @@ -72,7 +72,7 @@ export const StatusHistoryPanel: React.FC = ({ <> - + ); }} diff --git a/public/app/plugins/panel/timeseries/TimeSeriesPanel.tsx b/public/app/plugins/panel/timeseries/TimeSeriesPanel.tsx index 104031cfc88..c479cf2deb5 100644 --- a/public/app/plugins/panel/timeseries/TimeSeriesPanel.tsx +++ b/public/app/plugins/panel/timeseries/TimeSeriesPanel.tsx @@ -130,7 +130,7 @@ export const TimeSeriesPanel: React.FC = ({ /> )} - + ); }} diff --git a/public/app/plugins/panel/timeseries/plugins/OutsideRangePlugin.tsx b/public/app/plugins/panel/timeseries/plugins/OutsideRangePlugin.tsx index 6cf3cd30532..bcc7cf8a87c 100644 --- a/public/app/plugins/panel/timeseries/plugins/OutsideRangePlugin.tsx +++ b/public/app/plugins/panel/timeseries/plugins/OutsideRangePlugin.tsx @@ -1,34 +1,43 @@ -import React, { useLayoutEffect, useRef } from 'react'; -import uPlot from 'uplot'; +import React, { useLayoutEffect, useRef, useState } from 'react'; +import uPlot, { Scale } from 'uplot'; -import { TimeRange, AbsoluteTimeRange } from '@grafana/data'; +import { AbsoluteTimeRange } from '@grafana/data'; import { UPlotConfigBuilder, Button } from '@grafana/ui'; interface ThresholdControlsPluginProps { config: UPlotConfigBuilder; - range: TimeRange; onChangeTimeRange: (timeRange: AbsoluteTimeRange) => void; } -export const OutsideRangePlugin: React.FC = ({ config, range, onChangeTimeRange }) => { +export const OutsideRangePlugin: React.FC = ({ config, onChangeTimeRange }) => { const plotInstance = useRef(); + const [timevalues, setTimeValues] = useState([]); + const [timeRange, setTimeRange] = useState(); useLayoutEffect(() => { config.addHook('init', (u) => { plotInstance.current = u; }); + + config.addHook('setScale', (u) => { + setTimeValues(u.data?.[0] ?? []); + setTimeRange(u.scales['x'] ?? undefined); + }); }, [config]); - const timevalues = plotInstance.current?.data?.[0]; - if (!timevalues || !plotInstance.current || timevalues.length < 2 || !onChangeTimeRange) { + if (timevalues.length < 2 || !onChangeTimeRange) { + return null; + } + + if (!timeRange || !timeRange.time || !timeRange.min || !timeRange.max!) { return null; } // Time values are always sorted for uPlot to work const first = timevalues[0]; const last = timevalues[timevalues.length - 1]; - const fromX = range.from.valueOf(); - const toX = range.to.valueOf(); + const fromX = timeRange.min; + const toX = timeRange.max; // (StartA <= EndB) and (EndA >= StartB) if (first <= toX && last >= fromX) {