@@ -5,14 +5,10 @@ import {Button} from '@gravity-ui/uikit';
55
66import { useClusterBaseInfo } from '../../../../store/reducers/cluster/cluster' ;
77import { traceApi } from '../../../../store/reducers/trace' ;
8- import { SECOND_IN_MS } from '../../../../utils/constants' ;
9- import { useDelayed } from '../../../../utils/hooks/useDelayed' ;
108import { replaceParams } from '../utils/replaceParams' ;
119
1210import i18n from './i18n' ;
1311
14- const TIME_BEFORE_CHECK = 15 * SECOND_IN_MS ;
15-
1612interface TraceUrlButtonProps {
1713 traceId : string ;
1814}
@@ -23,27 +19,25 @@ export function TraceButton({traceId}: TraceUrlButtonProps) {
2319 const checkTraceUrl = traceCheck ?. url ? replaceParams ( traceCheck . url , { traceId} ) : '' ;
2420 const traceUrl = traceView ?. url ? replaceParams ( traceView . url , { traceId} ) : '' ;
2521
26- // We won't get any trace data at first 15 seconds for sure
27- const [ readyToFetch , resetDelay ] = useDelayed ( TIME_BEFORE_CHECK ) ;
22+ const [ checkTrace , { isLoading, isUninitialized} ] = traceApi . useCheckTraceMutation ( ) ;
2823
2924 React . useEffect ( ( ) => {
30- resetDelay ( ) ;
31- } , [ traceId , resetDelay ] ) ;
25+ let checkTraceMutation : { abort : ( ) => void } | null ;
26+ if ( checkTraceUrl ) {
27+ checkTraceMutation = checkTrace ( { url : checkTraceUrl } ) ;
28+ }
3229
33- const { isFetching} = traceApi . useCheckTraceQuery (
34- { url : checkTraceUrl } ,
35- { skip : ! checkTraceUrl || ! readyToFetch } ,
36- ) ;
30+ return ( ) => checkTraceMutation ?. abort ( ) ;
31+ } , [ checkTrace , checkTraceUrl ] ) ;
3732
38- if ( ! traceUrl ) {
33+ if ( ! traceUrl || isUninitialized ) {
3934 return null ;
4035 }
4136
42- const loading = ! readyToFetch || isFetching ;
4337 return (
4438 < Button
45- view = { loading ? 'flat-secondary' : 'flat-info' }
46- loading = { loading }
39+ view = { isLoading ? 'flat-secondary' : 'flat-info' }
40+ loading = { isLoading }
4741 href = { traceUrl }
4842 target = "_blank"
4943 >
0 commit comments