renaming DataSource type to DataSourceSettings and moved to grafana ui

This commit is contained in:
Torkel Ödegaard 2019-01-17 18:51:07 +01:00
parent febb9e7168
commit ecab597e5e
26 changed files with 135 additions and 99 deletions

View File

@ -55,3 +55,31 @@ export interface DataSourceApi {
*/ */
testDatasource(): Promise<any>; testDatasource(): Promise<any>;
} }
export interface DataSourceSettings {
id: number;
orgId: number;
name: string;
typeLogoUrl: string;
type: string;
access: string;
url: string;
password: string;
user: string;
database: string;
basicAuth: boolean;
basicAuthPassword: string;
basicAuthUser: string;
isDefault: boolean;
jsonData: { authType: string; defaultRegion: string };
readOnly: boolean;
withCredentials: boolean;
}
export interface DataSourceSelectItem {
name: string;
value: string | null;
meta: PluginMeta;
sort: string;
}

View File

@ -6,7 +6,7 @@ import _ from 'lodash';
import { Select } from '@grafana/ui'; import { Select } from '@grafana/ui';
// Types // Types
import { DataSourceSelectItem } from 'app/types'; import { DataSourceSelectItem } from '@grafana/ui/src/types';
export interface Props { export interface Props {
onChange: (ds: DataSourceSelectItem) => void; onChange: (ds: DataSourceSelectItem) => void;

View File

@ -18,8 +18,7 @@ import config from 'app/core/config';
// Types // Types
import { PanelModel } from '../panel_model'; import { PanelModel } from '../panel_model';
import { DashboardModel } from '../dashboard_model'; import { DashboardModel } from '../dashboard_model';
import { DataQuery } from '@grafana/ui'; import { DataQuery, DataSourceSelectItem } from '@grafana/ui/src/types';
import { DataSourceSelectItem } from 'app/types';
import { PluginHelp } from 'app/core/components/PluginHelp/PluginHelp'; import { PluginHelp } from 'app/core/components/PluginHelp/PluginHelp';
interface Props { interface Props {

View File

@ -14,7 +14,8 @@ import { FormLabel } from '@grafana/ui';
// Types // Types
import { PanelModel } from '../panel_model'; import { PanelModel } from '../panel_model';
import { ValidationEvents, DataSourceSelectItem } from 'app/types'; import { DataSourceSelectItem } from '@grafana/ui/src/types';
import { ValidationEvents } from 'app/types';
const timeRangeValidationEvents: ValidationEvents = { const timeRangeValidationEvents: ValidationEvents = {
[EventsWithValidation.onBlur]: [ [EventsWithValidation.onBlur]: [

View File

@ -1,13 +1,14 @@
import React from 'react'; import React from 'react';
import { shallow } from 'enzyme'; import { shallow } from 'enzyme';
import { DataSourceDashboards, Props } from './DataSourceDashboards'; import { DataSourceDashboards, Props } from './DataSourceDashboards';
import { DataSource, NavModel, PluginDashboard } from 'app/types'; import { DataSourceSettings } from '@grafana/ui/src/types';
import { NavModel, PluginDashboard } from 'app/types';
const setup = (propOverrides?: object) => { const setup = (propOverrides?: object) => {
const props: Props = { const props: Props = {
navModel: {} as NavModel, navModel: {} as NavModel,
dashboards: [] as PluginDashboard[], dashboards: [] as PluginDashboard[],
dataSource: {} as DataSource, dataSource: {} as DataSourceSettings,
pageId: 1, pageId: 1,
importDashboard: jest.fn(), importDashboard: jest.fn(),
loadDataSource: jest.fn(), loadDataSource: jest.fn(),

View File

@ -1,9 +1,13 @@
// Libraries
import React, { PureComponent } from 'react'; import React, { PureComponent } from 'react';
import { hot } from 'react-hot-loader'; import { hot } from 'react-hot-loader';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
// Components
import PageHeader from 'app/core/components/PageHeader/PageHeader'; import PageHeader from 'app/core/components/PageHeader/PageHeader';
import DashboardTable from './DashboardsTable'; import DashboardTable from './DashboardsTable';
import { DataSource, NavModel, PluginDashboard } from 'app/types';
// Actions & Selectors
import { getNavModel } from 'app/core/selectors/navModel'; import { getNavModel } from 'app/core/selectors/navModel';
import { getRouteParamsId } from 'app/core/selectors/location'; import { getRouteParamsId } from 'app/core/selectors/location';
import { loadDataSource } from './state/actions'; import { loadDataSource } from './state/actions';
@ -11,10 +15,14 @@ import { loadPluginDashboards } from '../plugins/state/actions';
import { importDashboard, removeDashboard } from '../dashboard/state/actions'; import { importDashboard, removeDashboard } from '../dashboard/state/actions';
import { getDataSource } from './state/selectors'; import { getDataSource } from './state/selectors';
// Types
import { NavModel, PluginDashboard } from 'app/types';
import { DataSourceSettings } from '@grafana/ui/src/types';
export interface Props { export interface Props {
navModel: NavModel; navModel: NavModel;
dashboards: PluginDashboard[]; dashboards: PluginDashboard[];
dataSource: DataSource; dataSource: DataSourceSettings;
pageId: number; pageId: number;
importDashboard: typeof importDashboard; importDashboard: typeof importDashboard;
loadDataSource: typeof loadDataSource; loadDataSource: typeof loadDataSource;

View File

@ -1,11 +1,16 @@
// Libraries
import React, { PureComponent } from 'react'; import React, { PureComponent } from 'react';
import classNames from 'classnames'; import classNames from 'classnames';
// Components
import DataSourcesListItem from './DataSourcesListItem'; import DataSourcesListItem from './DataSourcesListItem';
import { DataSource } from 'app/types';
// Types
import { DataSourceSettings } from '@grafana/ui/src/types';
import { LayoutMode, LayoutModes } from '../../core/components/LayoutSelector/LayoutSelector'; import { LayoutMode, LayoutModes } from '../../core/components/LayoutSelector/LayoutSelector';
export interface Props { export interface Props {
dataSources: DataSource[]; dataSources: DataSourceSettings[];
layoutMode: LayoutMode; layoutMode: LayoutMode;
} }

View File

@ -1,8 +1,8 @@
import React, { PureComponent } from 'react'; import React, { PureComponent } from 'react';
import { DataSource } from 'app/types'; import { DataSourceSettings } from '@grafana/ui/src/types';
export interface Props { export interface Props {
dataSource: DataSource; dataSource: DataSourceSettings;
} }
export class DataSourcesListItem extends PureComponent<Props> { export class DataSourcesListItem extends PureComponent<Props> {

View File

@ -1,13 +1,14 @@
import React from 'react'; import React from 'react';
import { shallow } from 'enzyme'; import { shallow } from 'enzyme';
import { DataSourcesListPage, Props } from './DataSourcesListPage'; import { DataSourcesListPage, Props } from './DataSourcesListPage';
import { DataSource, NavModel } from 'app/types'; import { NavModel } from 'app/types';
import { DataSourceSettings } from '@grafana/ui/src/types';
import { LayoutModes } from '../../core/components/LayoutSelector/LayoutSelector'; import { LayoutModes } from '../../core/components/LayoutSelector/LayoutSelector';
import { getMockDataSources } from './__mocks__/dataSourcesMocks'; import { getMockDataSources } from './__mocks__/dataSourcesMocks';
const setup = (propOverrides?: object) => { const setup = (propOverrides?: object) => {
const props: Props = { const props: Props = {
dataSources: [] as DataSource[], dataSources: [] as DataSourceSettings[],
layoutMode: LayoutModes.Grid, layoutMode: LayoutModes.Grid,
loadDataSources: jest.fn(), loadDataSources: jest.fn(),
navModel: { navModel: {

View File

@ -1,12 +1,20 @@
// Libraries
import React, { PureComponent } from 'react'; import React, { PureComponent } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { hot } from 'react-hot-loader'; import { hot } from 'react-hot-loader';
// Components
import Page from 'app/core/components/Page/Page'; import Page from 'app/core/components/Page/Page';
import OrgActionBar from 'app/core/components/OrgActionBar/OrgActionBar'; import OrgActionBar from 'app/core/components/OrgActionBar/OrgActionBar';
import EmptyListCTA from 'app/core/components/EmptyListCTA/EmptyListCTA'; import EmptyListCTA from 'app/core/components/EmptyListCTA/EmptyListCTA';
import DataSourcesList from './DataSourcesList'; import DataSourcesList from './DataSourcesList';
import { DataSource, NavModel, StoreState } from 'app/types';
// Types
import { DataSourceSettings } from '@grafana/ui/src/types';
import { NavModel, StoreState } from 'app/types';
import { LayoutMode } from 'app/core/components/LayoutSelector/LayoutSelector'; import { LayoutMode } from 'app/core/components/LayoutSelector/LayoutSelector';
// Actions
import { loadDataSources, setDataSourcesLayoutMode, setDataSourcesSearchQuery } from './state/actions'; import { loadDataSources, setDataSourcesLayoutMode, setDataSourcesSearchQuery } from './state/actions';
import { getNavModel } from 'app/core/selectors/navModel'; import { getNavModel } from 'app/core/selectors/navModel';
@ -19,7 +27,7 @@ import {
export interface Props { export interface Props {
navModel: NavModel; navModel: NavModel;
dataSources: DataSource[]; dataSources: DataSourceSettings[];
dataSourcesCount: number; dataSourcesCount: number;
layoutMode: LayoutMode; layoutMode: LayoutMode;
searchQuery: string; searchQuery: string;

View File

@ -1,6 +1,6 @@
import { DataSource } from 'app/types'; import { DataSourceSettings } from '@grafana/ui/src/types';
export const getMockDataSources = (amount: number): DataSource[] => { export const getMockDataSources = (amount: number): DataSourceSettings[] => {
const dataSources = []; const dataSources = [];
for (let i = 0; i <= amount; i++) { for (let i = 0; i <= amount; i++) {
@ -25,7 +25,7 @@ export const getMockDataSources = (amount: number): DataSource[] => {
return dataSources; return dataSources;
}; };
export const getMockDataSource = (): DataSource => { export const getMockDataSource = (): DataSourceSettings => {
return { return {
access: '', access: '',
basicAuth: false, basicAuth: false,

View File

@ -1,7 +1,8 @@
import React from 'react'; import React from 'react';
import { shallow } from 'enzyme'; import { shallow } from 'enzyme';
import { DataSourceSettings, Props } from './DataSourceSettings'; import { DataSourceSettingsPage, Props } from './DataSourceSettingsPage';
import { DataSource, NavModel } from '../../../types'; import { NavModel } from 'app/types';
import { DataSourceSettings } from '@grafana/ui';
import { getMockDataSource } from '../__mocks__/dataSourcesMocks'; import { getMockDataSource } from '../__mocks__/dataSourcesMocks';
import { getMockPlugin } from '../../plugins/__mocks__/pluginMocks'; import { getMockPlugin } from '../../plugins/__mocks__/pluginMocks';
@ -20,7 +21,7 @@ const setup = (propOverrides?: object) => {
Object.assign(props, propOverrides); Object.assign(props, propOverrides);
return shallow(<DataSourceSettings {...props} />); return shallow(<DataSourceSettingsPage {...props} />);
}; };
describe('Render', () => { describe('Render', () => {
@ -32,7 +33,7 @@ describe('Render', () => {
it('should render loader', () => { it('should render loader', () => {
const wrapper = setup({ const wrapper = setup({
dataSource: {} as DataSource, dataSource: {} as DataSourceSettings,
}); });
expect(wrapper).toMatchSnapshot(); expect(wrapper).toMatchSnapshot();

View File

@ -1,28 +1,34 @@
// Libraries
import React, { PureComponent } from 'react'; import React, { PureComponent } from 'react';
import { hot } from 'react-hot-loader'; import { hot } from 'react-hot-loader';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
// Components
import PageHeader from 'app/core/components/PageHeader/PageHeader'; import PageHeader from 'app/core/components/PageHeader/PageHeader';
import PageLoader from 'app/core/components/PageLoader/PageLoader'; import PageLoader from 'app/core/components/PageLoader/PageLoader';
import PluginSettings from './PluginSettings'; import PluginSettings from './PluginSettings';
import BasicSettings from './BasicSettings'; import BasicSettings from './BasicSettings';
import ButtonRow from './ButtonRow'; import ButtonRow from './ButtonRow';
// Services & Utils
import appEvents from 'app/core/app_events'; import appEvents from 'app/core/app_events';
import { getBackendSrv } from 'app/core/services/backend_srv'; import { getBackendSrv } from 'app/core/services/backend_srv';
import { getDatasourceSrv } from 'app/features/plugins/datasource_srv'; import { getDatasourceSrv } from 'app/features/plugins/datasource_srv';
// Actions & selectors
import { getDataSource, getDataSourceMeta } from '../state/selectors'; import { getDataSource, getDataSourceMeta } from '../state/selectors';
import { deleteDataSource, loadDataSource, setDataSourceName, setIsDefault, updateDataSource } from '../state/actions'; import { deleteDataSource, loadDataSource, setDataSourceName, setIsDefault, updateDataSource } from '../state/actions';
import { getNavModel } from 'app/core/selectors/navModel'; import { getNavModel } from 'app/core/selectors/navModel';
import { getRouteParamsId } from 'app/core/selectors/location'; import { getRouteParamsId } from 'app/core/selectors/location';
import { DataSource, NavModel, Plugin } from 'app/types/'; // Types
import { NavModel, Plugin } from 'app/types/';
import { DataSourceSettings } from '@grafana/ui/src/types/';
import { getDataSourceLoadingNav } from '../state/navModel'; import { getDataSourceLoadingNav } from '../state/navModel';
export interface Props { export interface Props {
navModel: NavModel; navModel: NavModel;
dataSource: DataSource; dataSource: DataSourceSettings;
dataSourceMeta: Plugin; dataSourceMeta: Plugin;
pageId: number; pageId: number;
deleteDataSource: typeof deleteDataSource; deleteDataSource: typeof deleteDataSource;
@ -33,7 +39,7 @@ export interface Props {
} }
interface State { interface State {
dataSource: DataSource; dataSource: DataSourceSettings;
isTesting?: boolean; isTesting?: boolean;
testingMessage?: string; testingMessage?: string;
testingStatus?: string; testingStatus?: string;
@ -44,12 +50,12 @@ enum DataSourceStates {
Beta = 'beta', Beta = 'beta',
} }
export class DataSourceSettings extends PureComponent<Props, State> { export class DataSourceSettingsPage extends PureComponent<Props, State> {
constructor(props) { constructor(props) {
super(props); super(props);
this.state = { this.state = {
dataSource: {} as DataSource, dataSource: {} as DataSourceSettings,
}; };
} }
@ -246,4 +252,4 @@ const mapDispatchToProps = {
setIsDefault, setIsDefault,
}; };
export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(DataSourceSettings)); export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(DataSourceSettingsPage));

View File

@ -1,20 +1,21 @@
import React, { PureComponent } from 'react'; import React, { PureComponent } from 'react';
import _ from 'lodash'; import _ from 'lodash';
import { DataSource, Plugin } from 'app/types/'; import { Plugin } from 'app/types';
import { DataSourceSettings } from '@grafana/ui/src/types';
import { getAngularLoader, AngularComponent } from 'app/core/services/AngularLoader'; import { getAngularLoader, AngularComponent } from 'app/core/services/AngularLoader';
export interface Props { export interface Props {
dataSource: DataSource; dataSource: DataSourceSettings;
dataSourceMeta: Plugin; dataSourceMeta: Plugin;
onModelChange: (dataSource: DataSource) => void; onModelChange: (dataSource: DataSourceSettings) => void;
} }
export class PluginSettings extends PureComponent<Props> { export class PluginSettings extends PureComponent<Props> {
element: any; element: any;
component: AngularComponent; component: AngularComponent;
scopeProps: { scopeProps: {
ctrl: { datasourceMeta: Plugin; current: DataSource }; ctrl: { datasourceMeta: Plugin; current: DataSourceSettings };
onModelChanged: (dataSource: DataSource) => void; onModelChanged: (dataSource: DataSourceSettings) => void;
}; };
constructor(props) { constructor(props) {
@ -51,7 +52,7 @@ export class PluginSettings extends PureComponent<Props> {
} }
} }
onModelChanged = (dataSource: DataSource) => { onModelChanged = (dataSource: DataSourceSettings) => {
this.props.onModelChange(dataSource); this.props.onModelChange(dataSource);
}; };

View File

@ -6,7 +6,8 @@ import { LayoutMode } from 'app/core/components/LayoutSelector/LayoutSelector';
import { updateLocation, updateNavIndex, UpdateNavIndexAction } from 'app/core/actions'; import { updateLocation, updateNavIndex, UpdateNavIndexAction } from 'app/core/actions';
import { UpdateLocationAction } from 'app/core/actions/location'; import { UpdateLocationAction } from 'app/core/actions/location';
import { buildNavModel } from './navModel'; import { buildNavModel } from './navModel';
import { DataSource, Plugin, StoreState } from 'app/types'; import { DataSourceSettings } from '@grafana/ui/src/types';
import { Plugin, StoreState } from 'app/types';
export enum ActionTypes { export enum ActionTypes {
LoadDataSources = 'LOAD_DATA_SOURCES', LoadDataSources = 'LOAD_DATA_SOURCES',
@ -22,7 +23,7 @@ export enum ActionTypes {
interface LoadDataSourcesAction { interface LoadDataSourcesAction {
type: ActionTypes.LoadDataSources; type: ActionTypes.LoadDataSources;
payload: DataSource[]; payload: DataSourceSettings[];
} }
interface SetDataSourcesSearchQueryAction { interface SetDataSourcesSearchQueryAction {
@ -47,7 +48,7 @@ interface SetDataSourceTypeSearchQueryAction {
interface LoadDataSourceAction { interface LoadDataSourceAction {
type: ActionTypes.LoadDataSource; type: ActionTypes.LoadDataSource;
payload: DataSource; payload: DataSourceSettings;
} }
interface LoadDataSourceMetaAction { interface LoadDataSourceMetaAction {
@ -65,12 +66,12 @@ interface SetIsDefaultAction {
payload: boolean; payload: boolean;
} }
const dataSourcesLoaded = (dataSources: DataSource[]): LoadDataSourcesAction => ({ const dataSourcesLoaded = (dataSources: DataSourceSettings[]): LoadDataSourcesAction => ({
type: ActionTypes.LoadDataSources, type: ActionTypes.LoadDataSources,
payload: dataSources, payload: dataSources,
}); });
const dataSourceLoaded = (dataSource: DataSource): LoadDataSourceAction => ({ const dataSourceLoaded = (dataSource: DataSourceSettings): LoadDataSourceAction => ({
type: ActionTypes.LoadDataSource, type: ActionTypes.LoadDataSource,
payload: dataSource, payload: dataSource,
}); });
@ -171,7 +172,7 @@ export function loadDataSourceTypes(): ThunkResult<void> {
}; };
} }
export function updateDataSource(dataSource: DataSource): ThunkResult<void> { export function updateDataSource(dataSource: DataSourceSettings): ThunkResult<void> {
return async dispatch => { return async dispatch => {
await getBackendSrv().put(`/api/datasources/${dataSource.id}`, dataSource); await getBackendSrv().put(`/api/datasources/${dataSource.id}`, dataSource);
await updateFrontendSettings(); await updateFrontendSettings();

View File

@ -1,8 +1,8 @@
import { DataSource, NavModel, NavModelItem } from 'app/types'; import { NavModel, NavModelItem } from 'app/types';
import { PluginMeta } from '@grafana/ui/src/types'; import { PluginMeta, DataSourceSettings } from '@grafana/ui/src/types';
import config from 'app/core/config'; import config from 'app/core/config';
export function buildNavModel(dataSource: DataSource, pluginMeta: PluginMeta): NavModelItem { export function buildNavModel(dataSource: DataSourceSettings, pluginMeta: PluginMeta): NavModelItem {
const navModel = { const navModel = {
img: pluginMeta.info.logos.large, img: pluginMeta.info.logos.large,
id: 'datasource-' + dataSource.id, id: 'datasource-' + dataSource.id,

View File

@ -1,10 +1,11 @@
import { DataSource, DataSourcesState, Plugin } from 'app/types'; import { DataSourcesState, Plugin } from 'app/types';
import { DataSourceSettings } from '@grafana/ui/src/types';
import { Action, ActionTypes } from './actions'; import { Action, ActionTypes } from './actions';
import { LayoutModes } from '../../../core/components/LayoutSelector/LayoutSelector'; import { LayoutModes } from 'app/core/components/LayoutSelector/LayoutSelector';
const initialState: DataSourcesState = { const initialState: DataSourcesState = {
dataSources: [] as DataSource[], dataSources: [] as DataSourceSettings[],
dataSource: {} as DataSource, dataSource: {} as DataSourceSettings,
layoutMode: LayoutModes.List, layoutMode: LayoutModes.List,
searchQuery: '', searchQuery: '',
dataSourcesCount: 0, dataSourcesCount: 0,

View File

@ -1,4 +1,4 @@
import { DataSource } from '../../../types'; import { DataSourceSettings } from '@grafana/ui/src/types';
export const getDataSources = state => { export const getDataSources = state => {
const regex = new RegExp(state.searchQuery, 'i'); const regex = new RegExp(state.searchQuery, 'i');
@ -16,11 +16,11 @@ export const getDataSourceTypes = state => {
}); });
}; };
export const getDataSource = (state, dataSourceId): DataSource | null => { export const getDataSource = (state, dataSourceId): DataSourceSettings | null => {
if (state.dataSource.id === parseInt(dataSourceId, 10)) { if (state.dataSource.id === parseInt(dataSourceId, 10)) {
return state.dataSource; return state.dataSource;
} }
return {} as DataSource; return {} as DataSourceSettings;
}; };
export const getDataSourceMeta = (state, type): Plugin => { export const getDataSourceMeta = (state, type): Plugin => {

View File

@ -9,7 +9,7 @@ import { AutoSizer } from 'react-virtualized';
import store from 'app/core/store'; import store from 'app/core/store';
// Components // Components
import { DataSourceSelectItem } from 'app/types/datasources'; import { DataSourceSelectItem } from '@grafana/ui/src/types';
import { DataSourcePicker } from 'app/core/components/Select/DataSourcePicker'; import { DataSourcePicker } from 'app/core/components/Select/DataSourcePicker';
import { Alert } from './Error'; import { Alert } from './Error';
import ErrorBoundary from './ErrorBoundary'; import ErrorBoundary from './ErrorBoundary';

View File

@ -1,6 +1,6 @@
// Types // Types
import { Emitter } from 'app/core/core'; import { Emitter } from 'app/core/core';
import { RawTimeRange, TimeRange, DataQuery } from '@grafana/ui'; import { RawTimeRange, TimeRange, DataQuery, DataSourceSelectItem } from '@grafana/ui/src/types';
import { import {
ExploreId, ExploreId,
ExploreItemState, ExploreItemState,
@ -9,7 +9,6 @@ import {
ResultType, ResultType,
QueryTransaction, QueryTransaction,
} from 'app/types/explore'; } from 'app/types/explore';
import { DataSourceSelectItem } from 'app/types/datasources';
export enum ActionTypes { export enum ActionTypes {
AddQueryRow = 'explore/ADD_QUERY_ROW', AddQueryRow = 'explore/ADD_QUERY_ROW',

View File

@ -16,9 +16,8 @@ import {
import { updateLocation } from 'app/core/actions'; import { updateLocation } from 'app/core/actions';
import store from 'app/core/store'; import store from 'app/core/store';
import { DataSourceSelectItem } from 'app/types/datasources';
import { StoreState } from 'app/types'; import { StoreState } from 'app/types';
import { DataQuery } from '@grafana/ui/src/types'; import { DataQuery, DataSourceSelectItem } from '@grafana/ui/src/types';
import { getDatasourceSrv } from 'app/features/plugins/datasource_srv'; import { getDatasourceSrv } from 'app/features/plugins/datasource_srv';
import { import {
ExploreId, ExploreId,

View File

@ -1,14 +1,16 @@
// Libraries
import _ from 'lodash'; import _ from 'lodash';
import coreModule from 'app/core/core_module'; import coreModule from 'app/core/core_module';
// Services & Utils
import config from 'app/core/config'; import config from 'app/core/config';
import { importPluginModule } from './plugin_loader'; import { importPluginModule } from './plugin_loader';
import { DataSourceApi } from '@grafana/ui/src/types'; // Types
import { DataSource, DataSourceSelectItem } from 'app/types'; import { DataSourceApi, DataSourceSelectItem } from '@grafana/ui/src/types';
export class DatasourceSrv { export class DatasourceSrv {
datasources: { [name: string]: DataSource }; datasources: { [name: string]: DataSourceApi };
/** @ngInject */ /** @ngInject */
constructor(private $q, private $injector, private $rootScope, private templateSrv) { constructor(private $q, private $injector, private $rootScope, private templateSrv) {
@ -59,7 +61,7 @@ export class DatasourceSrv {
throw new Error('Plugin module is missing Datasource constructor'); throw new Error('Plugin module is missing Datasource constructor');
} }
const instance: DataSource = this.$injector.instantiate(plugin.Datasource, { instanceSettings: dsConfig }); const instance: DataSourceApi = this.$injector.instantiate(plugin.Datasource, { instanceSettings: dsConfig });
instance.meta = pluginDef; instance.meta = pluginDef;
instance.name = name; instance.name = name;
instance.pluginExports = plugin; instance.pluginExports = plugin;

View File

@ -1,9 +1,14 @@
// Libraries
import _ from 'lodash'; import _ from 'lodash';
import { DataSource, NavModel } from 'app/types';
import { PluginMeta } from '@grafana/ui/src/types'; // Utils & Services
import config from 'app/core/config'; import config from 'app/core/config';
export function buildNavModel(ds: DataSource, plugin: PluginMeta, currentPage: string): NavModel { // Types
import { NavModel } from 'app/types';
import { PluginMeta, DataSourceSettings } from '@grafana/ui/src/types';
export function buildNavModel(ds: DataSourceSettings, plugin: PluginMeta, currentPage: string): NavModel {
let title = 'New'; let title = 'New';
const subTitle = `Type: ${plugin.name}`; const subTitle = `Type: ${plugin.name}`;

View File

@ -14,7 +14,7 @@ import DataSourcesListPage from 'app/features/datasources/DataSourcesListPage';
import NewDataSourcePage from '../features/datasources/NewDataSourcePage'; import NewDataSourcePage from '../features/datasources/NewDataSourcePage';
import UsersListPage from 'app/features/users/UsersListPage'; import UsersListPage from 'app/features/users/UsersListPage';
import DataSourceDashboards from 'app/features/datasources/DataSourceDashboards'; import DataSourceDashboards from 'app/features/datasources/DataSourceDashboards';
import DataSourceSettings from '../features/datasources/settings/DataSourceSettings'; import DataSourceSettingsPage from '../features/datasources/settings/DataSourceSettingsPage';
import OrgDetailsPage from '../features/org/OrgDetailsPage'; import OrgDetailsPage from '../features/org/OrgDetailsPage';
/** @ngInject */ /** @ngInject */
@ -78,7 +78,7 @@ export function setupAngularRoutes($routeProvider, $locationProvider) {
.when('/datasources/edit/:id/', { .when('/datasources/edit/:id/', {
template: '<react-container />', template: '<react-container />',
resolve: { resolve: {
component: () => DataSourceSettings, component: () => DataSourceSettingsPage,
}, },
}) })
.when('/datasources/edit/:id/dashboards', { .when('/datasources/edit/:id/dashboards', {

View File

@ -1,44 +1,15 @@
import { LayoutMode } from '../core/components/LayoutSelector/LayoutSelector'; import { LayoutMode } from '../core/components/LayoutSelector/LayoutSelector';
import { Plugin } from './plugins'; import { Plugin } from './plugins';
import { PluginExports, PluginMeta } from '@grafana/ui/src/types'; import { DataSourceSettings } from '@grafana/ui/src/types';
export interface DataSource {
id: number;
orgId: number;
name: string;
typeLogoUrl: string;
type: string;
access: string;
url: string;
password: string;
user: string;
database: string;
basicAuth: boolean;
basicAuthPassword: string;
basicAuthUser: string;
isDefault: boolean;
jsonData: { authType: string; defaultRegion: string };
readOnly: boolean;
withCredentials: boolean;
meta?: PluginMeta;
pluginExports?: PluginExports;
}
export interface DataSourceSelectItem {
name: string;
value: string | null;
meta: PluginMeta;
sort: string;
}
export interface DataSourcesState { export interface DataSourcesState {
dataSources: DataSource[]; dataSources: DataSourceSettings[];
searchQuery: string; searchQuery: string;
dataSourceTypeSearchQuery: string; dataSourceTypeSearchQuery: string;
layoutMode: LayoutMode; layoutMode: LayoutMode;
dataSourcesCount: number; dataSourcesCount: number;
dataSourceTypes: Plugin[]; dataSourceTypes: Plugin[];
dataSource: DataSource; dataSource: DataSourceSettings;
dataSourceMeta: Plugin; dataSourceMeta: Plugin;
hasFetched: boolean; hasFetched: boolean;
} }

View File

@ -1,10 +1,9 @@
import { Value } from 'slate'; import { Value } from 'slate';
import { RawTimeRange, TimeRange, DataQuery } from '@grafana/ui'; import { RawTimeRange, TimeRange, DataQuery, DataSourceSelectItem } from '@grafana/ui';
import { Emitter } from 'app/core/core'; import { Emitter } from 'app/core/core';
import { LogsModel } from 'app/core/logs_model'; import { LogsModel } from 'app/core/logs_model';
import TableModel from 'app/core/table_model'; import TableModel from 'app/core/table_model';
import { DataSourceSelectItem } from 'app/types/datasources';
export interface CompletionItem { export interface CompletionItem {
/** /**