// Libraries import React, { PureComponent } from 'react'; // Components import { Select } from '@grafana/ui'; import { SelectableValue } from '@grafana/data'; // Types import { DataSourceSelectItem } from '@grafana/ui'; export interface Props { onChange: (ds: DataSourceSelectItem) => void; datasources: DataSourceSelectItem[]; current: DataSourceSelectItem; onBlur?: () => void; autoFocus?: boolean; openMenuOnFocus?: boolean; } export class DataSourcePicker extends PureComponent { static defaultProps: Partial = { autoFocus: false, openMenuOnFocus: false, }; searchInput: HTMLElement; constructor(props: Props) { super(props); } onChange = (item: SelectableValue) => { const ds = this.props.datasources.find(ds => ds.name === item.value); this.props.onChange(ds); }; render() { const { datasources, current, autoFocus, onBlur, openMenuOnFocus } = this.props; const options = datasources.map(ds => ({ value: ds.name, label: ds.name, imgUrl: ds.meta.info.logos.small, })); const value = current && { label: current.name, value: current.name, imgUrl: current.meta.info.logos.small, }; return (