/* * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ import { EuiCodeBlock, EuiFieldNumber, EuiForm, EuiFormRow, EuiSpacer, EuiStat, EuiFormLabel, EuiCallOut, EuiProgress, } from '@elastic/eui'; import { i18n } from '@osd/i18n'; import { FormattedMessage } from '@osd/i18n/react'; import React, { useEffect, useState } from 'react'; import { useOpenSearchDashboards } from '../../../../src/plugins/opensearch_dashboards_react/public'; import { ExpressionsExampleServices } from '../types'; export function BasicTab() { const { services: { expressions }, } = useOpenSearchDashboards(); const [input, setInput] = useState(2); const [loading, setLoading] = useState(false); const [result, setResult] = useState( i18n.translate('expressionsExample.tab.demo1.loading', { defaultMessage: 'Still sleeping', }) ); const expression = `sleep time=2000 | square`; useEffect(() => { let isMounted = true; try { setLoading(true); const execution = expressions.execute(expression, input); execution.getData().then((data: any) => { if (!isMounted) return; const value = data?.type === 'error' ? `Error: ${data?.error?.message ?? 'Something went wrong'}` : data; setLoading(false); setResult(String(value)); }); } catch (error) { setLoading(false); setResult(String(error)); } return () => { isMounted = false; }; }, [expressions, input, expression]); return ( <> setInput(Number(e.target.value))} /> {loading && } {expression} ); }