Browse Source

clear test box if success

Peter Holmberg 7 years ago
parent
commit
682697e2cd

+ 1 - 0
public/app/features/datasources/settings/DataSourceSettings.test.tsx

@@ -16,6 +16,7 @@ const setup = (propOverrides?: object) => {
     setDataSourceName: jest.fn(),
     setDataSourceName: jest.fn(),
     updateDataSource: jest.fn(),
     updateDataSource: jest.fn(),
     testing: {} as DataSourceTest,
     testing: {} as DataSourceTest,
+    clearTesting: jest.fn(),
   };
   };
 
 
   Object.assign(props, propOverrides);
   Object.assign(props, propOverrides);

+ 22 - 1
public/app/features/datasources/settings/DataSourceSettings.tsx

@@ -8,7 +8,7 @@ import PluginSettings from './PluginSettings';
 import BasicSettings from './BasicSettings';
 import BasicSettings from './BasicSettings';
 import ButtonRow from './ButtonRow';
 import ButtonRow from './ButtonRow';
 import appEvents from '../../../core/app_events';
 import appEvents from '../../../core/app_events';
-import { deleteDataSource, loadDataSource, setDataSourceName, updateDataSource } from '../state/actions';
+import { clearTesting, deleteDataSource, loadDataSource, setDataSourceName, updateDataSource } from '../state/actions';
 import { getNavModel } from '../../../core/selectors/navModel';
 import { getNavModel } from '../../../core/selectors/navModel';
 import { getRouteParamsId } from '../../../core/selectors/location';
 import { getRouteParamsId } from '../../../core/selectors/location';
 import { getDataSource, getDataSourceMeta } from '../state/selectors';
 import { getDataSource, getDataSourceMeta } from '../state/selectors';
@@ -23,9 +23,11 @@ export interface Props {
   loadDataSource: typeof loadDataSource;
   loadDataSource: typeof loadDataSource;
   setDataSourceName: typeof setDataSourceName;
   setDataSourceName: typeof setDataSourceName;
   updateDataSource: typeof updateDataSource;
   updateDataSource: typeof updateDataSource;
+  clearTesting: typeof clearTesting;
 }
 }
 interface State {
 interface State {
   dataSource: DataSource;
   dataSource: DataSource;
+  hasClosedTest: boolean;
 }
 }
 
 
 enum DataSourceStates {
 enum DataSourceStates {
@@ -36,6 +38,7 @@ enum DataSourceStates {
 export class DataSourceSettings extends PureComponent<Props, State> {
 export class DataSourceSettings extends PureComponent<Props, State> {
   state = {
   state = {
     dataSource: {} as DataSource,
     dataSource: {} as DataSource,
+    hasClosedTest: false,
   };
   };
 
 
   async componentDidMount() {
   async componentDidMount() {
@@ -44,6 +47,23 @@ export class DataSourceSettings extends PureComponent<Props, State> {
     await loadDataSource(pageId);
     await loadDataSource(pageId);
   }
   }
 
 
+  componentDidUpdate(prevProps) {
+    const { clearTesting } = this.props;
+
+    if (!this.state.hasClosedTest && prevProps.testing.status === 'success') {
+      this.setState({ hasClosedTest: true });
+
+      setTimeout(() => {
+        clearTesting();
+        this.setState({ hasClosedTest: false });
+      }, 3000);
+    }
+  }
+
+  componentWillUnmount() {
+    this.props.clearTesting();
+  }
+
   onSubmit = event => {
   onSubmit = event => {
     event.preventDefault();
     event.preventDefault();
 
 
@@ -194,6 +214,7 @@ const mapDispatchToProps = {
   loadDataSource,
   loadDataSource,
   setDataSourceName,
   setDataSourceName,
   updateDataSource,
   updateDataSource,
+  clearTesting,
 };
 };
 
 
 export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(DataSourceSettings));
 export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(DataSourceSettings));

+ 11 - 1
public/app/features/datasources/state/actions.ts

@@ -21,6 +21,7 @@ export enum ActionTypes {
   SetDataSourceTestingProgess = 'SET_TESTING_PROGRESS',
   SetDataSourceTestingProgess = 'SET_TESTING_PROGRESS',
   SetDataSourceTestingSuccess = 'SET_DATA_SOURCE_TESTING_SUCCESS',
   SetDataSourceTestingSuccess = 'SET_DATA_SOURCE_TESTING_SUCCESS',
   SetDataSourceTestingFail = 'SET_DATA_SOURCE_TESTING_FAIL',
   SetDataSourceTestingFail = 'SET_DATA_SOURCE_TESTING_FAIL',
+  ClearTesting = 'CLEAR_TEST',
 }
 }
 
 
 interface LoadDataSourcesAction {
 interface LoadDataSourcesAction {
@@ -78,6 +79,10 @@ interface SetDataSourceTestingFailAction {
   payload: string;
   payload: string;
 }
 }
 
 
+interface ClearTestingAction {
+  type: ActionTypes.ClearTesting;
+}
+
 const dataSourcesLoaded = (dataSources: DataSource[]): LoadDataSourcesAction => ({
 const dataSourcesLoaded = (dataSources: DataSource[]): LoadDataSourcesAction => ({
   type: ActionTypes.LoadDataSources,
   type: ActionTypes.LoadDataSources,
   payload: dataSources,
   payload: dataSources,
@@ -118,6 +123,10 @@ export const setDataSourceName = (name: string) => ({
   payload: name,
   payload: name,
 });
 });
 
 
+export const clearTesting = (): ClearTestingAction => ({
+  type: ActionTypes.ClearTesting,
+});
+
 const setDataSourceTestingProgress = (state: boolean): SetDataSourceTestingProgessAction => ({
 const setDataSourceTestingProgress = (state: boolean): SetDataSourceTestingProgessAction => ({
   type: ActionTypes.SetDataSourceTestingProgess,
   type: ActionTypes.SetDataSourceTestingProgess,
   payload: state,
   payload: state,
@@ -149,7 +158,8 @@ export type Action =
   | SetDataSourceNameAction
   | SetDataSourceNameAction
   | SetDataSourceTestingProgessAction
   | SetDataSourceTestingProgessAction
   | SetDataSourceTestingSuccessAction
   | SetDataSourceTestingSuccessAction
-  | SetDataSourceTestingFailAction;
+  | SetDataSourceTestingFailAction
+  | ClearTestingAction;
 
 
 type ThunkResult<R> = ThunkAction<R, StoreState, undefined, Action>;
 type ThunkResult<R> = ThunkAction<R, StoreState, undefined, Action>;
 
 

+ 5 - 2
public/app/features/datasources/state/reducers.ts

@@ -1,4 +1,4 @@
-import { DataSource, DataSourcesState, DataSourceTest, Plugin } from 'app/types';
+import { DataSource, DataSourcesState, Plugin } from 'app/types';
 import { Action, ActionTypes } from './actions';
 import { Action, ActionTypes } from './actions';
 import { LayoutModes } from '../../../core/components/LayoutSelector/LayoutSelector';
 import { LayoutModes } from '../../../core/components/LayoutSelector/LayoutSelector';
 
 
@@ -12,7 +12,7 @@ const initialState: DataSourcesState = {
   dataSourceTypeSearchQuery: '',
   dataSourceTypeSearchQuery: '',
   hasFetched: false,
   hasFetched: false,
   dataSourceMeta: {} as Plugin,
   dataSourceMeta: {} as Plugin,
-  testing: {} as DataSourceTest,
+  testing: { inProgress: false, status: '', message: '' },
 };
 };
 
 
 export const dataSourcesReducer = (state = initialState, action: Action): DataSourcesState => {
 export const dataSourcesReducer = (state = initialState, action: Action): DataSourcesState => {
@@ -59,6 +59,9 @@ export const dataSourcesReducer = (state = initialState, action: Action): DataSo
         ...state,
         ...state,
         testing: { status: 'error', message: action.payload, inProgress: false },
         testing: { status: 'error', message: action.payload, inProgress: false },
       };
       };
+
+    case ActionTypes.ClearTesting:
+      return { ...state, testing: { inProgress: false, status: '', message: '' } };
   }
   }
 
 
   return state;
   return state;