11import React from 'react' ;
22
3- import { StopFill } from '@gravity-ui/icons' ;
43import type { ControlGroupOption } from '@gravity-ui/uikit' ;
5- import { Button , Icon , RadioButton , Tabs } from '@gravity-ui/uikit' ;
4+ import { RadioButton , Tabs } from '@gravity-ui/uikit' ;
65import JSONTree from 'react-json-inspector' ;
76
87import { ClipboardButton } from '../../../../components/ClipboardButton' ;
@@ -17,13 +16,14 @@ import {QueryResultTable} from '../../../../components/QueryResultTable/QueryRes
1716import { disableFullscreen } from '../../../../store/reducers/fullscreen' ;
1817import type { ColumnType , KeyValueRow , TKqpStatsQuery } from '../../../../types/api/query' ;
1918import type { ValueOf } from '../../../../types/common' ;
20- import type { IQueryResult } from '../../../../types/store/query ' ;
19+ import type { ExecuteQueryResult } from '../../../../types/store/executeQuery ' ;
2120import { getArray } from '../../../../utils' ;
2221import { cn } from '../../../../utils/cn' ;
2322import { getStringifiedData } from '../../../../utils/dataFormatters/dataFormatters' ;
2423import { useTypedDispatch } from '../../../../utils/hooks' ;
2524import { parseQueryError } from '../../../../utils/query' ;
2625import { PaneVisibilityToggleButtons } from '../../utils/paneVisibilityToggleHelpers' ;
26+ import { CancelQueryButton } from '../CancelQueryButton/CancelQueryButton' ;
2727import { SimplifiedPlan } from '../ExplainResult/components/SimplifiedPlan/SimplifiedPlan' ;
2828import { ResultIssues } from '../Issues/Issues' ;
2929import { QueryDuration } from '../QueryDuration/QueryDuration' ;
@@ -49,34 +49,28 @@ const resultOptionsIds = {
4949type SectionID = ValueOf < typeof resultOptionsIds > ;
5050
5151interface ExecuteResultProps {
52- data : IQueryResult | undefined ;
53- error : unknown ;
54- cancelError : unknown ;
52+ result : ExecuteQueryResult ;
5553 isResultsCollapsed ?: boolean ;
54+ theme ?: string ;
55+ tenantName : string ;
5656 onCollapseResults : VoidFunction ;
5757 onExpandResults : VoidFunction ;
58- onStopButtonClick : VoidFunction ;
59- theme ?: string ;
60- loading ?: boolean ;
61- cancelQueryLoading ?: boolean ;
6258}
6359
6460export function ExecuteResult ( {
65- data,
66- error,
67- cancelError,
61+ result,
6862 isResultsCollapsed,
63+ theme,
64+ tenantName,
6965 onCollapseResults,
7066 onExpandResults,
71- onStopButtonClick,
72- theme,
73- loading,
74- cancelQueryLoading,
7567} : ExecuteResultProps ) {
7668 const [ selectedResultSet , setSelectedResultSet ] = React . useState ( 0 ) ;
7769 const [ activeSection , setActiveSection ] = React . useState < SectionID > ( resultOptionsIds . result ) ;
7870 const dispatch = useTypedDispatch ( ) ;
7971
72+ const { error, isLoading, queryId, data} = result ;
73+
8074 const stats : TKqpStatsQuery | undefined = data ?. stats ;
8175 const resultsSetsCount = data ?. resultSets ?. length ;
8276 const isMulti = resultsSetsCount && resultsSetsCount > 0 ;
@@ -111,10 +105,10 @@ export function ExecuteResult({
111105 } ;
112106
113107 const renderResultTable = (
114- result : KeyValueRow [ ] | undefined ,
108+ resultSet : KeyValueRow [ ] | undefined ,
115109 columns : ColumnType [ ] | undefined ,
116110 ) => {
117- return < QueryResultTable data = { result } columns = { columns } settings = { { sortable : false } } /> ;
111+ return < QueryResultTable data = { resultSet } columns = { columns } settings = { { sortable : false } } /> ;
118112 } ;
119113
120114 const renderResult = ( ) => {
@@ -243,8 +237,8 @@ export function ExecuteResult({
243237 < React . Fragment >
244238 < div className = { b ( 'controls' ) } >
245239 < div className = { b ( 'controls-right' ) } >
246- < QueryExecutionStatus error = { error } loading = { loading } />
247- { ! error && ! loading && (
240+ < QueryExecutionStatus error = { error } loading = { isLoading } />
241+ { ! error && ! isLoading && (
248242 < React . Fragment >
249243 { stats ?. DurationUs !== undefined && (
250244 < QueryDuration duration = { Number ( stats . DurationUs ) } />
@@ -261,17 +255,10 @@ export function ExecuteResult({
261255 ) }
262256 </ React . Fragment >
263257 ) }
264- { loading ? (
258+ { isLoading ? (
265259 < React . Fragment >
266260 < 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 } />
275262 </ React . Fragment >
276263 ) : null }
277264 { data ?. traceId ? < TraceButton traceId = { data . traceId } /> : null }
@@ -287,8 +274,8 @@ export function ExecuteResult({
287274 />
288275 </ div >
289276 </ div >
290- { loading || isQueryCancelledError ( error ) ? null : < QuerySettingsBanner /> }
291- < LoaderWrapper loading = { loading } >
277+ { isLoading || isQueryCancelledError ( error ) ? null : < QuerySettingsBanner /> }
278+ < LoaderWrapper loading = { isLoading } >
292279 < Fullscreen > { renderResultSection ( ) } </ Fullscreen >
293280 </ LoaderWrapper >
294281 </ React . Fragment >
0 commit comments