mirror of https://github.com/grafana/grafana
Merge pull request #15012 from grafana/loki-query-editor
WIP: Loki query editor for dashboard panelspull/15206/head
commit
116e70740c
@ -0,0 +1,80 @@ |
||||
// Libraries
|
||||
import React, { PureComponent } from 'react'; |
||||
|
||||
// Components
|
||||
import { Select, SelectOptionItem } from '@grafana/ui'; |
||||
|
||||
// Types
|
||||
import { QueryEditorProps } from '@grafana/ui/src/types'; |
||||
import { LokiDatasource } from '../datasource'; |
||||
import { LokiQuery } from '../types'; |
||||
import { LokiQueryField } from './LokiQueryField'; |
||||
|
||||
type Props = QueryEditorProps<LokiDatasource, LokiQuery>; |
||||
|
||||
interface State { |
||||
query: LokiQuery; |
||||
} |
||||
|
||||
export class LokiQueryEditor extends PureComponent<Props> { |
||||
state: State = { |
||||
query: this.props.query, |
||||
}; |
||||
|
||||
onRunQuery = () => { |
||||
const { query } = this.state; |
||||
|
||||
this.props.onChange(query); |
||||
this.props.onRunQuery(); |
||||
}; |
||||
|
||||
onFieldChange = (query: LokiQuery, override?) => { |
||||
this.setState({ |
||||
query: { |
||||
...this.state.query, |
||||
expr: query.expr, |
||||
} |
||||
}); |
||||
}; |
||||
|
||||
onFormatChanged = (option: SelectOptionItem) => { |
||||
this.props.onChange({ |
||||
...this.state.query, |
||||
resultFormat: option.value, |
||||
}); |
||||
}; |
||||
|
||||
render() { |
||||
const { query } = this.state; |
||||
const { datasource } = this.props; |
||||
const formatOptions: SelectOptionItem[] = [ |
||||
{ label: 'Time Series', value: 'time_series' }, |
||||
{ label: 'Table', value: 'table' }, |
||||
]; |
||||
|
||||
query.resultFormat = query.resultFormat || 'time_series'; |
||||
const currentFormat = formatOptions.find(item => item.value === query.resultFormat); |
||||
|
||||
return ( |
||||
<div> |
||||
<LokiQueryField |
||||
datasource={datasource} |
||||
initialQuery={query} |
||||
onQueryChange={this.onFieldChange} |
||||
onPressEnter={this.onRunQuery} |
||||
/> |
||||
<div className="gf-form-inline"> |
||||
<div className="gf-form"> |
||||
<div className="gf-form-label">Format as</div> |
||||
<Select isSearchable={false} options={formatOptions} onChange={this.onFormatChanged} value={currentFormat} /> |
||||
</div> |
||||
<div className="gf-form gf-form--grow"> |
||||
<div className="gf-form-label gf-form-label--grow" /> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
); |
||||
} |
||||
} |
||||
|
||||
export default LokiQueryEditor; |
Loading…
Reference in new issue