From c2c3e15022b2500bea98c662e5249f161de24c9e Mon Sep 17 00:00:00 2001 From: Peter Holmberg Date: Wed, 17 Oct 2018 15:56:34 +0200 Subject: [PATCH] hooked up actions --- .../app/features/dashboard/state/actions.ts | 17 +++++++++ .../datasources/DataSourceDashboards.tsx | 35 +++++++++++++++++-- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/public/app/features/dashboard/state/actions.ts b/public/app/features/dashboard/state/actions.ts index 9e923f6bcb7..1c141556550 100644 --- a/public/app/features/dashboard/state/actions.ts +++ b/public/app/features/dashboard/state/actions.ts @@ -9,6 +9,8 @@ import { DashboardAclUpdateDTO, NewDashboardAclItem, } from 'app/types/acl'; +import appEvents from '../../../core/app_events'; +import { loadPluginDashboards } from '../../plugins/state/actions'; export enum ActionTypes { LoadDashboardPermissions = 'LOAD_DASHBOARD_PERMISSIONS', @@ -113,3 +115,18 @@ export function addDashboardPermission(dashboardId: number, newItem: NewDashboar await dispatch(getDashboardPermissions(dashboardId)); }; } + +export function importDashboard(data, dashboardTitle: string): ThunkResult { + return async dispatch => { + await getBackendSrv().post('/api/dashboards/import', data); + appEvents.emit('alert-success', ['Dashboard Imported', dashboardTitle]); + dispatch(loadPluginDashboards()); + }; +} + +export function removeDashboard(uri: string): ThunkResult { + return async dispatch => { + await getBackendSrv().delete(`/api/dashboards/${uri}`); + dispatch(loadPluginDashboards()); + }; +} diff --git a/public/app/features/datasources/DataSourceDashboards.tsx b/public/app/features/datasources/DataSourceDashboards.tsx index 774c4ca46be..51f9c9ca945 100644 --- a/public/app/features/datasources/DataSourceDashboards.tsx +++ b/public/app/features/datasources/DataSourceDashboards.tsx @@ -3,18 +3,23 @@ import { hot } from 'react-hot-loader'; import { connect } from 'react-redux'; import PageHeader from 'app/core/components/PageHeader/PageHeader'; import DashboardTable from './DashboardsTable'; -import { NavModel, PluginDashboard } from 'app/types'; +import { DataSource, NavModel, PluginDashboard } from 'app/types'; import { getNavModel } from 'app/core/selectors/navModel'; import { getRouteParamsId } from 'app/core/selectors/location'; import { loadDataSource } from './state/actions'; import { loadPluginDashboards } from '../plugins/state/actions'; +import { importDashboard, removeDashboard } from '../dashboard/state/actions'; +import { getDataSource } from './state/selectors'; export interface Props { navModel: NavModel; dashboards: PluginDashboard[]; + dataSource: DataSource; pageId: number; + importDashboard: typeof importDashboard; loadDataSource: typeof loadDataSource; loadPluginDashboards: typeof loadPluginDashboards; + removeDashboard: typeof removeDashboard; } export class DataSourceDashboards extends PureComponent { @@ -25,9 +30,30 @@ export class DataSourceDashboards extends PureComponent { this.props.loadPluginDashboards(); } - onImport = (dashboard, state) => {}; + onImport = (dashboard: PluginDashboard, overwrite: boolean) => { + const { dataSource, importDashboard } = this.props; + const data = { + pluginId: dashboard.pluginId, + path: dashboard.path, + overwrite: overwrite, + inputs: [], + }; - onRemove = dashboard => {}; + if (dataSource) { + data.inputs.push({ + name: '*', + type: 'datasource', + pluginId: dataSource.type, + value: dataSource.name, + }); + } + + importDashboard(data, dashboard.title); + }; + + onRemove = (dashboard: PluginDashboard) => { + this.props.removeDashboard(dashboard.importedUri); + }; render() { const { dashboards, navModel } = this.props; @@ -53,12 +79,15 @@ function mapStateToProps(state) { navModel: getNavModel(state.navIndex, `datasource-dashboards-${pageId}`), pageId: pageId, dashboards: state.plugins.dashboards, + dataSource: getDataSource(state.dataSources, pageId), }; } const mapDispatchToProps = { + importDashboard, loadDataSource, loadPluginDashboards, + removeDashboard, }; export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(DataSourceDashboards));