import React from 'react'; import { DropdownButton, MenuItem, Tab, Tabs } from 'react-bootstrap'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; import * as Actions from '../actions'; import SqlEditor from './SqlEditor'; import shortid from 'shortid'; import { getParamFromQuery, getLink } from '../../../utils/common'; import CopyQueryTabUrl from './CopyQueryTabUrl'; let queryCount = 1; class TabbedSqlEditors extends React.Component { constructor(props) { super(props); const uri = window.location.toString(); const search = window.location.search; const cleanUri = search ? uri.substring(0, uri.indexOf('?')) : uri; const query = search.substring(1); this.state = { uri, cleanUri, query, }; } componentWillMount() { if (this.state.query) { queryCount++; const queryEditorProps = { id: shortid.generate(), title: getParamFromQuery(this.state.query, 'title'), dbId: getParamFromQuery(this.state.query, 'dbid'), schema: getParamFromQuery(this.state.query, 'schema'), autorun: getParamFromQuery(this.state.query, 'autorun'), sql: getParamFromQuery(this.state.query, 'sql'), }; this.props.actions.addQueryEditor(queryEditorProps); // Clean the url in browser history window.history.replaceState({}, document.title, this.state.cleanUri); } } getQueryLink(qe) { const params = []; if (qe.dbId) params.push('dbid=' + qe.dbId); if (qe.title) params.push('title=' + qe.title); if (qe.schema) params.push('schema=' + qe.schema); if (qe.autorun) params.push('autorun=' + qe.autorun); if (qe.sql) params.push('sql=' + qe.sql); return getLink(this.state.cleanUri, params); } renameTab(qe) { /* eslint no-alert: 0 */ const newTitle = prompt('Enter a new title for the tab'); if (newTitle) { this.props.actions.queryEditorSetTitle(qe, newTitle); } } activeQueryEditor() { const qeid = this.props.tabHistory[this.props.tabHistory.length - 1]; for (let i = 0; i < this.props.queryEditors.length; i++) { const qe = this.props.queryEditors[i]; if (qe.id === qeid) { return qe; } } return null; } newQueryEditor() { queryCount++; const activeQueryEditor = this.activeQueryEditor(); const qe = { id: shortid.generate(), title: `Untitled Query ${queryCount}`, dbId: (activeQueryEditor) ? activeQueryEditor.dbId : null, schema: (activeQueryEditor) ? activeQueryEditor.schema : null, autorun: false, sql: 'SELECT ...', }; this.props.actions.addQueryEditor(qe); } handleSelect(key) { if (key === 'add_tab') { this.newQueryEditor(); } else { this.props.actions.setActiveQueryEditor({ id: key }); } } render() { const editors = this.props.queryEditors.map((qe, i) => { let latestQuery = this.props.queries[qe.latestQueryId]; const database = this.props.databases[qe.dbId]; const state = (latestQuery) ? latestQuery.state : ''; const tabTitle = (