1- import React , { useMemo } from "react" ;
1+ import React , { useMemo , useState , useEffect } from "react" ;
22import styled from "styled-components" ;
33import DataType from "../../functions/src/models/DataType" ;
44import GetMeasurementsParams from "../../functions/src/models/GetMeasurementsParams" ;
@@ -8,11 +8,13 @@ import { FlexColumn } from "../elements/Flex";
88import { Heading2 } from "../elements/Typography" ;
99import getMeasurements from "../api/getMeasurements" ;
1010import measurementsContainDataPoints from "./measurementsContainDataPoints" ;
11+ import Overlay from "../elements/Overlay" ;
1112
1213interface DiagramProps {
1314 dataType : DataType ;
1415 queryParams : GetMeasurementsParams ;
1516 deviceColorMap : Map < string , string > ;
17+ autoRefreshPeriod : number ;
1618}
1719
1820const DiagramContainer = styled ( FlexColumn ) `
@@ -26,37 +28,62 @@ const DiagramContainer = styled(FlexColumn)`
2628
2729const DiagramInner = styled . div `
2830 display: flex;
31+ position: relative;
2932 flex-grow: 1;
3033 width: 100%;
3134 background-color: ${ ( { theme } ) => theme . palette . background . paper } ;
3235` ;
3336
34- const Diagram = ( { dataType, queryParams, deviceColorMap } : DiagramProps ) => {
37+ const Diagram = ( {
38+ dataType,
39+ queryParams,
40+ deviceColorMap,
41+ autoRefreshPeriod,
42+ } : DiagramProps ) => {
43+ const [ updateKey , setUpdateKey ] = useState ( 0 ) ;
44+ useEffect ( ( ) => {
45+ let interval : any = 0 ;
46+ if ( autoRefreshPeriod !== 0 ) {
47+ interval = setInterval (
48+ ( ) => setUpdateKey ( Date . now ( ) ) ,
49+ autoRefreshPeriod * 1000
50+ ) ;
51+ } else {
52+ clearInterval ( interval ) ;
53+ }
54+ return ( ) => clearInterval ( interval ) ;
55+ } , [ autoRefreshPeriod ] ) ;
3556 const query = useMemo ( ( ) => {
3657 return getMeasurements ( queryParams ) ;
3758 } , [ queryParams ] ) ;
3859
3960 const { responseData : measurements , error, isLoading } = useQuery ( {
4061 query,
62+ compare : updateKey ,
4163 } ) ;
4264
65+ const canShowRealData =
66+ measurements &&
67+ measurements . length &&
68+ measurementsContainDataPoints ( measurements ) ;
69+
4370 return (
4471 < DiagramContainer >
4572 < Heading2 >
46- { dataType . name } (unit: { dataType . unit } )
73+ { dataType . name } ({ dataType . unit } )
4774 </ Heading2 >
4875 < DiagramInner >
76+ < D3Diagram
77+ data = { canShowRealData ? measurements ! : [ [ "0000000000000000" , [ ] ] ] }
78+ deviceColorMap = { deviceColorMap }
79+ />
4980 { isLoading ? (
50- " Loading data..."
81+ < Overlay > Loading data...</ Overlay >
5182 ) : error ? (
52- "Failed to load data."
53- ) : measurements &&
54- measurements . length &&
55- measurementsContainDataPoints ( measurements ) ? (
56- < D3Diagram data = { measurements } deviceColorMap = { deviceColorMap } />
57- ) : (
58- "No data to display."
59- ) }
83+ < Overlay > Error loading data.</ Overlay >
84+ ) : ! canShowRealData ? (
85+ < Overlay > No data to display</ Overlay >
86+ ) : null }
6087 </ DiagramInner >
6188 </ DiagramContainer >
6289 ) ;
0 commit comments