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 ' +