NewDataSourcePage.tsx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import React, { PureComponent } from 'react';
  2. import { connect } from 'react-redux';
  3. import { hot } from 'react-hot-loader';
  4. import PageHeader from 'app/core/components/PageHeader/PageHeader';
  5. import { NavModel, Plugin } from 'app/types';
  6. import { addDataSource, loadDataSourceTypes } from './state/actions';
  7. import { updateLocation } from '../../core/actions';
  8. import { getNavModel } from 'app/core/selectors/navModel';
  9. export interface Props {
  10. navModel: NavModel;
  11. dataSourceTypes: Plugin[];
  12. addDataSource: typeof addDataSource;
  13. loadDataSourceTypes: typeof loadDataSourceTypes;
  14. updateLocation: typeof updateLocation;
  15. }
  16. class NewDataSourcePage extends PureComponent<Props> {
  17. componentDidMount() {
  18. this.props.loadDataSourceTypes();
  19. }
  20. onDataSourceTypeClicked = type => {
  21. this.props.addDataSource(type.name, type.value);
  22. };
  23. render() {
  24. const { navModel, dataSourceTypes } = this.props;
  25. return (
  26. <div>
  27. <PageHeader model={navModel} />
  28. <div className="page-container page-body">
  29. <h3 className="add-data-source-header">Choose data source type</h3>
  30. <div className="add-data-source-grid">
  31. {dataSourceTypes.map((type, index) => {
  32. return (
  33. <div
  34. onClick={() => this.onDataSourceTypeClicked(type)}
  35. className="add-data-source-grid-item"
  36. key={`${type.id}-${index}`}
  37. >
  38. <img className="add-data-source-grid-item-logo" src={type.info.logos.small} />
  39. <span className="add-data-source-grid-item-text">{type.name}</span>
  40. </div>
  41. );
  42. })}
  43. </div>
  44. </div>
  45. </div>
  46. );
  47. }
  48. }
  49. function mapStateToProps(state) {
  50. return {
  51. navModel: getNavModel(state.navIndex, 'datasources'),
  52. dataSourceTypes: state.dataSources.dataSourceTypes,
  53. };
  54. }
  55. const mapDispatchToProps = {
  56. addDataSource,
  57. loadDataSourceTypes,
  58. updateLocation,
  59. };
  60. export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(NewDataSourcePage));