import React, { PureComponent } from 'react'; import { connect } from 'react-redux'; import { hot } from 'react-hot-loader'; import Page from 'app/core/components/Page/Page'; import { NavModel, Plugin, StoreState } from 'app/types'; import { addDataSource, loadDataSourceTypes, setDataSourceTypeSearchQuery } from './state/actions'; import { getNavModel } from 'app/core/selectors/navModel'; import { getDataSourceTypes } from './state/selectors'; import { FilterInput } from 'app/core/components/FilterInput/FilterInput'; export interface Props { navModel: NavModel; dataSourceTypes: Plugin[]; isLoading: boolean; addDataSource: typeof addDataSource; loadDataSourceTypes: typeof loadDataSourceTypes; dataSourceTypeSearchQuery: string; setDataSourceTypeSearchQuery: typeof setDataSourceTypeSearchQuery; } class NewDataSourcePage extends PureComponent { componentDidMount() { this.props.loadDataSourceTypes(); } onDataSourceTypeClicked = (plugin: Plugin) => { this.props.addDataSource(plugin); }; onSearchQueryChange = (value: string) => { this.props.setDataSourceTypeSearchQuery(value); }; render() { const { navModel, dataSourceTypes, dataSourceTypeSearchQuery, isLoading } = this.props; return (

Choose data source type

{dataSourceTypes.map((plugin, index) => { return (
this.onDataSourceTypeClicked(plugin)} className="add-data-source-grid-item" key={`${plugin.id}-${index}`} > {plugin.name}
); })}
); } } function mapStateToProps(state: StoreState) { return { navModel: getNavModel(state.navIndex, 'datasources'), dataSourceTypes: getDataSourceTypes(state.dataSources), dataSourceTypeSearchQuery: state.dataSources.dataSourceTypeSearchQuery, isLoading: state.dataSources.isLoadingDataSources, }; } const mapDispatchToProps = { addDataSource, loadDataSourceTypes, setDataSourceTypeSearchQuery, }; export default hot(module)( connect( mapStateToProps, mapDispatchToProps )(NewDataSourcePage) );