import { useCallback } from 'react'; import { DataSourcePluginOptionsEditorProps, DataSourceSettings } from '@grafana/data'; import { ConfigSection, DataSourceDescription, ConnectionSettings, Auth, convertLegacyAuthProps, AdvancedHttpSettings, } from '@grafana/plugin-ui'; import { config, reportInteraction } from '@grafana/runtime'; import { Divider, SecureSocksProxySettings, Stack } from '@grafana/ui'; import { LokiOptions } from '../types'; import { AlertingSettings } from './AlertingSettings'; import { DerivedFields } from './DerivedFields'; import { QuerySettings } from './QuerySettings'; export type Props = DataSourcePluginOptionsEditorProps; const makeJsonUpdater = (field: keyof LokiOptions) => (options: DataSourceSettings, value: T): DataSourceSettings => { return { ...options, jsonData: { ...options.jsonData, [field]: value, }, }; }; const setMaxLines = makeJsonUpdater('maxLines'); const setPredefinedOperations = makeJsonUpdater('predefinedOperations'); const setDerivedFields = makeJsonUpdater('derivedFields'); export const ConfigEditor = (props: Props) => { const { options, onOptionsChange } = props; const updatePredefinedOperations = useCallback( (value: string) => { reportInteraction('grafana_loki_predefined_operations_changed', { value }); onOptionsChange(setPredefinedOperations(options, value)); }, [options, onOptionsChange] ); return ( <> {config.secureSocksDSProxyEnabled && ( )} onOptionsChange(setMaxLines(options, value))} predefinedOperations={options.jsonData.predefinedOperations || ''} onPredefinedOperationsChange={updatePredefinedOperations} /> onOptionsChange(setDerivedFields(options, value))} /> ); };