2023-08-18 11:14:43 -05:00
import React from 'react' ;
import { SelectableValue } from '@grafana/data' ;
2023-09-19 14:53:20 +01:00
import { EditorField , EditorRow } from '@grafana/experimental' ;
import { TextArea , Input } from '@grafana/ui' ;
2023-08-18 11:14:43 -05:00
import CloudMonitoringDatasource from '../datasource' ;
import { PromQLQuery } from '../types/query' ;
import { Project } from './Project' ;
export interface Props {
refId : string ;
variableOptionGroup : SelectableValue < string > ;
onChange : ( query : PromQLQuery ) = > void ;
onRunQuery : ( ) = > void ;
query : PromQLQuery ;
datasource : CloudMonitoringDatasource ;
}
export const defaultQuery : ( dataSource : CloudMonitoringDatasource ) = > PromQLQuery = ( dataSource ) = > ( {
projectName : dataSource.getDefaultProject ( ) ,
expr : '' ,
step : '10s' ,
} ) ;
export function PromQLQueryEditor ( {
refId ,
query ,
datasource ,
onChange ,
variableOptionGroup ,
onRunQuery ,
} : React . PropsWithChildren < Props > ) {
function onReturnKeyDown ( e : React.KeyboardEvent ) {
if ( e . key === 'Enter' && e . shiftKey ) {
onRunQuery ( ) ;
e . preventDefault ( ) ;
e . stopPropagation ( ) ;
}
}
return (
< >
< EditorRow >
< Project
refId = { refId }
templateVariableOptions = { variableOptionGroup . options }
projectName = { query . projectName }
datasource = { datasource }
onChange = { ( projectName ) = > onChange ( { . . . query , projectName } ) }
/ >
< TextArea
name = "Query"
className = "slate-query-field"
value = { query . expr }
rows = { 10 }
placeholder = "Enter a Cloud Monitoring Prometheus query (Run with Shift+Enter)"
onBlur = { onRunQuery }
onKeyDown = { onReturnKeyDown }
onChange = { ( e ) = > onChange ( { . . . query , expr : e.currentTarget.value } ) }
/ >
2023-09-19 14:53:20 +01:00
< EditorField
label = "Min step"
tooltip = {
'Time units and built-in variables can be used here, for example: $__interval, $__rate_interval, 5s, 1m, 3h, 1d, 1y (Default if no unit is specified: 10s)'
}
2023-08-18 11:14:43 -05:00
>
2023-09-19 14:53:20 +01:00
< Input
2023-08-18 11:14:43 -05:00
type = { 'string' }
placeholder = { 'auto' }
onChange = { ( e ) = > onChange ( { . . . query , step : e.currentTarget.value } ) }
onKeyDown = { onReturnKeyDown }
value = { query . step ? ? '' }
/ >
2023-09-19 14:53:20 +01:00
< / EditorField >
2023-08-18 11:14:43 -05:00
< / EditorRow >
< / >
) ;
}