Skip to content

Commit

Permalink
[sql-lab] make query history scrollable (#2499)
Browse files Browse the repository at this point in the history
* make query history scrollable

* not around results
  • Loading branch information
Alanna Scott committed Apr 4, 2017
1 parent 02c5cac commit d93b1fc
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 34 deletions.
37 changes: 6 additions & 31 deletions superset/assets/javascripts/SqlLab/components/ResultSet.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import shortid from 'shortid';
import VisualizeModal from './VisualizeModal';
import HighlightedSql from './HighlightedSql';

const RESULTS_CONTROLS_HEIGHT = 36;

const propTypes = {
actions: React.PropTypes.object,
csv: React.PropTypes.bool,
Expand Down Expand Up @@ -52,36 +54,6 @@ class ResultSet extends React.PureComponent {
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;
Expand Down Expand Up @@ -223,7 +195,10 @@ class ResultSet extends React.PureComponent {
/>
{this.getControls.bind(this)()}
{sql}
<div className="ResultSet" style={{ height: `${this.state.resultSetHeight}px` }}>
<div
className="ResultSet"
style={{ height: `${this.props.resultSetHeight - RESULTS_CONTROLS_HEIGHT}px` }}
>
<Table
data={data.map(function (row) {
const newRow = {};
Expand Down
51 changes: 48 additions & 3 deletions superset/assets/javascripts/SqlLab/components/SouthPane.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,36 @@ const defaultProps = {
};

class SouthPane extends React.PureComponent {
constructor(props) {
super(props);
this.state = {
innerTabHeight: this.getInnerTabHeight(),
};
}
getInnerTabHeight() {
// hack to get height the tab container so it can be fixed and scroll in place
// calculate inner tab 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;

const sum =
sqlEditorHeight +
sqlToolbar +
tabsHeight +
headerHeight;

return window.innerHeight - sum - 95;
}
switchTab(id) {
this.props.actions.setActiveSouthPaneTab(id);
}
Expand All @@ -36,7 +66,13 @@ class SouthPane extends React.PureComponent {
let results;
if (latestQuery) {
results = (
<ResultSet showControls search query={latestQuery} actions={props.actions} />
<ResultSet
showControls
search
query={latestQuery}
actions={props.actions}
resultSetHeight={this.state.innerTabHeight}
/>
);
} else {
results = <Alert bsStyle="info">Run a query to display results here</Alert>;
Expand All @@ -48,7 +84,14 @@ class SouthPane extends React.PureComponent {
eventKey={query.id}
key={query.id}
>
<ResultSet query={query} visualize={false} csv={false} actions={props.actions} cache />
<ResultSet
query={query}
visualize={false}
csv={false}
actions={props.actions}
cache
resultSetHeight={this.state.innerTabHeight}
/>
</Tab>
));

Expand All @@ -70,7 +113,9 @@ class SouthPane extends React.PureComponent {
title="Query History"
eventKey="History"
>
<QueryHistory queries={props.editorQueries} actions={props.actions} />
<div style={{ height: `${this.state.innerTabHeight}px`, overflow: 'scroll' }}>
<QueryHistory queries={props.editorQueries} actions={props.actions} />
</div>
</Tab>
{dataPreviewTabs}
</Tabs>
Expand Down

0 comments on commit d93b1fc

Please sign in to comment.