|
|
@@ -1,9 +1,8 @@
|
|
|
// Libraries
|
|
|
import React, { PureComponent } from 'react';
|
|
|
-import _ from 'lodash';
|
|
|
|
|
|
// Components
|
|
|
-import { Select } from '@grafana/ui';
|
|
|
+import { Select, SelectOptionItem } from '@grafana/ui';
|
|
|
|
|
|
// Types
|
|
|
import { DataSourceSelectItem } from '@grafana/ui/src/types';
|
|
|
@@ -14,26 +13,28 @@ export interface Props {
|
|
|
current: DataSourceSelectItem;
|
|
|
onBlur?: () => void;
|
|
|
autoFocus?: boolean;
|
|
|
+ openMenuOnFocus?: boolean;
|
|
|
}
|
|
|
|
|
|
export class DataSourcePicker extends PureComponent<Props> {
|
|
|
- static defaultProps = {
|
|
|
+ static defaultProps: Partial<Props> = {
|
|
|
autoFocus: false,
|
|
|
+ openMenuOnFocus: false,
|
|
|
};
|
|
|
|
|
|
searchInput: HTMLElement;
|
|
|
|
|
|
- constructor(props) {
|
|
|
+ constructor(props: Props) {
|
|
|
super(props);
|
|
|
}
|
|
|
|
|
|
- onChange = item => {
|
|
|
+ onChange = (item: SelectOptionItem) => {
|
|
|
const ds = this.props.datasources.find(ds => ds.name === item.value);
|
|
|
this.props.onChange(ds);
|
|
|
};
|
|
|
|
|
|
render() {
|
|
|
- const { datasources, current, autoFocus, onBlur } = this.props;
|
|
|
+ const { datasources, current, autoFocus, onBlur, openMenuOnFocus } = this.props;
|
|
|
|
|
|
const options = datasources.map(ds => ({
|
|
|
value: ds.name,
|
|
|
@@ -58,7 +59,7 @@ export class DataSourcePicker extends PureComponent<Props> {
|
|
|
options={options}
|
|
|
autoFocus={autoFocus}
|
|
|
onBlur={onBlur}
|
|
|
- openMenuOnFocus={true}
|
|
|
+ openMenuOnFocus={openMenuOnFocus}
|
|
|
maxMenuHeight={500}
|
|
|
placeholder="Select datasource"
|
|
|
noOptionsMessage={() => 'No datasources found'}
|