mirror of
https://github.com/grafana/grafana.git
synced 2025-07-31 17:32:42 +08:00
56 lines
1.3 KiB
TypeScript
56 lines
1.3 KiB
TypeScript
import { SelectableValue } from '@grafana/data';
|
|
import { EditorField } from '@grafana/plugin-ui';
|
|
import { Alert, PopoverContent, Select } from '@grafana/ui';
|
|
|
|
import { VariableQueryType } from '../../types';
|
|
import { removeMarginBottom } from '../styles';
|
|
|
|
interface VariableQueryFieldProps<T> {
|
|
onChange: (value: T) => void;
|
|
options: SelectableValue[];
|
|
value: T | null;
|
|
label: string;
|
|
inputId?: string;
|
|
allowCustomValue?: boolean;
|
|
isLoading?: boolean;
|
|
tooltip?: PopoverContent;
|
|
interactive?: boolean;
|
|
error?: string;
|
|
}
|
|
|
|
export const VariableQueryField = <T extends string | VariableQueryType>({
|
|
label,
|
|
onChange,
|
|
value,
|
|
options,
|
|
allowCustomValue = false,
|
|
isLoading = false,
|
|
inputId = label,
|
|
tooltip,
|
|
interactive,
|
|
error,
|
|
}: VariableQueryFieldProps<T>) => {
|
|
return (
|
|
<>
|
|
<EditorField
|
|
label={label}
|
|
tooltip={tooltip}
|
|
tooltipInteractive={interactive}
|
|
htmlFor={inputId}
|
|
className={removeMarginBottom}
|
|
>
|
|
<Select
|
|
aria-label={label}
|
|
allowCustomValue={allowCustomValue}
|
|
value={value}
|
|
onChange={({ value }) => onChange(value!)}
|
|
options={options}
|
|
isLoading={isLoading}
|
|
inputId={inputId}
|
|
/>
|
|
</EditorField>
|
|
{error && <Alert title={error} severity="error" topSpacing={1} />}
|
|
</>
|
|
);
|
|
};
|