Files
superset2/superset/assets/javascripts/explore/components/ControlPanelSection.jsx
Maxime Beauchemin 670ba5d32e Collapsible Control sections (#3354)
The left panel of the explore view has become crowded and overwhelming
overtime. This PR adds functionality to collapse the control sections,
and sets most sections to be collapse by default as the explore view
opens up.

* breakdown `Query` section for most viz
* bring filters to the top, under Query section
* collapse most sections by default
* removed confusing outdated description for Filter section
2017-08-22 16:10:55 -07:00

63 lines
1.5 KiB
JavaScript

import React from 'react';
import PropTypes from 'prop-types';
import { Panel } from 'react-bootstrap';
import InfoTooltipWithTrigger from '../../components/InfoTooltipWithTrigger';
const propTypes = {
label: PropTypes.string,
description: PropTypes.string,
children: PropTypes.node.isRequired,
startExpanded: PropTypes.bool,
};
const defaultProps = {
label: null,
description: null,
startExpanded: false,
};
export default class ControlPanelSection extends React.Component {
constructor(props) {
super(props);
this.state = { expanded: this.props.startExpanded };
}
toggleExpand() {
this.setState({ expanded: !this.state.expanded });
}
renderHeader() {
const { label, description } = this.props;
let header;
if (label) {
header = (
<div>
<i
className={`text-primary expander fa fa-caret-${this.state.expanded ? 'down' : 'right'}`}
onClick={this.toggleExpand.bind(this)}
/>
{' '}
<span onClick={this.toggleExpand.bind(this)}>{label}</span>
{' '}
{description && <InfoTooltipWithTrigger label={label} tooltip={description} />}
</div>
);
}
return header;
}
render() {
return (
<Panel
className="control-panel-section"
collapsible
expanded={this.state.expanded}
header={this.renderHeader()}
>
{this.props.children}
</Panel>
);
}
}
ControlPanelSection.propTypes = propTypes;
ControlPanelSection.defaultProps = defaultProps;