DataSourceDashboards.tsx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import React, { PureComponent } from 'react';
  2. import { hot } from 'react-hot-loader';
  3. import { connect } from 'react-redux';
  4. import PageHeader from 'app/core/components/PageHeader/PageHeader';
  5. import DashboardTable from './DashboardsTable';
  6. import { DataSource, NavModel, PluginDashboard } from 'app/types';
  7. import { getNavModel } from 'app/core/selectors/navModel';
  8. import { getRouteParamsId } from 'app/core/selectors/location';
  9. import { loadDataSource } from './state/actions';
  10. import { loadPluginDashboards } from '../plugins/state/actions';
  11. import { importDashboard, removeDashboard } from '../dashboard/state/actions';
  12. import { getDataSource } from './state/selectors';
  13. export interface Props {
  14. navModel: NavModel;
  15. dashboards: PluginDashboard[];
  16. dataSource: DataSource;
  17. pageId: number;
  18. importDashboard: typeof importDashboard;
  19. loadDataSource: typeof loadDataSource;
  20. loadPluginDashboards: typeof loadPluginDashboards;
  21. removeDashboard: typeof removeDashboard;
  22. }
  23. export class DataSourceDashboards extends PureComponent<Props> {
  24. async componentDidMount() {
  25. const { loadDataSource, pageId } = this.props;
  26. await loadDataSource(pageId);
  27. this.props.loadPluginDashboards();
  28. }
  29. onImport = (dashboard: PluginDashboard, overwrite: boolean) => {
  30. const { dataSource, importDashboard } = this.props;
  31. const data = {
  32. pluginId: dashboard.pluginId,
  33. path: dashboard.path,
  34. overwrite: overwrite,
  35. inputs: [],
  36. };
  37. if (dataSource) {
  38. data.inputs.push({
  39. name: '*',
  40. type: 'datasource',
  41. pluginId: dataSource.type,
  42. value: dataSource.name,
  43. });
  44. }
  45. importDashboard(data, dashboard.title);
  46. };
  47. onRemove = (dashboard: PluginDashboard) => {
  48. this.props.removeDashboard(dashboard.importedUri);
  49. };
  50. render() {
  51. const { dashboards, navModel } = this.props;
  52. return (
  53. <div>
  54. <PageHeader model={navModel} />
  55. <div className="page-container page-body">
  56. <DashboardTable
  57. dashboards={dashboards}
  58. onImport={(dashboard, overwrite) => this.onImport(dashboard, overwrite)}
  59. onRemove={dashboard => this.onRemove(dashboard)}
  60. />
  61. </div>
  62. </div>
  63. );
  64. }
  65. }
  66. function mapStateToProps(state) {
  67. const pageId = getRouteParamsId(state.location);
  68. return {
  69. navModel: getNavModel(state.navIndex, `datasource-dashboards-${pageId}`),
  70. pageId: pageId,
  71. dashboards: state.plugins.dashboards,
  72. dataSource: getDataSource(state.dataSources, pageId),
  73. };
  74. }
  75. const mapDispatchToProps = {
  76. importDashboard,
  77. loadDataSource,
  78. loadPluginDashboards,
  79. removeDashboard,
  80. };
  81. export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(DataSourceDashboards));