/* global notify */ import React from 'react'; import PropTypes from 'prop-types'; import { Table } from 'reactable'; import { Label, FormControl, Modal, OverlayTrigger, Tooltip } from 'react-bootstrap'; import ControlHeader from '../ControlHeader'; import InfoTooltipWithTrigger from '../../../components/InfoTooltipWithTrigger'; const propTypes = { description: PropTypes.string, label: PropTypes.string, name: PropTypes.string.isRequired, onChange: PropTypes.func, value: PropTypes.string.isRequired, datasource: PropTypes.object.isRequired, }; const defaultProps = { onChange: () => {}, }; export default class DatasourceControl extends React.PureComponent { constructor(props) { super(props); this.state = { showModal: false, filter: '', loading: true, }; this.toggleModal = this.toggleModal.bind(this); this.changeSearch = this.changeSearch.bind(this); this.setSearchRef = this.setSearchRef.bind(this); this.onEnterModal = this.onEnterModal.bind(this); } onChange(vizType) { this.props.onChange(vizType); this.setState({ showModal: false }); } onEnterModal() { if (this.searchRef) { this.searchRef.focus(); } const url = '/superset/datasources/'; const that = this; if (!this.state.datasources) { $.ajax({ type: 'GET', url, success: (data) => { const datasources = data.map(ds => ({ rawName: ds.name, connection: ds.connection, schema: ds.schema, name: ( {ds.name} ), type: ds.type, })); that.setState({ loading: false, datasources }); }, error() { that.setState({ loading: false }); notify.error('Something went wrong while fetching the datasource list'); }, }); } } setSearchRef(searchRef) { this.searchRef = searchRef; } toggleModal() { this.setState({ showModal: !this.state.showModal }); } changeSearch(event) { this.setState({ filter: event.target.value }); } selectDatasource(datasourceId) { this.setState({ showModal: false }); this.props.onChange(datasourceId); } render() { return (
Click to point to another datasource } > { window.location = this.props.datasource.edit_url; }} /> Select a datasource
{ this.setSearchRef(ref); }} type="text" bsSize="sm" value={this.state.filter} placeholder="Search / Filter" onChange={this.changeSearch} />
{this.state.loading && Loading... } {this.state.datasources && } ); } } DatasourceControl.propTypes = propTypes; DatasourceControl.defaultProps = defaultProps;