1
1
import { noop } from 'lodash' ;
2
- import { createContext , useCallback , useContext , useMemo } from 'react' ;
2
+ import { createContext , useCallback , useContext , useEffect , useMemo , useState } from 'react' ;
3
3
import { useGetRunByIdQuery , useGetRunEventsQuery , useStopRunMutation } from 'redux/apis/TraceTest.api' ;
4
- import TestRun from 'models/TestRun.model' ;
4
+ import TestRun , { isRunStateFinished } from 'models/TestRun.model' ;
5
5
import TestRunEvent from 'models/TestRunEvent.model' ;
6
6
import TestProvider from '../Test' ;
7
7
@@ -29,8 +29,11 @@ interface IProps {
29
29
30
30
export const useTestRun = ( ) => useContext ( Context ) ;
31
31
32
+ const POLLING_INTERVAL = 5000 ;
33
+
32
34
const TestRunProvider = ( { children, testId, runId = '' } : IProps ) => {
33
- const { data : run , isError} = useGetRunByIdQuery ( { testId, runId} , { skip : ! runId } ) ;
35
+ const [ pollingInterval , setPollingInterval ] = useState < number | undefined > ( POLLING_INTERVAL ) ;
36
+ const { data : run , isError} = useGetRunByIdQuery ( { testId, runId} , { skip : ! runId , pollingInterval} ) ;
34
37
const { data : runEvents = [ ] } = useGetRunEventsQuery ( { testId, runId} , { skip : ! runId } ) ;
35
38
const [ stopRunAction , { isLoading : isLoadingStop } ] = useStopRunMutation ( ) ;
36
39
@@ -43,6 +46,11 @@ const TestRunProvider = ({children, testId, runId = ''}: IProps) => {
43
46
[ run , isError , isLoadingStop , runEvents , stopRun ]
44
47
) ;
45
48
49
+ useEffect ( ( ) => {
50
+ const shouldStopPolling = run ?. state && isRunStateFinished ( run . state ) ;
51
+ setPollingInterval ( shouldStopPolling ? undefined : POLLING_INTERVAL ) ;
52
+ } , [ run ?. state ] ) ;
53
+
46
54
return run ? (
47
55
< Context . Provider value = { value } >
48
56
< TestProvider testId = { testId } version = { run . testVersion } >
0 commit comments