11// Libraries
2- import React , { FC , useMemo , useContext } from 'react'
3-
2+ import React , { FC , useContext , useEffect , useMemo , useState } from 'react'
43import { Config , Plot } from '@influxdata/giraffe'
4+ import { RemoteDataState } from '@influxdata/clockface'
55
66// Redux
77import { isAnnotationsModeEnabled } from 'src/annotations/selectors'
8-
98import { useDispatch , useSelector } from 'react-redux'
109
1110// Annotations
1211import { addAnnotationLayer } from 'src/visualization/utils/annotationUtils'
1312
1413// Components
1514import EmptyGraphMessage from 'src/shared/components/EmptyGraphMessage'
15+ import ViewLoadingSpinner from 'src/visualization/components/internal/ViewLoadingSpinner'
1616
1717// Utils
1818import { useAxisTicksGenerator } from 'src/visualization/utils/useAxisTicksGenerator'
1919import { getFormatter } from 'src/visualization/utils/getFormatter'
2020import { useMainColumn } from 'src/visualization/utils/useBandColumns'
2121import { useLegendOpacity } from 'src/visualization/utils/useLegendOpacity'
2222import { useStaticLegend } from 'src/visualization/utils/useStaticLegend'
23+ import { useZoomQuery } from 'src/visualization/utils/useZoomQuery'
2324import {
24- useVisXDomainSettings ,
25- useVisYDomainSettings ,
25+ useZoomRequeryXDomainSettings ,
26+ useZoomRequeryYDomainSettings ,
2627} from 'src/visualization/utils/useVisDomainSettings'
2728import {
2829 geomToInterpolation ,
@@ -32,6 +33,11 @@ import {
3233 defaultXColumn ,
3334 defaultYColumn ,
3435} from 'src/shared/utils/vis'
36+ import { isFlagEnabled } from 'src/shared/utils/featureFlag'
37+
38+ // Types
39+ import { BandViewProperties , InternalFromFluxResult } from 'src/types'
40+ import { VisualizationProps } from 'src/visualization'
3541
3642// Constants
3743import { VIS_THEME , VIS_THEME_LIGHT } from 'src/shared/constants'
@@ -44,10 +50,6 @@ import {
4450} from 'src/visualization/constants'
4551import { AppSettingContext } from 'src/shared/contexts/app'
4652
47- // Types
48- import { BandViewProperties } from 'src/types'
49- import { VisualizationProps } from 'src/visualization'
50-
5153interface Props extends VisualizationProps {
5254 properties : BandViewProperties
5355}
@@ -58,7 +60,19 @@ const BandPlot: FC<Props> = ({
5860 annotations,
5961 cellID,
6062 timeRange,
63+ transmitWindowPeriod,
6164} ) => {
65+ const [ resultState , setResultState ] = useState ( result )
66+ const [ preZoomResult , setPreZoomResult ] =
67+ useState < InternalFromFluxResult > ( null )
68+ const [ requeryStatus , setRequeryStatus ] = useState < RemoteDataState > (
69+ RemoteDataState . NotStarted
70+ )
71+
72+ useEffect ( ( ) => {
73+ setResultState ( result )
74+ } , [ result ] )
75+
6276 const mainColumnName = useMainColumn (
6377 properties . mainColumn ,
6478 result . resultColumnNames
@@ -106,20 +120,42 @@ const BandPlot: FC<Props> = ({
106120
107121 const groupKey = [ ...result . fluxGroupKeyUnion , 'result' ]
108122
109- const [ xDomain , onSetXDomain , onResetXDomain ] = useVisXDomainSettings (
110- storedXDomain ,
111- result . table . getColumn ( xColumn , 'number' ) ,
112- timeRange
113- )
114-
115123 const memoizedYColumnData = useMemo (
116124 ( ) => result . table . getColumn ( yColumn , 'number' ) ,
117125 [ result . table , yColumn ]
118126 )
119127
120- const [ yDomain , onSetYDomain , onResetYDomain ] = useVisYDomainSettings (
121- storedYDomain ,
122- memoizedYColumnData
128+ const zoomQuery = useZoomQuery ( properties )
129+
130+ const [ xDomain , onSetXDomain , onResetXDomain ] = useZoomRequeryXDomainSettings (
131+ {
132+ adaptiveZoomHide : properties . adaptiveZoomHide ,
133+ data : resultState . table . getColumn ( xColumn , 'number' ) ,
134+ parsedResult : resultState ,
135+ preZoomResult,
136+ query : zoomQuery ,
137+ setPreZoomResult,
138+ setRequeryStatus,
139+ setResult : setResultState ,
140+ storedDomain : storedXDomain ,
141+ timeRange,
142+ transmitWindowPeriod,
143+ }
144+ )
145+
146+ const [ yDomain , onSetYDomain , onResetYDomain ] = useZoomRequeryYDomainSettings (
147+ {
148+ adaptiveZoomHide : properties . adaptiveZoomHide ,
149+ data : memoizedYColumnData ,
150+ parsedResult : resultState ,
151+ preZoomResult,
152+ query : zoomQuery ,
153+ setPreZoomResult,
154+ setRequeryStatus,
155+ setResult : setResultState ,
156+ storedDomain : storedYDomain ,
157+ transmitWindowPeriod,
158+ }
123159 )
124160
125161 const legendColumns = filterNoisyColumns (
@@ -208,7 +244,14 @@ const BandPlot: FC<Props> = ({
208244 'band'
209245 )
210246
211- return < Plot config = { config } />
247+ return (
248+ < >
249+ { isFlagEnabled ( 'zoomRequery' ) && (
250+ < ViewLoadingSpinner loading = { requeryStatus } />
251+ ) }
252+ < Plot config = { config } />
253+ </ >
254+ )
212255}
213256
214257export default BandPlot
0 commit comments