import React from 'react'; import { Alert, Button, ButtonGroup, ProgressBar } from 'react-bootstrap'; import { Table } from 'reactable'; import shortid from 'shortid'; import VisualizeModal from './VisualizeModal'; import HighlightedSql from './HighlightedSql'; const propTypes = { actions: React.PropTypes.object, csv: React.PropTypes.bool, query: React.PropTypes.object, search: React.PropTypes.bool, searchText: React.PropTypes.string, showSql: React.PropTypes.bool, visualize: React.PropTypes.bool, cache: React.PropTypes.bool, }; const defaultProps = { search: true, visualize: true, showSql: false, csv: true, searchText: '', actions: {}, cache: false, }; class ResultSet extends React.PureComponent { constructor(props) { super(props); this.state = { searchText: '', showModal: false, data: [], resultSetHeight: '0', }; } componentWillReceiveProps(nextProps) { // when new results comes in, save them locally and clear in store if (this.props.cache && (!nextProps.query.cached) && nextProps.query.results && nextProps.query.results.data.length > 0) { this.setState( { data: nextProps.query.results.data }, this.clearQueryResults(nextProps.query) ); } if (nextProps.query.resultsKey && nextProps.query.resultsKey !== this.props.query.resultsKey) { this.fetchResults(nextProps.query); } } componentWillMount() { // hack to get height of result set table so it can be fixed and scroll in place if (this.state.resultSetHeight === '0') { // calculate result set table height // document.getElementById('brace-editor').getBoundingClientRect().height; const sqlEditorHeight = 192; // document.getElementById('js-sql-toolbar').getBoundingClientRect().height; const sqlToolbar = 30; // document.getElementsByClassName('nav-tabs')[0].getBoundingClientRect().height * 2; const tabsHeight = 88; // document.getElementsByTagName('header')[0].getBoundingClientRect().height; const headerHeight = 59; // this needs to be hardcoded since this element is in this component and has not mounted yet const resultsControlsHeight = 30; const sum = sqlEditorHeight + sqlToolbar + tabsHeight + resultsControlsHeight + headerHeight; this.setState({ resultSetHeight: window.innerHeight - sum - 95 }); } } getControls() { if (this.props.search || this.props.visualize || this.props.csv) { let csvButton; if (this.props.csv) { csvButton = ( ); } let visualizeButton; if (this.props.visualize) { visualizeButton = ( ); } let searchBox; if (this.props.search) { searchBox = ( ); } return (
{progressBar}