diff --git a/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryBuilderContainer.tsx b/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryBuilderContainer.tsx
index bc5e93b3c38..32390a99fa3 100644
--- a/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryBuilderContainer.tsx
+++ b/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryBuilderContainer.tsx
@@ -60,7 +60,7 @@ export function LokiQueryBuilderContainer(props: Props) {
onChange={onVisQueryChange}
onRunQuery={onRunQuery}
/>
-
+ {query.rawQuery && }
>
);
}
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 c655ffcac96..23c9dae50fb 100644
--- a/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryEditorSelector.test.tsx
+++ b/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryEditorSelector.test.tsx
@@ -82,29 +82,29 @@ describe('LokiQueryEditorSelector', () => {
});
});
- // it('Can enable preview', async () => {
- // const { onChange } = renderWithMode(QueryEditorMode.Builder);
- // expect(screen.queryByLabelText('selector')).not.toBeInTheDocument();
+ it('Can enable raw query', async () => {
+ const { onChange } = renderWithMode(QueryEditorMode.Builder);
+ expect(screen.queryByLabelText('selector')).not.toBeInTheDocument();
- // screen.getByLabelText('Preview').click();
+ screen.getByLabelText('Raw query').click();
- // expect(onChange).toBeCalledWith({
- // refId: 'A',
- // expr: defaultQuery.expr,
- // range: true,
- // editorMode: QueryEditorMode.Builder,
- // editorPreview: true,
- // });
- // });
+ expect(onChange).toBeCalledWith({
+ refId: 'A',
+ expr: defaultQuery.expr,
+ queryType: 'range',
+ editorMode: QueryEditorMode.Builder,
+ rawQuery: true,
+ });
+ });
- // it('Should show preview', async () => {
- // renderWithProps({
- // editorPreview: true,
- // editorMode: QueryEditorMode.Builder,
- // expr: 'my_metric',
- // });
- // expect(screen.getByLabelText('selector').textContent).toBe('my_metric');
- // });
+ it('Should show raw query', async () => {
+ renderWithProps({
+ rawQuery: true,
+ editorMode: QueryEditorMode.Builder,
+ expr: '{job="grafana"}',
+ });
+ expect(screen.getByLabelText('selector').textContent).toBe('{job="grafana"}');
+ });
it('changes to code mode', async () => {
const { onChange } = renderWithMode(QueryEditorMode.Builder);
diff --git a/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryEditorSelector.tsx b/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryEditorSelector.tsx
index 58f0de41fe9..a405ef7b602 100644
--- a/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryEditorSelector.tsx
+++ b/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryEditorSelector.tsx
@@ -1,10 +1,9 @@
-import { css } from '@emotion/css';
-import { GrafanaTheme2, LoadingState } from '@grafana/data';
+import { LoadingState } from '@grafana/data';
import { EditorHeader, EditorRows, FlexItem, InlineSelect, Space } from '@grafana/experimental';
-import { Button, useStyles2, ConfirmModal } from '@grafana/ui';
+import { Button, ConfirmModal } from '@grafana/ui';
import { QueryEditorModeToggle } from 'app/plugins/datasource/prometheus/querybuilder/shared/QueryEditorModeToggle';
import { QueryEditorMode } from 'app/plugins/datasource/prometheus/querybuilder/shared/types';
-import React, { useCallback, useState } from 'react';
+import React, { SyntheticEvent, useCallback, useEffect, useState } from 'react';
import { LokiQueryEditorProps } from '../../components/types';
import { lokiQueryModeller } from '../LokiQueryModeller';
import { getQueryWithDefaults } from '../state';
@@ -13,12 +12,15 @@ import { LokiQueryBuilderExplained } from './LokiQueryBuilderExplained';
import { LokiQueryBuilderOptions } from './LokiQueryBuilderOptions';
import { LokiQueryCodeEditor } from './LokiQueryCodeEditor';
import { buildVisualQueryFromString } from '../parsing';
+import { QueryHeaderSwitch } from 'app/plugins/datasource/prometheus/querybuilder/shared/QueryHeaderSwitch';
+import { LokiQuery } from '../../types';
export const LokiQueryEditorSelector = React.memo((props) => {
const { onChange, onRunQuery, data } = props;
- const styles = useStyles2(getStyles);
- const query = getQueryWithDefaults(props.query);
const [parseModalOpen, setParseModalOpen] = useState(false);
+ const [dataIsStale, setDataIsStale] = useState(false);
+
+ const query = getQueryWithDefaults(props.query);
const onEditorModeChange = useCallback(
(newMetricEditorMode: QueryEditorMode) => {
@@ -36,6 +38,20 @@ export const LokiQueryEditorSelector = React.memo((props)
[onChange, query]
);
+ useEffect(() => {
+ setDataIsStale(false);
+ }, [data]);
+
+ const onChangeInternal = (query: LokiQuery) => {
+ setDataIsStale(true);
+ onChange(query);
+ };
+
+ const onQueryPreviewChange = (event: SyntheticEvent) => {
+ const isEnabled = event.currentTarget.checked;
+ onChange({ ...query, rawQuery: isEnabled });
+ };
+
// If no expr (ie new query) then default to builder
const editorMode = query.editorMode ?? (query.expr ? QueryEditorMode.Code : QueryEditorMode.Builder);
return (
@@ -52,18 +68,6 @@ export const LokiQueryEditorSelector = React.memo((props)
onDismiss={() => setParseModalOpen(false)}
/>
-
-
((props)
}}
options={lokiQueryModeller.getQueryPatterns().map((x) => ({ label: x.name, value: x }))}
/>
+
+
+
@@ -87,7 +102,7 @@ export const LokiQueryEditorSelector = React.memo((props)
)}
@@ -101,15 +116,3 @@ export const LokiQueryEditorSelector = React.memo((props)
});
LokiQueryEditorSelector.displayName = 'LokiQueryEditorSelector';
-
-const getStyles = (theme: GrafanaTheme2) => {
- return {
- runQuery: css({
- color: theme.colors.text.secondary,
- }),
- switchLabel: css({
- color: theme.colors.text.secondary,
- fontSize: theme.typography.bodySmall.fontSize,
- }),
- };
-};
diff --git a/public/app/plugins/datasource/loki/types.ts b/public/app/plugins/datasource/loki/types.ts
index f1e91c3b279..1563669632c 100644
--- a/public/app/plugins/datasource/loki/types.ts
+++ b/public/app/plugins/datasource/loki/types.ts
@@ -42,6 +42,8 @@ export interface LokiQuery extends DataQuery {
/* @deprecated now use queryType */
instant?: boolean;
editorMode?: QueryEditorMode;
+ /** Controls if the raw query text is shown */
+ rawQuery?: boolean;
}
export interface LokiOptions extends DataSourceJsonData {