diff --git a/web/src/providers/TestRun/TestRun.provider.tsx b/web/src/providers/TestRun/TestRun.provider.tsx index c9848b9857..5362b5f318 100644 --- a/web/src/providers/TestRun/TestRun.provider.tsx +++ b/web/src/providers/TestRun/TestRun.provider.tsx @@ -1,7 +1,7 @@ import {noop} from 'lodash'; -import {createContext, useCallback, useContext, useMemo} from 'react'; +import {createContext, useCallback, useContext, useEffect, useMemo, useState} from 'react'; import {useGetRunByIdQuery, useGetRunEventsQuery, useStopRunMutation} from 'redux/apis/TraceTest.api'; -import TestRun from 'models/TestRun.model'; +import TestRun, {isRunStateFinished} from 'models/TestRun.model'; import TestRunEvent from 'models/TestRunEvent.model'; import TestProvider from '../Test'; @@ -29,8 +29,11 @@ interface IProps { export const useTestRun = () => useContext(Context); +const POLLING_INTERVAL = 5000; + const TestRunProvider = ({children, testId, runId = ''}: IProps) => { - const {data: run, isError} = useGetRunByIdQuery({testId, runId}, {skip: !runId}); + const [pollingInterval, setPollingInterval] = useState(POLLING_INTERVAL); + const {data: run, isError} = useGetRunByIdQuery({testId, runId}, {skip: !runId, pollingInterval}); const {data: runEvents = []} = useGetRunEventsQuery({testId, runId}, {skip: !runId}); const [stopRunAction, {isLoading: isLoadingStop}] = useStopRunMutation(); @@ -43,6 +46,11 @@ const TestRunProvider = ({children, testId, runId = ''}: IProps) => { [run, isError, isLoadingStop, runEvents, stopRun] ); + useEffect(() => { + const shouldStopPolling = run?.state && isRunStateFinished(run.state); + setPollingInterval(shouldStopPolling ? undefined : POLLING_INTERVAL); + }, [run?.state]); + return run ? (