diff --git a/packages/grafana-ui/src/components/Select/MultiValue.tsx b/packages/grafana-ui/src/components/Select/MultiValue.tsx index 5d022a62f8a..c7166459e68 100644 --- a/packages/grafana-ui/src/components/Select/MultiValue.tsx +++ b/packages/grafana-ui/src/components/Select/MultiValue.tsx @@ -1,7 +1,8 @@ import React from 'react'; + import { useTheme2 } from '../../themes'; +import { IconButton } from '../IconButton/IconButton'; import { getSelectStyles } from './getSelectStyles'; -import { Icon } from '../Icon/Icon'; interface MultiValueContainerProps { innerProps: any; @@ -25,9 +26,5 @@ export type MultiValueRemoveProps = { export const MultiValueRemove: React.FC = ({ children, innerProps }) => { const theme = useTheme2(); const styles = getSelectStyles(theme); - return ( -
- -
- ); + return ; }; diff --git a/public/app/plugins/datasource/cloud-monitoring/components/Aggregation.tsx b/public/app/plugins/datasource/cloud-monitoring/components/Aggregation.tsx index ed5cf249a27..0e14f821052 100644 --- a/public/app/plugins/datasource/cloud-monitoring/components/Aggregation.tsx +++ b/public/app/plugins/datasource/cloud-monitoring/components/Aggregation.tsx @@ -1,12 +1,13 @@ -import React, { FC, useMemo } from 'react'; - import { SelectableValue } from '@grafana/data'; import { Select } from '@grafana/ui'; +import React, { FC, useMemo } from 'react'; + import { QueryEditorField } from '.'; import { getAggregationOptionsByMetric } from '../functions'; -import { MetricDescriptor, ValueTypes, MetricKind } from '../types'; +import { MetricDescriptor, MetricKind, ValueTypes } from '../types'; export interface Props { + refId: string; onChange: (metricDescriptor: string) => void; metricDescriptor?: MetricDescriptor; crossSeriesReducer: string; @@ -19,7 +20,12 @@ export const Aggregation: FC = (props) => { const selected = useSelectedFromOptions(aggOptions, props); return ( - + + + ); }; diff --git a/public/app/plugins/datasource/cloud-monitoring/components/Alignment.tsx b/public/app/plugins/datasource/cloud-monitoring/components/Alignment.tsx index 9a6d477011b..d2fd6862e40 100644 --- a/public/app/plugins/datasource/cloud-monitoring/components/Alignment.tsx +++ b/public/app/plugins/datasource/cloud-monitoring/components/Alignment.tsx @@ -1,11 +1,13 @@ -import React, { FC } from 'react'; import { SelectableValue } from '@grafana/data'; -import { SELECT_WIDTH } from '../constants'; -import { CustomMetaData, MetricQuery, SLOQuery } from '../types'; +import React, { FC } from 'react'; + import { AlignmentFunction, AlignmentPeriod, AlignmentPeriodLabel, QueryEditorField, QueryEditorRow } from '.'; +import { SELECT_WIDTH } from '../constants'; import CloudMonitoringDatasource from '../datasource'; +import { CustomMetaData, MetricQuery, SLOQuery } from '../types'; export interface Props { + refId: string; onChange: (query: MetricQuery | SLOQuery) => void; query: MetricQuery; templateVariableOptions: Array>; @@ -13,16 +15,30 @@ export interface Props { datasource: CloudMonitoringDatasource; } -export const Alignment: FC = ({ templateVariableOptions, onChange, query, customMetaData, datasource }) => { +export const Alignment: FC = ({ + refId, + templateVariableOptions, + onChange, + query, + customMetaData, + datasource, +}) => { return ( } + htmlFor={`${refId}-alignment-function`} > - - + + void; query: MetricQuery; templateVariableOptions: Array>; } -export const AlignmentFunction: FC = ({ query, templateVariableOptions, onChange }) => { +export const AlignmentFunction: FC = ({ inputId, query, templateVariableOptions, onChange }) => { const { valueType, metricKind, perSeriesAligner: psa, preprocessor } = query; const { perSeriesAligner, alignOptions } = useMemo( () => getAlignmentPickerData(valueType, metricKind, psa, preprocessor), @@ -36,6 +38,7 @@ export const AlignmentFunction: FC = ({ query, templateVariableOptions, o }, ]} placeholder="Select Alignment" + inputId={inputId} > ); }; diff --git a/public/app/plugins/datasource/cloud-monitoring/components/AlignmentPeriod.tsx b/public/app/plugins/datasource/cloud-monitoring/components/AlignmentPeriod.tsx index 66992df2f49..11afb9ea863 100644 --- a/public/app/plugins/datasource/cloud-monitoring/components/AlignmentPeriod.tsx +++ b/public/app/plugins/datasource/cloud-monitoring/components/AlignmentPeriod.tsx @@ -1,10 +1,12 @@ -import React, { useMemo } from 'react'; import { SelectableValue } from '@grafana/data'; import { Select } from '@grafana/ui'; +import React, { useMemo } from 'react'; + import { ALIGNMENT_PERIODS } from '../constants'; import { MetricQuery, SLOQuery } from '../types'; export interface Props { + inputId: string; onChange(query: TQuery): void; query: TQuery; templateVariableOptions: Array>; @@ -12,6 +14,7 @@ export interface Props { } export function AlignmentPeriod({ + inputId, templateVariableOptions, onChange, query, @@ -45,6 +48,7 @@ export function AlignmentPeriod({ }, ]} placeholder="Select Alignment" + inputId={inputId} > ); } diff --git a/public/app/plugins/datasource/cloud-monitoring/components/AnnotationQueryEditor.tsx b/public/app/plugins/datasource/cloud-monitoring/components/AnnotationQueryEditor.tsx index 42b8d80ff61..b44f4a7e23f 100644 --- a/public/app/plugins/datasource/cloud-monitoring/components/AnnotationQueryEditor.tsx +++ b/public/app/plugins/datasource/cloud-monitoring/components/AnnotationQueryEditor.tsx @@ -1,15 +1,16 @@ -import React from 'react'; -import { LegacyForms } from '@grafana/ui'; -import { TemplateSrv } from '@grafana/runtime'; import { SelectableValue, toOption } from '@grafana/data'; +import { TemplateSrv } from '@grafana/runtime'; +import { LegacyForms } from '@grafana/ui'; +import React from 'react'; import CloudMonitoringDatasource from '../datasource'; -import { AnnotationsHelp, LabelFilter, Metrics, Project, QueryEditorRow } from './'; import { AnnotationTarget, EditorMode, MetricDescriptor, MetricKind } from '../types'; +import { AnnotationsHelp, LabelFilter, Metrics, Project, QueryEditorRow } from './'; const { Input } = LegacyForms; export interface Props { + refId: string; onQueryChange: (target: AnnotationTarget) => void; target: AnnotationTarget; datasource: CloudMonitoringDatasource; @@ -97,12 +98,14 @@ export class AnnotationQueryEditor extends React.Component { return ( <> this.onChange('projectName', value)} /> { <>

Authentication

- + `Use label key: ${v}`} @@ -126,6 +127,7 @@ export const LabelFilter: FunctionComponent = ({ /> - + diff --git a/public/app/plugins/datasource/cloud-monitoring/components/Project.tsx b/public/app/plugins/datasource/cloud-monitoring/components/Project.tsx index ab2cd2664d8..72ff1829ccc 100644 --- a/public/app/plugins/datasource/cloud-monitoring/components/Project.tsx +++ b/public/app/plugins/datasource/cloud-monitoring/components/Project.tsx @@ -1,18 +1,20 @@ -import React, { useEffect, useMemo, useState } from 'react'; import { SelectableValue } from '@grafana/data'; import { Select } from '@grafana/ui'; -import CloudMonitoringDatasource from '../datasource'; -import { SELECT_WIDTH } from '../constants'; +import React, { useEffect, useMemo, useState } from 'react'; + import { QueryEditorRow } from '.'; +import { SELECT_WIDTH } from '../constants'; +import CloudMonitoringDatasource from '../datasource'; export interface Props { + refId: string; datasource: CloudMonitoringDatasource; onChange: (projectName: string) => void; templateVariableOptions: Array>; projectName: string; } -export function Project({ projectName, datasource, onChange, templateVariableOptions }: Props) { +export function Project({ refId, projectName, datasource, onChange, templateVariableOptions }: Props) { const [projects, setProjects] = useState>>([]); useEffect(() => { datasource.getProjects().then((projects) => setProjects(projects)); @@ -31,7 +33,7 @@ export function Project({ projectName, datasource, onChange, templateVariableOpt ); return ( - + { onChange({ ...query, sloQuery, queryType: value! }); onRunQuery(); }} + inputId={`${query.refId}-query-type`} /> @@ -102,6 +105,7 @@ export class QueryEditor extends PureComponent { {queryType === QueryType.SLO && ( this.onQueryChange('sloQuery', query)} diff --git a/public/app/plugins/datasource/cloud-monitoring/components/QueryType.tsx b/public/app/plugins/datasource/cloud-monitoring/components/QueryType.tsx deleted file mode 100644 index 79ac257737a..00000000000 --- a/public/app/plugins/datasource/cloud-monitoring/components/QueryType.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import React, { FunctionComponent } from 'react'; -import { SelectableValue } from '@grafana/data'; -import { Segment } from '@grafana/ui'; -import { QueryType } from '../types'; -import { QUERY_TYPES } from '../constants'; - -export interface Props { - value: QueryType; - onChange: (slo: QueryType) => void; - templateVariableOptions: Array>; -} - -function asQueryType(input: Array>) { - const res: Array> = []; - input.forEach((v) => { - if (v.value === QueryType.METRICS) { - res.push({ ...v, value: QueryType.METRICS }); - } - if (v.value === QueryType.SLO) { - res.push({ ...v, value: QueryType.SLO }); - } - }); - return res; -} - -export const QueryTypeSelector: FunctionComponent = ({ onChange, value, templateVariableOptions }) => { - return ( -
- - qt.value === value)} - options={[ - ...QUERY_TYPES, - { - label: 'Template Variables', - options: templateVariableOptions, - }, - ]} - onChange={({ value }: SelectableValue) => onChange(value!)} - /> - -
- -
-
- ); -}; diff --git a/public/app/plugins/datasource/cloud-monitoring/components/SLO/SLO.tsx b/public/app/plugins/datasource/cloud-monitoring/components/SLO/SLO.tsx index bf9daa006df..064e7f5ae31 100644 --- a/public/app/plugins/datasource/cloud-monitoring/components/SLO/SLO.tsx +++ b/public/app/plugins/datasource/cloud-monitoring/components/SLO/SLO.tsx @@ -1,19 +1,21 @@ -import React, { useEffect, useState } from 'react'; -import { Select } from '@grafana/ui'; import { SelectableValue } from '@grafana/data'; +import { Select } from '@grafana/ui'; +import React, { useEffect, useState } from 'react'; + import { QueryEditorRow } from '..'; +import { SELECT_WIDTH } from '../../constants'; import CloudMonitoringDatasource from '../../datasource'; import { SLOQuery } from '../../types'; -import { SELECT_WIDTH } from '../../constants'; export interface Props { + refId: string; onChange: (query: SLOQuery) => void; query: SLOQuery; templateVariableOptions: Array>; datasource: CloudMonitoringDatasource; } -export const SLO: React.FC = ({ query, templateVariableOptions, onChange, datasource }) => { +export const SLO: React.FC = ({ refId, query, templateVariableOptions, onChange, datasource }) => { const [slos, setSLOs] = useState>>([]); const { projectName, serviceId } = query; @@ -34,9 +36,10 @@ export const SLO: React.FC = ({ query, templateVariableOptions, onChange, }, [datasource, projectName, serviceId, templateVariableOptions]); return ( - + s.value === query?.selectorName ?? '')} diff --git a/public/app/plugins/datasource/cloud-monitoring/components/SLO/Service.tsx b/public/app/plugins/datasource/cloud-monitoring/components/SLO/Service.tsx index 175f32a7f59..a5d5c433d28 100644 --- a/public/app/plugins/datasource/cloud-monitoring/components/SLO/Service.tsx +++ b/public/app/plugins/datasource/cloud-monitoring/components/SLO/Service.tsx @@ -1,19 +1,21 @@ -import React, { useEffect, useState } from 'react'; -import { Select } from '@grafana/ui'; import { SelectableValue } from '@grafana/data'; +import { Select } from '@grafana/ui'; +import React, { useEffect, useState } from 'react'; + import { QueryEditorRow } from '..'; +import { SELECT_WIDTH } from '../../constants'; import CloudMonitoringDatasource from '../../datasource'; import { SLOQuery } from '../../types'; -import { SELECT_WIDTH } from '../../constants'; export interface Props { + refId: string; onChange: (query: SLOQuery) => void; query: SLOQuery; templateVariableOptions: Array>; datasource: CloudMonitoringDatasource; } -export const Service: React.FC = ({ query, templateVariableOptions, onChange, datasource }) => { +export const Service: React.FC = ({ refId, query, templateVariableOptions, onChange, datasource }) => { const [services, setServices] = useState>>([]); const { projectName } = query; @@ -34,9 +36,10 @@ export const Service: React.FC = ({ query, templateVariableOptions, onCha }, [datasource, projectName, templateVariableOptions]); return ( - +