mirror of
https://github.com/grafana/grafana.git
synced 2025-02-13 00:55:47 -06:00
* MVP of a new datasource picker * Add datasource select history, naming DatasourceSelect -> DataSourceDrawer * refactor cards * Cleanup and fixing sort order for recents * add feature flag * fix feature flag name and use it * Highlight selected * Move new ds picker to core * Restore original datasource picker * Remove unused property * update yarn.lock * Rename folder, update codeowners * add test for util functions * Remove es-lint exception * Change feature toggle description * remove unnecessary if Co-authored-by: Ivan Ortega Alba <ivanortegaalba@gmail.com> * Make test a bit more clear Co-authored-by: Ivan Ortega Alba <ivanortegaalba@gmail.com> * Clean up api, filter once and before maps, minor code cleanup * Fix prettier issue --------- Co-authored-by: Ivan Ortega Alba <ivanortegaalba@gmail.com>
99 lines
2.4 KiB
TypeScript
99 lines
2.4 KiB
TypeScript
import React, { PureComponent } from 'react';
|
|
|
|
// Components
|
|
|
|
import { DataSourceInstanceSettings, DataSourceRef, getDataSourceUID } from '@grafana/data';
|
|
import { getDataSourceSrv } from '@grafana/runtime';
|
|
import { DataSourceJsonData } from '@grafana/schema';
|
|
|
|
import { DataSourceDrawer } from './DataSourceDrawer';
|
|
import { DataSourcePickerProps } from './types';
|
|
|
|
/**
|
|
* Component state description for the {@link DataSourcePicker}
|
|
*
|
|
* @internal
|
|
*/
|
|
export interface DataSourcePickerState {
|
|
error?: string;
|
|
}
|
|
|
|
/**
|
|
* Component to be able to select a datasource from the list of installed and enabled
|
|
* datasources in the current Grafana instance.
|
|
*
|
|
* @internal
|
|
*/
|
|
export class DataSourcePicker extends PureComponent<DataSourcePickerProps, DataSourcePickerState> {
|
|
dataSourceSrv = getDataSourceSrv();
|
|
|
|
state: DataSourcePickerState = {};
|
|
|
|
componentDidMount() {
|
|
const { current } = this.props;
|
|
const dsSettings = this.dataSourceSrv.getInstanceSettings(current);
|
|
if (!dsSettings) {
|
|
this.setState({ error: 'Could not find data source ' + current });
|
|
}
|
|
}
|
|
|
|
onChange = (ds?: string) => {
|
|
const dsSettings = this.dataSourceSrv.getInstanceSettings(ds);
|
|
|
|
if (dsSettings) {
|
|
this.props.onChange(dsSettings);
|
|
this.setState({ error: undefined });
|
|
}
|
|
};
|
|
|
|
private getCurrentDs(): DataSourceInstanceSettings<DataSourceJsonData> | string | DataSourceRef | null | undefined {
|
|
const { current, noDefault } = this.props;
|
|
if (!current && noDefault) {
|
|
return;
|
|
}
|
|
|
|
const ds = this.dataSourceSrv.getInstanceSettings(current);
|
|
if (ds) {
|
|
return ds;
|
|
}
|
|
|
|
return getDataSourceUID(current);
|
|
}
|
|
|
|
getDatasources() {
|
|
const { alerting, tracing, metrics, mixed, dashboard, variables, annotations, pluginId, type, filter, logs } =
|
|
this.props;
|
|
|
|
return this.dataSourceSrv.getList({
|
|
alerting,
|
|
tracing,
|
|
metrics,
|
|
logs,
|
|
dashboard,
|
|
mixed,
|
|
variables,
|
|
annotations,
|
|
pluginId,
|
|
filter,
|
|
type,
|
|
});
|
|
}
|
|
|
|
render() {
|
|
const { recentlyUsed, fileUploadOptions, enableFileUpload } = this.props;
|
|
|
|
return (
|
|
<div>
|
|
<DataSourceDrawer
|
|
datasources={this.getDatasources()}
|
|
onChange={this.onChange}
|
|
recentlyUsed={recentlyUsed}
|
|
current={this.getCurrentDs()}
|
|
fileUploadOptions={fileUploadOptions}
|
|
enableFileUpload={enableFileUpload}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|
|
}
|