/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import React from 'react'; import PropTypes from 'prop-types'; import { TextArea } from 'src/common/components'; import { debounce } from 'lodash'; import { t } from '@superset-ui/core'; import { FAST_DEBOUNCE } from 'src/constants'; import Button from 'src/components/Button'; import { TextAreaEditor } from 'src/components/AsyncAceEditor'; import ModalTrigger from 'src/components/ModalTrigger'; import ControlHeader from 'src/explore/components/ControlHeader'; const propTypes = { name: PropTypes.string, onChange: PropTypes.func, value: PropTypes.string, height: PropTypes.number, minLines: PropTypes.number, maxLines: PropTypes.number, offerEditInModal: PropTypes.bool, language: PropTypes.oneOf([ null, 'json', 'html', 'sql', 'markdown', 'javascript', ]), aboveEditorSection: PropTypes.node, readOnly: PropTypes.bool, }; const defaultProps = { onChange: () => {}, value: '', height: 250, minLines: 3, maxLines: 10, offerEditInModal: true, readOnly: false, }; export default class TextAreaControl extends React.Component { constructor() { super(); this.onAceChangeDebounce = debounce(value => { this.onAceChange(value); }, FAST_DEBOUNCE); } onControlChange(event) { this.props.onChange(event.target.value); } onAceChange(value) { this.props.onChange(value); } renderEditor(inModal = false) { const value = this.props.value || ''; const minLines = inModal ? 40 : this.props.minLines || 12; if (this.props.language) { const style = { border: '1px solid #CCC' }; if (this.props.readOnly) { style.backgroundColor = '#f2f2f2'; } return ( ); } return (