|
@@ -6,6 +6,7 @@ import { Filter } from './Filter';
|
|
|
import { Aggregations } from './Aggregations';
|
|
import { Aggregations } from './Aggregations';
|
|
|
import { Alignments } from './Alignments';
|
|
import { Alignments } from './Alignments';
|
|
|
import { Target } from '../types';
|
|
import { Target } from '../types';
|
|
|
|
|
+import { getAlignmentPickerData } from '../functions';
|
|
|
|
|
|
|
|
export interface Props {
|
|
export interface Props {
|
|
|
onQueryChange: (target: Target) => void;
|
|
onQueryChange: (target: Target) => void;
|
|
@@ -16,7 +17,11 @@ export interface Props {
|
|
|
uiSegmentSrv: any;
|
|
uiSegmentSrv: any;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-const DefaultTarget: Target = {
|
|
|
|
|
|
|
+interface State extends Target {
|
|
|
|
|
+ alignOptions: any[];
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+const DefaultTarget: State = {
|
|
|
defaultProject: 'loading project...',
|
|
defaultProject: 'loading project...',
|
|
|
metricType: '',
|
|
metricType: '',
|
|
|
metricKind: '',
|
|
metricKind: '',
|
|
@@ -30,18 +35,30 @@ const DefaultTarget: Target = {
|
|
|
groupBys: [],
|
|
groupBys: [],
|
|
|
filters: [],
|
|
filters: [],
|
|
|
aliasBy: '',
|
|
aliasBy: '',
|
|
|
|
|
+ alignOptions: [],
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-export class QueryEditor extends React.Component<Props, Target> {
|
|
|
|
|
- state: Target = DefaultTarget;
|
|
|
|
|
|
|
+export class QueryEditor extends React.Component<Props, State> {
|
|
|
|
|
+ state: State = DefaultTarget;
|
|
|
|
|
|
|
|
componentDidMount() {
|
|
componentDidMount() {
|
|
|
- this.setState(this.props.target);
|
|
|
|
|
|
|
+ const { perSeriesAligner, alignOptions } = getAlignmentPickerData(this.props.target, this.props.templateSrv);
|
|
|
|
|
+ this.setState({
|
|
|
|
|
+ ...this.props.target,
|
|
|
|
|
+ alignOptions,
|
|
|
|
|
+ perSeriesAligner,
|
|
|
|
|
+ });
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
handleMetricTypeChange({ valueType, metricKind, type, unit }) {
|
|
handleMetricTypeChange({ valueType, metricKind, type, unit }) {
|
|
|
|
|
+ const { perSeriesAligner, alignOptions } = getAlignmentPickerData(
|
|
|
|
|
+ { valueType, metricKind, perSeriesAligner: this.state.perSeriesAligner },
|
|
|
|
|
+ this.props.templateSrv
|
|
|
|
|
+ );
|
|
|
this.setState(
|
|
this.setState(
|
|
|
{
|
|
{
|
|
|
|
|
+ alignOptions,
|
|
|
|
|
+ perSeriesAligner,
|
|
|
metricType: type,
|
|
metricType: type,
|
|
|
unit,
|
|
unit,
|
|
|
valueType,
|
|
valueType,
|
|
@@ -97,7 +114,7 @@ export class QueryEditor extends React.Component<Props, Target> {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
render() {
|
|
render() {
|
|
|
- const { defaultProject, metricType, crossSeriesReducer, groupBys, perSeriesAligner } = this.state;
|
|
|
|
|
|
|
+ const { defaultProject, metricType, crossSeriesReducer, groupBys, perSeriesAligner, alignOptions } = this.state;
|
|
|
const { templateSrv, datasource, uiSegmentSrv } = this.props;
|
|
const { templateSrv, datasource, uiSegmentSrv } = this.props;
|
|
|
|
|
|
|
|
return (
|
|
return (
|
|
@@ -127,15 +144,17 @@ export class QueryEditor extends React.Component<Props, Target> {
|
|
|
groupBys={groupBys}
|
|
groupBys={groupBys}
|
|
|
onChange={value => this.handleAggregationChange(value)}
|
|
onChange={value => this.handleAggregationChange(value)}
|
|
|
>
|
|
>
|
|
|
- {displayAdvancedOptions => (
|
|
|
|
|
- <Alignments
|
|
|
|
|
- display={displayAdvancedOptions}
|
|
|
|
|
- metricDescriptor={metric}
|
|
|
|
|
- templateSrv={templateSrv}
|
|
|
|
|
- perSeriesAligner={perSeriesAligner}
|
|
|
|
|
- onChange={value => this.handleAlignmentChange(value)}
|
|
|
|
|
- />
|
|
|
|
|
- )}
|
|
|
|
|
|
|
+ {displayAdvancedOptions =>
|
|
|
|
|
+ displayAdvancedOptions && (
|
|
|
|
|
+ <Alignments
|
|
|
|
|
+ alignOptions={alignOptions}
|
|
|
|
|
+ metricDescriptor={metric}
|
|
|
|
|
+ templateSrv={templateSrv}
|
|
|
|
|
+ perSeriesAligner={perSeriesAligner}
|
|
|
|
|
+ onChange={value => this.handleAlignmentChange(value)}
|
|
|
|
|
+ />
|
|
|
|
|
+ )
|
|
|
|
|
+ }
|
|
|
</Aggregations>
|
|
</Aggregations>
|
|
|
</React.Fragment>
|
|
</React.Fragment>
|
|
|
)}
|
|
)}
|