import React from 'react'; import { Aggregations, Metrics, LabelFilter, GroupBys, Alignments, AlignmentPeriods } from '.'; import { MetricQuery, MetricDescriptor } from '../types'; import { getAlignmentPickerData } from '../functions'; import CloudMonitoringDatasource from '../datasource'; import { SelectableValue } from '@grafana/data'; export interface Props { usedAlignmentPeriod?: number; variableOptionGroup: SelectableValue; onMetricTypeChange: (query: MetricDescriptor) => void; onChange: (query: MetricQuery) => void; query: MetricQuery; datasource: CloudMonitoringDatasource; labels: any; } function Editor({ query, labels, datasource, onChange, onMetricTypeChange, usedAlignmentPeriod, variableOptionGroup, }: React.PropsWithChildren) { const { perSeriesAligner, alignOptions } = getAlignmentPickerData(query, datasource.templateSrv); return ( {metric => ( <> onChange({ ...query, filters })} variableOptionGroup={variableOptionGroup} /> onChange({ ...query, groupBys })} variableOptionGroup={variableOptionGroup} /> onChange({ ...query, crossSeriesReducer })} > {displayAdvancedOptions => displayAdvancedOptions && ( onChange({ ...query, perSeriesAligner })} /> ) } onChange({ ...query, alignmentPeriod })} /> )} ); } export const VisualMetricQueryEditor = React.memo(Editor);