import React, { useCallback, useState } from 'react'; import { SelectableValue } from '@grafana/data'; import { InlineSelect, FlexItem } from '@grafana/experimental'; import { Button, ConfirmModal, RadioButtonGroup } from '@grafana/ui'; import { CloudWatchDatasource } from '../datasource'; import { CloudWatchMetricsQuery, CloudWatchQuery, MetricEditorMode, MetricQueryType } from '../types'; interface MetricsQueryHeaderProps { query: CloudWatchMetricsQuery; datasource: CloudWatchDatasource; onChange: (query: CloudWatchQuery) => void; onRunQuery: () => void; sqlCodeEditorIsDirty: boolean; } const metricEditorModes: Array> = [ { label: 'Metric Search', value: MetricQueryType.Search }, { label: 'Metric Query', value: MetricQueryType.Query }, ]; const editorModes = [ { label: 'Builder', value: MetricEditorMode.Builder }, { label: 'Code', value: MetricEditorMode.Code }, ]; const MetricsQueryHeader: React.FC = ({ query, sqlCodeEditorIsDirty, onChange, onRunQuery, }) => { const { metricEditorMode, metricQueryType } = query; const [showConfirm, setShowConfirm] = useState(false); const onEditorModeChange = useCallback( (newMetricEditorMode: MetricEditorMode) => { if ( sqlCodeEditorIsDirty && metricQueryType === MetricQueryType.Query && metricEditorMode === MetricEditorMode.Code ) { setShowConfirm(true); return; } onChange({ ...query, metricEditorMode: newMetricEditorMode }); }, [setShowConfirm, onChange, sqlCodeEditorIsDirty, query, metricEditorMode, metricQueryType] ); return ( <> m.value === metricQueryType)} options={metricEditorModes} onChange={({ value }) => { onChange({ ...query, metricQueryType: value }); }} /> {query.metricQueryType === MetricQueryType.Query && query.metricEditorMode === MetricEditorMode.Code && ( )} { setShowConfirm(false); onChange({ ...query, metricEditorMode: MetricEditorMode.Builder }); }} onDismiss={() => setShowConfirm(false)} /> ); }; export default MetricsQueryHeader;