import React, { PureComponent, ChangeEvent } from 'react'; import { ExploreQueryFieldProps } from '@grafana/data'; import { Input, ValidationEvents, EventsWithValidation, Switch } from '@grafana/ui'; import { CloudWatchQuery } from '../types'; import CloudWatchDatasource from '../datasource'; import { QueryField, Alias, QueryFieldsEditor } from './'; export type Props = ExploreQueryFieldProps; interface State { showMeta: boolean; } const idValidationEvents: ValidationEvents = { [EventsWithValidation.onBlur]: [ { rule: value => new RegExp(/^$|^[a-z][a-zA-Z0-9_]*$/).test(value), errorMessage: 'Invalid format. Only alphanumeric characters and underscores are allowed', }, ], }; export class QueryEditor extends PureComponent { state: State = { showMeta: false }; static getDerivedStateFromProps(props: Props, state: State) { const { query } = props; if (!query.namespace) { query.namespace = ''; } if (!query.metricName) { query.metricName = ''; } if (!query.expression) { query.expression = ''; } if (!query.dimensions) { query.dimensions = {}; } if (!query.region) { query.region = 'default'; } if (!query.id) { query.id = ''; } if (!query.alias) { query.alias = ''; } if (!query.statistics || !query.statistics.length) { query.statistics = ['Average']; } if (!query.hasOwnProperty('matchExact')) { query.matchExact = true; } return state; } onChange(query: CloudWatchQuery) { const { onChange, onRunQuery } = this.props; onChange(query); onRunQuery(); } render() { const { data, query, onRunQuery } = this.props; const { showMeta } = this.state; const metaDataExist = data && Object.values(data).length && data.state === 'Done'; return ( <> {query.statistics.length <= 1 && (
) => this.onChange({ ...query, id: event.target.value }) } validationEvents={idValidationEvents} value={query.id || ''} />
) => this.onChange({ ...query, expression: event.target.value }) } />
)}
) => this.onChange({ ...query, period: event.target.value }) } />
this.onChange({ ...query, alias: value })} /> this.onChange({ ...query, matchExact: !query.matchExact })} />
{showMeta && metaDataExist && ( {data.series[0].meta.gmdMeta.map(({ ID, Expression, Period }: any) => ( ))}
Metric Data Query ID Metric Data Query Expression Period
{ID} {Expression} {Period}
)}
); } }