import React, { useEffect } from 'react'; import { DataSourcePluginOptionsEditorProps } from '@grafana/data'; import { Alert, DataSourceHttpSettings } from '@grafana/ui'; import { config } from 'app/core/config'; import { ElasticsearchOptions } from '../types'; import { isSupportedVersion } from '../utils'; import { DataLinks } from './DataLinks'; import { ElasticDetails } from './ElasticDetails'; import { LogsConfig } from './LogsConfig'; import { coerceOptions, isValidOptions } from './utils'; export type Props = DataSourcePluginOptionsEditorProps; export const ConfigEditor = (props: Props) => { const { options: originalOptions, onOptionsChange } = props; const options = coerceOptions(originalOptions); useEffect(() => { if (!isValidOptions(originalOptions)) { onOptionsChange(coerceOptions(originalOptions)); } // We can't enforce the eslint rule here because we only want to run this once. // eslint-disable-next-line react-hooks/exhaustive-deps }, []); const supportedVersion = isSupportedVersion(options.jsonData.esVersion); return ( <> {options.access === 'direct' && ( Browser access mode in the Elasticsearch datasource is no longer available. Switch to server access mode. )} {!supportedVersion && ( {`Support for Elasticsearch versions after their end-of-life (currently versions < 7.10) was removed`} )} onOptionsChange({ ...options, jsonData: newValue, }) } /> { onOptionsChange({ ...options, jsonData: { ...options.jsonData, dataLinks: newValue, }, }); }} /> ); };