11import React , { useState } from 'react' ;
22import { Button , TextArea , Stack } from '@grafana/ui' ;
3+ import { PanelData } from '@grafana/data' ;
34import { EditorRow } from '@/components/extended/EditorRow' ;
45import { EditorField } from '@/components/extended/EditorField' ;
56import { isBackendQuery , isDataQuery } from '@/app/utils' ;
67import { QueryColumnItem } from '@/components/QueryColumnItem' ;
78import { JSONOptionsEditor } from '@/components/JSONOptionsEditor' ;
89import { CSVOptionsEditor } from '@/components/CSVOptionsEditor' ;
10+ import { RootSelectorAssistant } from '@/editors/query/components/RootSelectorAssistant' ;
911import { UQLEditor } from '@/editors/query/query.uql' ;
1012import { GROQEditor } from '@/editors/query/query.groq' ;
1113import type { InfinityColumn , InfinityQuery } from '@/types' ;
1214
13- export const QueryColumnsEditor = ( props : { query : InfinityQuery ; onChange : ( value : any ) => void ; onRunQuery : ( ) => void } ) => {
15+ export const QueryColumnsEditor = ( props : { query : InfinityQuery ; onChange : ( value : any ) => void ; onRunQuery : ( ) => void ; datasourceUid ?: string ; data ?: PanelData } ) => {
1416 const { query, onChange, onRunQuery } = props ;
1517 if ( ! isDataQuery ( query ) && query . type !== 'google-sheets' ) {
1618 return < > </ > ;
@@ -113,8 +115,8 @@ export const QueryColumnsEditor = (props: { query: InfinityQuery; onChange: (val
113115 ) ;
114116} ;
115117
116- const RootSelector = ( props : { query : InfinityQuery ; onChange : ( value : any ) => void ; onRunQuery : ( ) => void } ) => {
117- const { query, onChange, onRunQuery } = props ;
118+ const RootSelector = ( props : { query : InfinityQuery ; onChange : ( value : any ) => void ; onRunQuery : ( ) => void ; datasourceUid ?: string ; data ?: PanelData } ) => {
119+ const { query, onChange, onRunQuery, datasourceUid , data : panelData } = props ;
118120 const [ root_selector , setRootSelector ] = useState ( isDataQuery ( query ) ? query . root_selector || '' : '' ) ;
119121 if ( ! isDataQuery ( query ) ) {
120122 return < > </ > ;
@@ -125,15 +127,18 @@ const RootSelector = (props: { query: InfinityQuery; onChange: (value: any) => v
125127 } ;
126128 return [ 'html' , 'json' , 'xml' , 'graphql' ] . indexOf ( props . query . type ) > - 1 ? (
127129 < EditorField label = "Rows/Root" optional = { true } >
128- < TextArea
129- width = { '300px' }
130- cols = { 50 }
131- rows = { isBackendQuery ( query ) ? 7 : 2 }
132- value = { root_selector }
133- placeholder = { isBackendQuery ( query ) ? ( query . parser === 'jq-backend' ? 'JQ / rows selector' : 'JSONata / rows selector' ) : 'rows / root selector (optional)' }
134- onChange = { ( e ) => setRootSelector ( e . currentTarget . value ) }
135- onBlur = { onRootSelectorChange }
136- />
130+ < Stack direction = "column" gap = { 2 } alignItems = "flex-start" >
131+ < TextArea
132+ width = { '300px' }
133+ cols = { 50 }
134+ rows = { isBackendQuery ( query ) ? 7 : 2 }
135+ value = { root_selector }
136+ placeholder = { isBackendQuery ( query ) ? ( query . parser === 'jq-backend' ? 'JQ / rows selector' : 'JSONata / rows selector' ) : 'rows / root selector (optional)' }
137+ onChange = { ( e ) => setRootSelector ( e . currentTarget . value ) }
138+ onBlur = { onRootSelectorChange }
139+ />
140+ < RootSelectorAssistant datasourceUid = { datasourceUid } parser = { query . parser } panelData = { panelData } />
141+ </ Stack >
137142 </ EditorField >
138143 ) : (
139144 < > </ >
0 commit comments