diff --git a/superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx b/superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx
index bf789b6b1485f..47b5454f4ccd5 100644
--- a/superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx
+++ b/superset/assets/javascripts/explore/components/controls/TextAreaControl.jsx
@@ -22,6 +22,9 @@ const propTypes = {
value: PropTypes.string,
height: PropTypes.number,
language: PropTypes.oneOf([null, 'json', 'html', 'sql', 'markdown']),
+ minLines: PropTypes.number,
+ maxLines: PropTypes.number,
+ offerEditInModal: PropTypes.bool,
};
const defaultProps = {
@@ -30,6 +33,9 @@ const defaultProps = {
onChange: () => {},
value: '',
height: 250,
+ minLines: 10,
+ maxLines: 10,
+ offerEditInModal: true,
};
export default class TextAreaControl extends React.Component {
@@ -46,8 +52,8 @@ export default class TextAreaControl extends React.Component {
mode={this.props.language}
theme="textmate"
style={{ border: '1px solid #CCC' }}
- minLines={inModal ? 40 : 10}
- maxLines={inModal ? 1000 : 10}
+ minLines={inModal ? 40 : this.props.minLines}
+ maxLines={inModal ? 1000 : this.props.maxLines}
onChange={this.onAceChange.bind(this)}
width="100%"
editorProps={{ $blockScrolling: true }}
@@ -73,16 +79,17 @@ export default class TextAreaControl extends React.Component {
{controlHeader}
{this.renderEditor()}
-
- {t('Edit')} {this.props.language} {t('in modal')}
-
- }
- modalBody={this.renderEditor(true)}
- />
+ {this.props.offerEditInModal &&
+
+ {t('Edit')} {this.props.language} {t('in modal')}
+
+ }
+ modalBody={this.renderEditor(true)}
+ />}
);
}
diff --git a/superset/assets/javascripts/explore/stores/controls.jsx b/superset/assets/javascripts/explore/stores/controls.jsx
index 006a1b49e3c93..5c18b4dacfe37 100644
--- a/superset/assets/javascripts/explore/stores/controls.jsx
+++ b/superset/assets/javascripts/explore/stores/controls.jsx
@@ -910,9 +910,13 @@ export const controls = {
},
where: {
- type: 'TextControl',
+ type: 'TextAreaControl',
label: t('Custom WHERE clause'),
default: '',
+ language: 'sql',
+ minLines: 2,
+ maxLines: 10,
+ offerEditInModal: false,
description: t('The text in this box gets included in your query\'s WHERE ' +
'clause, as an AND to other criteria. You can include ' +
'complex expression, parenthesis and anything else ' +
@@ -920,9 +924,13 @@ export const controls = {
},
having: {
- type: 'TextControl',
+ type: 'TextAreaControl',
label: t('Custom HAVING clause'),
default: '',
+ language: 'sql',
+ minLines: 2,
+ maxLines: 10,
+ offerEditInModal: false,
description: t('The text in this box gets included in your query\'s HAVING ' +
'clause, as an AND to other criteria. You can include ' +
'complex expression, parenthesis and anything else ' +