From adbefcc37ddd16294a8f55cd5882dfd8f4ab354a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Mon, 2 Sep 2019 20:45:42 +0200 Subject: [PATCH] DataSourceSettings: Fixed issue changing data source name, fixes #18660 (#18826) --- .../settings/DataSourceSettingsPage.test.tsx | 3 +- .../settings/DataSourceSettingsPage.tsx | 35 +++++++++---------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/public/app/features/datasources/settings/DataSourceSettingsPage.test.tsx b/public/app/features/datasources/settings/DataSourceSettingsPage.test.tsx index 42450d640b5..12ca27ce15f 100644 --- a/public/app/features/datasources/settings/DataSourceSettingsPage.test.tsx +++ b/public/app/features/datasources/settings/DataSourceSettingsPage.test.tsx @@ -5,7 +5,7 @@ import { DataSourceSettings, DataSourcePlugin, DataSourceConstructor } from '@gr import { NavModel } from '@grafana/data'; import { getMockDataSource } from '../__mocks__/dataSourcesMocks'; import { getMockPlugin } from '../../plugins/__mocks__/pluginMocks'; -import { setDataSourceName, setIsDefault } from '../state/actions'; +import { setDataSourceName, setIsDefault, dataSourceLoaded } from '../state/actions'; const pluginMock = new DataSourcePlugin({} as DataSourceConstructor); @@ -26,6 +26,7 @@ const setup = (propOverrides?: object) => { setDataSourceName, updateDataSource: jest.fn(), setIsDefault, + dataSourceLoaded, query: {}, ...propOverrides, }; diff --git a/public/app/features/datasources/settings/DataSourceSettingsPage.tsx b/public/app/features/datasources/settings/DataSourceSettingsPage.tsx index 2c3b99990a1..610e118898c 100644 --- a/public/app/features/datasources/settings/DataSourceSettingsPage.tsx +++ b/public/app/features/datasources/settings/DataSourceSettingsPage.tsx @@ -17,7 +17,14 @@ import { getDatasourceSrv } from 'app/features/plugins/datasource_srv'; // Actions & selectors import { getDataSource, getDataSourceMeta } from '../state/selectors'; -import { deleteDataSource, loadDataSource, setDataSourceName, setIsDefault, updateDataSource } from '../state/actions'; +import { + deleteDataSource, + loadDataSource, + setDataSourceName, + setIsDefault, + updateDataSource, + dataSourceLoaded, +} from '../state/actions'; import { getNavModel } from 'app/core/selectors/navModel'; import { getRouteParamsId } from 'app/core/selectors/location'; @@ -40,13 +47,13 @@ export interface Props { setDataSourceName: typeof setDataSourceName; updateDataSource: typeof updateDataSource; setIsDefault: typeof setIsDefault; + dataSourceLoaded: typeof dataSourceLoaded; plugin?: GenericDataSourcePlugin; query: UrlQueryMap; page?: string; } interface State { - dataSource: DataSourceSettings; plugin?: GenericDataSourcePlugin; isTesting?: boolean; testingMessage?: string; @@ -59,7 +66,6 @@ export class DataSourceSettingsPage extends PureComponent { super(props); this.state = { - dataSource: props.dataSource, plugin: props.plugin, }; } @@ -93,18 +99,10 @@ export class DataSourceSettingsPage extends PureComponent { } } - componentDidUpdate(prevProps: Props) { - const { dataSource } = this.props; - - if (prevProps.dataSource !== dataSource) { - this.setState({ dataSource }); - } - } - onSubmit = async (evt: React.FormEvent) => { evt.preventDefault(); - await this.props.updateDataSource({ ...this.state.dataSource }); + await this.props.updateDataSource({ ...this.props.dataSource }); this.testDataSource(); }; @@ -132,7 +130,7 @@ export class DataSourceSettingsPage extends PureComponent { }; onModelChange = (dataSource: DataSourceSettings) => { - this.setState({ dataSource }); + this.props.dataSourceLoaded(dataSource); }; isReadOnly() { @@ -149,7 +147,7 @@ export class DataSourceSettingsPage extends PureComponent { } async testDataSource() { - const dsApi = await getDatasourceSrv().get(this.state.dataSource.name); + const dsApi = await getDatasourceSrv().get(this.props.dataSource.name); if (!dsApi.testDatasource) { return; @@ -185,7 +183,7 @@ export class DataSourceSettingsPage extends PureComponent { } get hasDataSource() { - return this.state.dataSource.id > 0; + return this.props.dataSource.id > 0; } renderLoadError(loadError: any) { @@ -245,8 +243,8 @@ export class DataSourceSettingsPage extends PureComponent { } renderSettings() { - const { dataSourceMeta, setDataSourceName, setIsDefault } = this.props; - const { testingMessage, testingStatus, dataSource, plugin } = this.state; + const { dataSourceMeta, setDataSourceName, setIsDefault, dataSource } = this.props; + const { testingMessage, testingStatus, plugin } = this.state; return (
@@ -270,7 +268,7 @@ export class DataSourceSettingsPage extends PureComponent { {plugin && ( @@ -348,6 +346,7 @@ const mapDispatchToProps = { setDataSourceName, updateDataSource, setIsDefault, + dataSourceLoaded, }; export default hot(module)(