grafana/public/app/plugins/datasource/cloudwatch/components/AnnotationQueryEditor.tsx
Zoltán Bedi fdc7eef0f4
Add grafana/experimental package (#42289)
* Add grafana/experimental package

* CloudWatch: Use experimental for components

* Use canary version of experimental

* Update sort order
2021-12-06 09:37:54 +01:00

84 lines
2.9 KiB
TypeScript

import React, { ChangeEvent } from 'react';
import { PanelData } from '@grafana/data';
import { EditorField, EditorHeader, EditorRow, InlineSelect, Space } from '@grafana/experimental';
import { Input, Switch } from '@grafana/ui';
import { CloudWatchDatasource } from '../datasource';
import { useRegions } from '../hooks';
import { CloudWatchAnnotationQuery, CloudWatchMetricsQuery } from '../types';
import { MetricStatEditor } from './MetricStatEditor';
export type Props = {
query: CloudWatchAnnotationQuery;
datasource: CloudWatchDatasource;
onChange: (value: CloudWatchAnnotationQuery) => void;
data?: PanelData;
};
export function AnnotationQueryEditor(props: React.PropsWithChildren<Props>) {
const { query, onChange, datasource } = props;
const [regions, regionIsLoading] = useRegions(datasource);
return (
<>
<EditorHeader>
<InlineSelect
label="Region"
value={regions.find((v) => v.value === query.region)}
placeholder="Select region"
allowCustomValue
onChange={({ value: region }) => region && onChange({ ...query, region })}
options={regions}
isLoading={regionIsLoading}
/>
</EditorHeader>
<Space v={0.5} />
<MetricStatEditor
{...props}
disableExpressions={true}
onChange={(editorQuery: CloudWatchMetricsQuery) => onChange({ ...query, ...editorQuery })}
onRunQuery={() => {}}
></MetricStatEditor>
<Space v={0.5} />
<EditorRow>
<EditorField label="Period" width={26} tooltip="Minimum interval between points in seconds.">
<Input
value={query.period || ''}
placeholder="auto"
onChange={(event: ChangeEvent<HTMLInputElement>) => onChange({ ...query, period: event.target.value })}
/>
</EditorField>
<EditorField label="Enable Prefix Matching" optional={true}>
<Switch
value={query.prefixMatching}
onChange={(e) => {
onChange({
...query,
prefixMatching: e.currentTarget.checked,
});
}}
/>
</EditorField>
<EditorField label="Action" optional={true}>
<Input
disabled={!query.prefixMatching}
value={query.actionPrefix || ''}
onChange={(event: ChangeEvent<HTMLInputElement>) =>
onChange({ ...query, actionPrefix: event.target.value })
}
/>
</EditorField>
<EditorField label="Alarm Name" optional={true}>
<Input
disabled={!query.prefixMatching}
value={query.alarmNamePrefix || ''}
onChange={(event: ChangeEvent<HTMLInputElement>) =>
onChange({ ...query, alarmNamePrefix: event.target.value })
}
/>
</EditorField>
</EditorRow>
</>
);
}