/* * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ import React from "react"; import { EuiPanel, EuiButton, EuiFlexGroup, EuiFlexItem, EuiOverlayMask, EuiModal, EuiModalHeader, EuiModalHeaderTitle, EuiModalBody, EuiModalFooter, EuiCodeBlock, EuiText, EuiCodeEditor, EuiSpacer, } from "@elastic/eui"; import { ResponseDetail, TranslateResult } from '../Main/main'; import _ from 'lodash'; import "brace/mode/sql"; import "../../ace-themes/sql_console"; import 'brace/ext/language_tools'; interface SQLPageProps { onRun: (query: string) => void, onTranslate: (query: string) => void, onClear: () => void, updateSQLQueries: (query: string) => void sqlQuery: string, sqlTranslations: ResponseDetail[] } interface SQLPageState { sqlQuery: string, translation: string, isModalVisible: boolean } export class SQLPage extends React.Component { constructor(props: SQLPageProps) { super(props); this.state = { sqlQuery: this.props.sqlQuery, translation: "", isModalVisible: false }; } setIsModalVisible(visible: boolean): void { this.setState({ isModalVisible: visible }) } render() { const closeModal = () => this.setIsModalVisible(false); const showModal = () => this.setIsModalVisible(true); const sqlTranslationsNotEmpty = () => { if (this.props.sqlTranslations.length > 0) { return this.props.sqlTranslations[0].fulfilled; } return false; } const explainContent = sqlTranslationsNotEmpty() ? this.props.sqlTranslations.map((queryTranslation: any) => JSON.stringify(queryTranslation.data, null, 2)).join("\n") : 'This query is not explainable.'; let modal; if (this.state.isModalVisible) { modal = ( Explain {explainContent} Close ); } return (

Query editor

this.props.onRun(this.props.sqlQuery)} > Run { this.props.updateSQLQueries(""); this.props.onClear(); }} > Clear this.props.onTranslate(this.props.sqlQuery) } > Explain {modal}
) } }