diff --git a/superset/assets/javascripts/explore/components/Control.jsx b/superset/assets/javascripts/explore/components/Control.jsx
index 6f261167d..cd9e732df 100644
--- a/superset/assets/javascripts/explore/components/Control.jsx
+++ b/superset/assets/javascripts/explore/components/Control.jsx
@@ -1,6 +1,5 @@
import React from 'react';
import PropTypes from 'prop-types';
-import ControlHeader from './ControlHeader';
import CheckboxControl from './controls/CheckboxControl';
import FilterControl from './controls/FilterControl';
@@ -90,13 +89,6 @@ export default class Control extends React.PureComponent {
const divStyle = this.props.hidden ? { display: 'none' } : null;
return (
-
0);
return (
@@ -64,6 +65,9 @@ export default function ControlHeader({
{' '}
}
+ {leftNode &&
+ {leftNode}
+ }
{rightNode &&
diff --git a/superset/assets/javascripts/explore/components/controls/CheckboxControl.jsx b/superset/assets/javascripts/explore/components/controls/CheckboxControl.jsx
index a32926d56..bb5d2ce74 100644
--- a/superset/assets/javascripts/explore/components/controls/CheckboxControl.jsx
+++ b/superset/assets/javascripts/explore/components/controls/CheckboxControl.jsx
@@ -1,6 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { Checkbox } from 'react-bootstrap';
+import ControlHeader from '../ControlHeader';
const propTypes = {
name: PropTypes.string.isRequired,
@@ -21,9 +22,14 @@ export default class CheckboxControl extends React.Component {
}
render() {
return (
-
+ }
/>
);
}
diff --git a/superset/assets/javascripts/explore/components/controls/Filter.jsx b/superset/assets/javascripts/explore/components/controls/Filter.jsx
index afa63423d..bcb0eb924 100644
--- a/superset/assets/javascripts/explore/components/controls/Filter.jsx
+++ b/superset/assets/javascripts/explore/components/controls/Filter.jsx
@@ -94,6 +94,7 @@ export default class Filter extends React.Component {
renderFilterFormControl(filter) {
const operator = operators[filter.op];
if (operator.useSelect && !this.props.having) {
+ // TODO should use a simple Select, not a control here...
return (
);
}
diff --git a/superset/assets/javascripts/explore/components/controls/SelectControl.jsx b/superset/assets/javascripts/explore/components/controls/SelectControl.jsx
index 19f0727e6..09a7346a4 100644
--- a/superset/assets/javascripts/explore/components/controls/SelectControl.jsx
+++ b/superset/assets/javascripts/explore/components/controls/SelectControl.jsx
@@ -1,6 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import Select, { Creatable } from 'react-select';
+import ControlHeader from '../ControlHeader';
const propTypes = {
choices: PropTypes.array,
@@ -13,6 +14,7 @@ const propTypes = {
name: PropTypes.string.isRequired,
onChange: PropTypes.func,
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.array]),
+ showHeader: PropTypes.bool,
};
const defaultProps = {
@@ -24,6 +26,7 @@ const defaultProps = {
label: null,
multi: false,
onChange: () => {},
+ showHeader: true,
};
export default class SelectControl extends React.PureComponent {
@@ -115,6 +118,9 @@ export default class SelectControl extends React.PureComponent {
() : ();
return (
+ {this.props.showHeader &&
+
+ }
{selectWrap}
);
diff --git a/superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx b/superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx
index 7765040d4..04a1e87c4 100644
--- a/superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx
+++ b/superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx
@@ -1,6 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { FormGroup, FormControl } from 'react-bootstrap';
+import ControlHeader from '../ControlHeader';
const propTypes = {
name: PropTypes.string.isRequired,
@@ -23,14 +24,17 @@ export default class TextAreaControl extends React.Component {
}
render() {
return (
-
-
-
+
+
+
+
+
+
);
}
}
diff --git a/superset/assets/javascripts/explore/components/controls/TextControl.jsx b/superset/assets/javascripts/explore/components/controls/TextControl.jsx
index f596c1ae9..c3f7aa568 100644
--- a/superset/assets/javascripts/explore/components/controls/TextControl.jsx
+++ b/superset/assets/javascripts/explore/components/controls/TextControl.jsx
@@ -2,6 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import { FormGroup, FormControl } from 'react-bootstrap';
import * as v from '../../validators';
+import ControlHeader from '../ControlHeader';
const propTypes = {
name: PropTypes.string.isRequired,
@@ -58,14 +59,17 @@ export default class TextControl extends React.Component {
}
render() {
return (
-
-
-
+
+
+
+
+
+
);
}
}
diff --git a/superset/assets/javascripts/explore/stores/controls.jsx b/superset/assets/javascripts/explore/stores/controls.jsx
index 7d0ebfd12..693201d5c 100644
--- a/superset/assets/javascripts/explore/stores/controls.jsx
+++ b/superset/assets/javascripts/explore/stores/controls.jsx
@@ -972,6 +972,7 @@ export const controls = {
type: 'CheckboxControl',
label: 'Donut',
default: false,
+ renderTrigger: true,
description: 'Do you want a donut or a pie?',
},
@@ -979,6 +980,7 @@ export const controls = {
type: 'CheckboxControl',
label: 'Put labels outside',
default: true,
+ renderTrigger: true,
description: 'Put the labels outside the pie?',
},
diff --git a/superset/assets/spec/javascripts/explorev2/components/CheckboxControl_spec.jsx b/superset/assets/spec/javascripts/explorev2/components/CheckboxControl_spec.jsx
index 2360ddb30..5512b9672 100644
--- a/superset/assets/spec/javascripts/explorev2/components/CheckboxControl_spec.jsx
+++ b/superset/assets/spec/javascripts/explorev2/components/CheckboxControl_spec.jsx
@@ -4,29 +4,24 @@ import { Checkbox } from 'react-bootstrap';
import sinon from 'sinon';
import { expect } from 'chai';
import { describe, it, beforeEach } from 'mocha';
-import { shallow } from 'enzyme';
+import { mount } from 'enzyme';
import CheckboxControl from '../../../../javascripts/explore/components/controls/CheckboxControl';
const defaultProps = {
name: 'show_legend',
onChange: sinon.spy(),
+ value: false,
};
describe('CheckboxControl', () => {
let wrapper;
beforeEach(() => {
- wrapper = shallow();
+ wrapper = mount();
});
it('renders a Checkbox', () => {
expect(wrapper.find(Checkbox)).to.have.lengthOf(1);
});
-
- it('calls onChange when toggled', () => {
- const checkbox = wrapper.find(Checkbox);
- checkbox.simulate('change', { value: true });
- expect(defaultProps.onChange.calledWith(true)).to.be.true;
- });
});