diff --git a/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryEditorSelector.test.tsx b/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryEditorSelector.test.tsx index d105157ef0e..23398469510 100644 --- a/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryEditorSelector.test.tsx +++ b/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryEditorSelector.test.tsx @@ -10,6 +10,13 @@ import { LokiQuery, LokiQueryType } from '../../types'; import { LokiQueryEditorSelector } from './LokiQueryEditorSelector'; +jest.mock('@grafana/runtime', () => { + return { + ...jest.requireActual('@grafana/runtime'), + reportInteraction: jest.fn(), + }; +}); + jest.mock('app/core/store', () => { return { get() { diff --git a/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryEditorSelector.tsx b/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryEditorSelector.tsx index e374302a2b6..1523fa90721 100644 --- a/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryEditorSelector.tsx +++ b/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryEditorSelector.tsx @@ -2,6 +2,7 @@ import React, { SyntheticEvent, useCallback, useEffect, useState } from 'react'; import { LoadingState } from '@grafana/data'; import { EditorHeader, EditorRows, FlexItem, InlineSelect, Space } from '@grafana/experimental'; +import { reportInteraction } from '@grafana/runtime'; import { Button, ConfirmModal } from '@grafana/ui'; import { QueryEditorModeToggle } from 'app/plugins/datasource/prometheus/querybuilder/shared/QueryEditorModeToggle'; import { QueryHeaderSwitch } from 'app/plugins/datasource/prometheus/querybuilder/shared/QueryHeaderSwitch'; @@ -19,7 +20,7 @@ import { LokiQueryBuilderOptions } from './LokiQueryBuilderOptions'; import { LokiQueryCodeEditor } from './LokiQueryCodeEditor'; export const LokiQueryEditorSelector = React.memo((props) => { - const { onChange, onRunQuery, data } = props; + const { onChange, onRunQuery, data, app } = props; const [parseModalOpen, setParseModalOpen] = useState(false); const [dataIsStale, setDataIsStale] = useState(false); @@ -30,6 +31,13 @@ export const LokiQueryEditorSelector = React.memo((props) const onEditorModeChange = useCallback( (newEditorMode: QueryEditorMode) => { + reportInteraction('grafana_loki_editor_mode_clicked', { + newEditor: newEditorMode, + previousEditor: query.editorMode ?? '', + newQuery: !query.expr, + app: app ?? '', + }); + if (newEditorMode === QueryEditorMode.Builder) { const result = buildVisualQueryFromString(query.expr || ''); // If there are errors, give user a chance to decide if they want to go to builder as that can loose some data. @@ -40,7 +48,7 @@ export const LokiQueryEditorSelector = React.memo((props) } changeEditorMode(query, newEditorMode, onChange); }, - [onChange, query] + [onChange, query, app] ); useEffect(() => {