mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* Update backend * Update frontend * Keep old plugin id * Update docs * Place doc images to a new directory * Legacy support for stackdriver-auto alignment * Consistent plugin name * Apply suggestions from code review Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com> Co-authored-by: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com> * Update docs * Update public/app/plugins/datasource/cloud-monitoring/README.md Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com> * Add reference to the data source formerly being named Stackdriver * Update pkg/models/datasource.go Co-authored-by: Carl Bergquist <carl@grafana.com> * Fix gofmt Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com> Co-authored-by: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com> Co-authored-by: Carl Bergquist <carl@grafana.com>
59 lines
2.0 KiB
TypeScript
59 lines
2.0 KiB
TypeScript
import React, { FunctionComponent } from 'react';
|
|
import { SelectableValue } from '@grafana/data';
|
|
import { Segment, Icon } from '@grafana/ui';
|
|
import { labelsToGroupedOptions } from '../functions';
|
|
import { systemLabels } from '../constants';
|
|
|
|
export interface Props {
|
|
values: string[];
|
|
onChange: (values: string[]) => void;
|
|
variableOptionGroup: SelectableValue<string>;
|
|
groupBys: string[];
|
|
}
|
|
|
|
const removeText = '-- remove group by --';
|
|
const removeOption: SelectableValue<string> = { label: removeText, value: removeText };
|
|
|
|
export const GroupBys: FunctionComponent<Props> = ({ groupBys = [], values = [], onChange, variableOptionGroup }) => {
|
|
const options = [removeOption, variableOptionGroup, ...labelsToGroupedOptions([...groupBys, ...systemLabels])];
|
|
return (
|
|
<div className="gf-form-inline">
|
|
<label className="gf-form-label query-keyword width-9">Group By</label>
|
|
{values &&
|
|
values.map((value, index) => (
|
|
<Segment
|
|
allowCustomValue
|
|
key={value + index}
|
|
value={value}
|
|
options={options}
|
|
onChange={({ value = '' }) =>
|
|
onChange(
|
|
value === removeText
|
|
? values.filter((_, i) => i !== index)
|
|
: values.map((v, i) => (i === index ? value : v))
|
|
)
|
|
}
|
|
/>
|
|
))}
|
|
{values.length !== groupBys.length && (
|
|
<Segment
|
|
Component={
|
|
<a className="gf-form-label query-part">
|
|
<Icon name="plus" />
|
|
</a>
|
|
}
|
|
allowCustomValue
|
|
onChange={({ value = '' }) => onChange([...values, value])}
|
|
options={[
|
|
variableOptionGroup,
|
|
...labelsToGroupedOptions([...groupBys.filter(groupBy => !values.includes(groupBy)), ...systemLabels]),
|
|
]}
|
|
/>
|
|
)}
|
|
<div className="gf-form gf-form--grow">
|
|
<label className="gf-form-label gf-form-label--grow"></label>
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|