mirror of
https://github.com/grafana/grafana.git
synced 2025-02-20 11:48:34 -06:00
72 lines
2.2 KiB
TypeScript
72 lines
2.2 KiB
TypeScript
import React from 'react';
|
|
import { TextArea, InlineFormLabel, Input, Select, HorizontalGroup } from '@grafana/ui';
|
|
import { InfluxQuery } from '../types';
|
|
import { useShadowedState } from './useShadowedState';
|
|
import { useUniqueId } from './useUniqueId';
|
|
import { RESULT_FORMATS, DEFAULT_RESULT_FORMAT } from './constants';
|
|
|
|
type Props = {
|
|
query: InfluxQuery;
|
|
onChange: (query: InfluxQuery) => void;
|
|
onRunQuery: () => void;
|
|
};
|
|
|
|
// we handle 3 fields: "query", "alias", "resultFormat"
|
|
// "resultFormat" changes are applied immediately
|
|
// "query" and "alias" changes only happen on onblur
|
|
export const RawInfluxQLEditor = ({ query, onChange, onRunQuery }: Props): JSX.Element => {
|
|
const [currentQuery, setCurrentQuery] = useShadowedState(query.query);
|
|
const [currentAlias, setCurrentAlias] = useShadowedState(query.alias);
|
|
const aliasElementId = useUniqueId();
|
|
const selectElementId = useUniqueId();
|
|
|
|
const applyDelayedChangesAndRunQuery = () => {
|
|
onChange({
|
|
...query,
|
|
query: currentQuery,
|
|
alias: currentAlias,
|
|
});
|
|
onRunQuery();
|
|
};
|
|
|
|
return (
|
|
<div>
|
|
<TextArea
|
|
aria-label="query"
|
|
rows={3}
|
|
spellCheck={false}
|
|
placeholder="InfluxDB Query"
|
|
onBlur={applyDelayedChangesAndRunQuery}
|
|
onChange={(e) => {
|
|
setCurrentQuery(e.currentTarget.value);
|
|
}}
|
|
value={currentQuery ?? ''}
|
|
/>
|
|
<HorizontalGroup>
|
|
<InlineFormLabel htmlFor={selectElementId}>Format as</InlineFormLabel>
|
|
<Select
|
|
inputId={selectElementId}
|
|
onChange={(v) => {
|
|
onChange({ ...query, resultFormat: v.value });
|
|
onRunQuery();
|
|
}}
|
|
value={query.resultFormat ?? DEFAULT_RESULT_FORMAT}
|
|
options={RESULT_FORMATS}
|
|
/>
|
|
<InlineFormLabel htmlFor={aliasElementId}>Alias by</InlineFormLabel>
|
|
<Input
|
|
id={aliasElementId}
|
|
type="text"
|
|
spellCheck={false}
|
|
placeholder="Naming pattern"
|
|
onBlur={applyDelayedChangesAndRunQuery}
|
|
onChange={(e) => {
|
|
setCurrentAlias(e.currentTarget.value);
|
|
}}
|
|
value={currentAlias ?? ''}
|
|
/>
|
|
</HorizontalGroup>
|
|
</div>
|
|
);
|
|
};
|