11// Libraries
2- import React , { FunctionComponent , useContext } from 'react'
2+ import React , { FunctionComponent , useContext , useEffect , useState } from 'react'
33import { useDispatch , useSelector } from 'react-redux'
44import { Config , Plot } from '@influxdata/giraffe'
5+ import { RemoteDataState } from '@influxdata/clockface'
56
67// Components
78import EmptyGraphMessage from 'src/shared/components/EmptyGraphMessage'
9+ import ViewLoadingSpinner from 'src/visualization/components/internal/ViewLoadingSpinner'
810
911// Utils
1012import { useAxisTicksGenerator } from 'src/visualization/utils/useAxisTicksGenerator'
1113import { getFormatter } from 'src/visualization/utils/getFormatter'
1214import { useLegendOpacity } from 'src/visualization/utils/useLegendOpacity'
15+ import { useZoomQuery } from 'src/visualization/utils/useZoomQuery'
1316import {
14- useVisXDomainSettings ,
15- useVisYDomainSettings ,
17+ useZoomRequeryXDomainSettings ,
18+ useZoomRequeryYDomainSettings ,
1619} from 'src/visualization/utils/useVisDomainSettings'
1720import { defaultXColumn , defaultYColumn } from 'src/shared/utils/vis'
1821import { AppSettingContext } from 'src/shared/contexts/app'
1922import { handleUnsupportedGraphType } from 'src/visualization/utils/annotationUtils'
23+ import { isFlagEnabled } from 'src/shared/utils/featureFlag'
2024
2125// Constants
2226import { VIS_THEME , VIS_THEME_LIGHT } from 'src/shared/constants'
2327import { DEFAULT_LINE_COLORS } from 'src/shared/constants/graphColorPalettes'
2428import { INVALID_DATA_COPY } from 'src/visualization/constants'
2529
2630// Types
27- import { ScatterViewProperties } from 'src/types'
31+ import { ScatterViewProperties , InternalFromFluxResult } from 'src/types'
2832import { VisualizationProps } from 'src/visualization'
2933
3034// Selectors
@@ -38,7 +42,19 @@ const ScatterPlot: FunctionComponent<Props> = ({
3842 properties,
3943 result,
4044 timeRange,
45+ transmitWindowPeriod,
4146} ) => {
47+ const [ resultState , setResultState ] = useState ( result )
48+ const [ preZoomResult , setPreZoomResult ] =
49+ useState < InternalFromFluxResult > ( null )
50+ const [ requeryStatus , setRequeryStatus ] = useState < RemoteDataState > (
51+ RemoteDataState . NotStarted
52+ )
53+
54+ useEffect ( ( ) => {
55+ setResultState ( result )
56+ } , [ result ] )
57+
4258 const { theme, timeZone} = useContext ( AppSettingContext )
4359 const fillColumns = properties . fillColumns || result . fluxGroupKeyUnion || [ ]
4460 const symbolColumns =
@@ -54,21 +70,37 @@ const ScatterPlot: FunctionComponent<Props> = ({
5470 const tooltipColorize = properties . legendColorizeRows
5571 const tooltipOrientationThreshold = properties . legendOrientationThreshold
5672
57- let timerange
58-
59- if ( xColumn === '_time' ) {
60- timerange = timeRange
61- }
62-
63- const [ xDomain , onSetXDomain , onResetXDomain ] = useVisXDomainSettings (
64- properties . xDomain ,
65- result . table . getColumn ( xColumn , 'number' ) ,
66- timerange
73+ const zoomQuery = useZoomQuery ( properties )
74+
75+ const [ xDomain , onSetXDomain , onResetXDomain ] = useZoomRequeryXDomainSettings (
76+ {
77+ adaptiveZoomHide : properties . adaptiveZoomHide ,
78+ data : resultState . table . getColumn ( xColumn , 'number' ) ,
79+ parsedResult : resultState ,
80+ preZoomResult,
81+ query : zoomQuery ,
82+ setPreZoomResult,
83+ setRequeryStatus,
84+ setResult : setResultState ,
85+ storedDomain : properties . xDomain ,
86+ timeRange : xColumn === '_time' ? timeRange : null ,
87+ transmitWindowPeriod,
88+ }
6789 )
6890
69- const [ yDomain , onSetYDomain , onResetYDomain ] = useVisYDomainSettings (
70- properties . yDomain ,
71- result . table . getColumn ( yColumn , 'number' )
91+ const [ yDomain , onSetYDomain , onResetYDomain ] = useZoomRequeryYDomainSettings (
92+ {
93+ adaptiveZoomHide : properties . adaptiveZoomHide ,
94+ data : resultState . table . getColumn ( yColumn , 'number' ) ,
95+ parsedResult : resultState ,
96+ preZoomResult,
97+ query : zoomQuery ,
98+ setPreZoomResult,
99+ setRequeryStatus,
100+ setResult : setResultState ,
101+ storedDomain : properties . yDomain ,
102+ transmitWindowPeriod,
103+ }
72104 )
73105
74106 const dispatch = useDispatch ( )
@@ -146,7 +178,14 @@ const ScatterPlot: FunctionComponent<Props> = ({
146178 }
147179 }
148180
149- return < Plot config = { config } />
181+ return (
182+ < >
183+ { isFlagEnabled ( 'zoomRequery' ) && (
184+ < ViewLoadingSpinner loading = { requeryStatus } />
185+ ) }
186+ < Plot config = { config } />
187+ </ >
188+ )
150189}
151190
152191export default ScatterPlot
0 commit comments