11// Libraries
2- import React , { FC , useMemo , useContext } from 'react'
2+ import React , { FC , useContext , useEffect , useMemo , useState } from 'react'
33import {
44 Config ,
55 DomainLabel ,
66 LINE_COUNT ,
77 Plot ,
8+ SINGLE_STAT_SVG_NO_USER_SELECT ,
89 STACKED_LINE_CUMULATIVE ,
910 SingleStatLayerConfig ,
1011 createGroupIDColumn ,
1112 getDomainDataFromLines ,
1213 getLatestValues ,
1314 lineTransform ,
1415} from '@influxdata/giraffe'
16+ import { RemoteDataState } from '@influxdata/clockface'
1517
1618// Redux
1719import { isAnnotationsModeEnabled } from 'src/annotations/selectors'
1820
1921// Component
2022import EmptyGraphMessage from 'src/shared/components/EmptyGraphMessage'
23+ import ViewLoadingSpinner from 'src/visualization/components/internal/ViewLoadingSpinner'
24+
25+ // Context
26+ import { AppSettingContext } from 'src/shared/contexts/app'
2127
2228// Utils
2329import { useAxisTicksGenerator } from 'src/visualization/utils/useAxisTicksGenerator'
2430import { getFormatter } from 'src/visualization/utils/getFormatter'
2531import { useLegendOpacity } from 'src/visualization/utils/useLegendOpacity'
2632import { useStaticLegend } from 'src/visualization/utils/useStaticLegend'
33+ import { useZoomQuery } from 'src/visualization/utils/useZoomQuery'
2734import {
28- useVisXDomainSettings ,
29- useVisYDomainSettings ,
35+ useZoomRequeryXDomainSettings ,
36+ useZoomRequeryYDomainSettings ,
3037} from 'src/visualization/utils/useVisDomainSettings'
3138import {
3239 geomToInterpolation ,
@@ -36,16 +43,16 @@ import {
3643 defaultXColumn ,
3744 defaultYColumn ,
3845} from 'src/shared/utils/vis'
39- import { generateThresholdsListHexs } from 'src/shared/constants/colorOperations'
40- import { AppSettingContext } from 'src/shared/contexts/app'
46+ import { isFlagEnabled } from 'src/shared/utils/featureFlag'
4147
4248// Constants
4349import { VIS_THEME , VIS_THEME_LIGHT } from 'src/shared/constants'
4450import { DEFAULT_LINE_COLORS } from 'src/shared/constants/graphColorPalettes'
4551import { INVALID_DATA_COPY } from 'src/visualization/constants'
52+ import { generateThresholdsListHexs } from 'src/shared/constants/colorOperations'
4653
4754// Types
48- import { LinePlusSingleStatProperties } from 'src/types'
55+ import { LinePlusSingleStatProperties , InternalFromFluxResult } from 'src/types'
4956import { VisualizationProps } from 'src/visualization'
5057
5158// Annotations
@@ -63,7 +70,19 @@ const SingleStatWithLine: FC<Props> = ({
6370 timeRange,
6471 annotations,
6572 cellID,
73+ transmitWindowPeriod,
6674} ) => {
75+ const [ resultState , setResultState ] = useState ( result )
76+ const [ preZoomResult , setPreZoomResult ] =
77+ useState < InternalFromFluxResult > ( null )
78+ const [ requeryStatus , setRequeryStatus ] = useState < RemoteDataState > (
79+ RemoteDataState . NotStarted
80+ )
81+
82+ useEffect ( ( ) => {
83+ setResultState ( result )
84+ } , [ result ] )
85+
6786 const { theme, timeZone} = useContext ( AppSettingContext )
6887 const axisTicksOptions = useAxisTicksGenerator ( properties )
6988 const tooltipOpacity = useLegendOpacity ( properties . legendOpacity )
@@ -116,12 +135,6 @@ const SingleStatWithLine: FC<Props> = ({
116135 [ result ]
117136 )
118137
119- const [ xDomain , onSetXDomain , onResetXDomain ] = useVisXDomainSettings (
120- storedXDomain ,
121- result . table . getColumn ( xColumn , 'number' ) ,
122- timeRange
123- )
124-
125138 const memoizedYColumnData = useMemo ( ( ) => {
126139 if ( properties . position === 'stacked' ) {
127140 const { lineData} = lineTransform (
@@ -145,9 +158,37 @@ const SingleStatWithLine: FC<Props> = ({
145158 properties . position ,
146159 ] )
147160
148- const [ yDomain , onSetYDomain , onResetYDomain ] = useVisYDomainSettings (
149- storedYDomain ,
150- memoizedYColumnData
161+ const zoomQuery = useZoomQuery ( properties )
162+
163+ const [ xDomain , onSetXDomain , onResetXDomain ] = useZoomRequeryXDomainSettings (
164+ {
165+ adaptiveZoomHide : properties . adaptiveZoomHide ,
166+ data : resultState . table . getColumn ( xColumn , 'number' ) ,
167+ parsedResult : resultState ,
168+ preZoomResult,
169+ query : zoomQuery ,
170+ setPreZoomResult,
171+ setRequeryStatus,
172+ setResult : setResultState ,
173+ storedDomain : storedXDomain ,
174+ timeRange,
175+ transmitWindowPeriod,
176+ }
177+ )
178+
179+ const [ yDomain , onSetYDomain , onResetYDomain ] = useZoomRequeryYDomainSettings (
180+ {
181+ adaptiveZoomHide : properties . adaptiveZoomHide ,
182+ data : memoizedYColumnData ,
183+ parsedResult : resultState ,
184+ preZoomResult,
185+ query : zoomQuery ,
186+ setPreZoomResult,
187+ setRequeryStatus,
188+ setResult : setResultState ,
189+ storedDomain : storedYDomain ,
190+ transmitWindowPeriod,
191+ }
151192 )
152193
153194 const legendColumns = filterNoisyColumns (
@@ -250,6 +291,7 @@ const SingleStatWithLine: FC<Props> = ({
250291 svgTextAttributes : {
251292 'data-testid' : 'single-stat--text' ,
252293 } ,
294+ svgStyle : SINGLE_STAT_SVG_NO_USER_SELECT ,
253295 }
254296
255297 config . layers . push ( statLayer )
@@ -270,7 +312,14 @@ const SingleStatWithLine: FC<Props> = ({
270312 'singleStatWline'
271313 )
272314
273- return < Plot config = { config } />
315+ return (
316+ < >
317+ { isFlagEnabled ( 'zoomRequery' ) && (
318+ < ViewLoadingSpinner loading = { requeryStatus } />
319+ ) }
320+ < Plot config = { config } />
321+ </ >
322+ )
274323}
275324
276325export default SingleStatWithLine
0 commit comments