1
1
import React from 'react' ;
2
2
3
- import { StopFill } from '@gravity-ui/icons' ;
4
3
import type { ControlGroupOption } from '@gravity-ui/uikit' ;
5
- import { Button , Icon , RadioButton , Tabs } from '@gravity-ui/uikit' ;
4
+ import { RadioButton , Tabs } from '@gravity-ui/uikit' ;
6
5
import JSONTree from 'react-json-inspector' ;
7
6
8
7
import { ClipboardButton } from '../../../../components/ClipboardButton' ;
@@ -17,13 +16,14 @@ import {QueryResultTable} from '../../../../components/QueryResultTable/QueryRes
17
16
import { disableFullscreen } from '../../../../store/reducers/fullscreen' ;
18
17
import type { ColumnType , KeyValueRow , TKqpStatsQuery } from '../../../../types/api/query' ;
19
18
import type { ValueOf } from '../../../../types/common' ;
20
- import type { IQueryResult } from '../../../../types/store/query ' ;
19
+ import type { ExecuteQueryResult } from '../../../../types/store/executeQuery ' ;
21
20
import { getArray } from '../../../../utils' ;
22
21
import { cn } from '../../../../utils/cn' ;
23
22
import { getStringifiedData } from '../../../../utils/dataFormatters/dataFormatters' ;
24
23
import { useTypedDispatch } from '../../../../utils/hooks' ;
25
24
import { parseQueryError } from '../../../../utils/query' ;
26
25
import { PaneVisibilityToggleButtons } from '../../utils/paneVisibilityToggleHelpers' ;
26
+ import { CancelQueryButton } from '../CancelQueryButton/CancelQueryButton' ;
27
27
import { SimplifiedPlan } from '../ExplainResult/components/SimplifiedPlan/SimplifiedPlan' ;
28
28
import { ResultIssues } from '../Issues/Issues' ;
29
29
import { QueryDuration } from '../QueryDuration/QueryDuration' ;
@@ -49,34 +49,28 @@ const resultOptionsIds = {
49
49
type SectionID = ValueOf < typeof resultOptionsIds > ;
50
50
51
51
interface ExecuteResultProps {
52
- data : IQueryResult | undefined ;
53
- error : unknown ;
54
- cancelError : unknown ;
52
+ result : ExecuteQueryResult ;
55
53
isResultsCollapsed ?: boolean ;
54
+ theme ?: string ;
55
+ tenantName : string ;
56
56
onCollapseResults : VoidFunction ;
57
57
onExpandResults : VoidFunction ;
58
- onStopButtonClick : VoidFunction ;
59
- theme ?: string ;
60
- loading ?: boolean ;
61
- cancelQueryLoading ?: boolean ;
62
58
}
63
59
64
60
export function ExecuteResult ( {
65
- data,
66
- error,
67
- cancelError,
61
+ result,
68
62
isResultsCollapsed,
63
+ theme,
64
+ tenantName,
69
65
onCollapseResults,
70
66
onExpandResults,
71
- onStopButtonClick,
72
- theme,
73
- loading,
74
- cancelQueryLoading,
75
67
} : ExecuteResultProps ) {
76
68
const [ selectedResultSet , setSelectedResultSet ] = React . useState ( 0 ) ;
77
69
const [ activeSection , setActiveSection ] = React . useState < SectionID > ( resultOptionsIds . result ) ;
78
70
const dispatch = useTypedDispatch ( ) ;
79
71
72
+ const { error, isLoading, queryId, data} = result ;
73
+
80
74
const stats : TKqpStatsQuery | undefined = data ?. stats ;
81
75
const resultsSetsCount = data ?. resultSets ?. length ;
82
76
const isMulti = resultsSetsCount && resultsSetsCount > 0 ;
@@ -111,10 +105,10 @@ export function ExecuteResult({
111
105
} ;
112
106
113
107
const renderResultTable = (
114
- result : KeyValueRow [ ] | undefined ,
108
+ resultSet : KeyValueRow [ ] | undefined ,
115
109
columns : ColumnType [ ] | undefined ,
116
110
) => {
117
- return < QueryResultTable data = { result } columns = { columns } settings = { { sortable : false } } /> ;
111
+ return < QueryResultTable data = { resultSet } columns = { columns } settings = { { sortable : false } } /> ;
118
112
} ;
119
113
120
114
const renderResult = ( ) => {
@@ -243,8 +237,8 @@ export function ExecuteResult({
243
237
< React . Fragment >
244
238
< div className = { b ( 'controls' ) } >
245
239
< div className = { b ( 'controls-right' ) } >
246
- < QueryExecutionStatus error = { error } loading = { loading } />
247
- { ! error && ! loading && (
240
+ < QueryExecutionStatus error = { error } loading = { isLoading } />
241
+ { ! error && ! isLoading && (
248
242
< React . Fragment >
249
243
{ stats ?. DurationUs !== undefined && (
250
244
< QueryDuration duration = { Number ( stats . DurationUs ) } />
@@ -261,17 +255,10 @@ export function ExecuteResult({
261
255
) }
262
256
</ React . Fragment >
263
257
) }
264
- { loading ? (
258
+ { isLoading ? (
265
259
< React . Fragment >
266
260
< ElapsedTime className = { b ( 'elapsed-time' ) } />
267
- < Button
268
- loading = { cancelQueryLoading }
269
- onClick = { onStopButtonClick }
270
- className = { b ( 'stop-button' , { error : Boolean ( cancelError ) } ) }
271
- >
272
- < Icon data = { StopFill } size = { 16 } />
273
- { i18n ( 'action.stop' ) }
274
- </ Button >
261
+ < CancelQueryButton queryId = { queryId } tenantName = { tenantName } />
275
262
</ React . Fragment >
276
263
) : null }
277
264
{ data ?. traceId ? < TraceButton traceId = { data . traceId } /> : null }
@@ -287,8 +274,8 @@ export function ExecuteResult({
287
274
/>
288
275
</ div >
289
276
</ div >
290
- { loading || isQueryCancelledError ( error ) ? null : < QuerySettingsBanner /> }
291
- < LoaderWrapper loading = { loading } >
277
+ { isLoading || isQueryCancelledError ( error ) ? null : < QuerySettingsBanner /> }
278
+ < LoaderWrapper loading = { isLoading } >
292
279
< Fullscreen > { renderResultSection ( ) } </ Fullscreen >
293
280
</ LoaderWrapper >
294
281
</ React . Fragment >
0 commit comments