From 9310bb632e149d324e22d3eba1d6a43807f83a13 Mon Sep 17 00:00:00 2001 From: Matias Chomicki Date: Wed, 6 Sep 2023 10:25:53 +0200 Subject: [PATCH] Loki Query Builder: ensure unique ids for labelled fields (#74398) * Loki Query Builder: ensure unique ids for labelled fields * Rename refactored argument --- .../querybuilder/components/UnwrapParamEditor.test.tsx | 2 +- .../loki/querybuilder/components/UnwrapParamEditor.tsx | 4 ++-- .../querybuilder/components/LabelParamEditor.tsx | 4 ++-- .../components/PromQueryBuilderContainer.test.tsx | 2 +- .../prometheus/querybuilder/shared/OperationEditor.tsx | 7 ++++--- .../querybuilder/shared/OperationParamEditor.tsx | 8 ++++---- .../querybuilder/shared/operationUtils.test.ts | 9 +++++++++ .../prometheus/querybuilder/shared/operationUtils.ts | 4 ++-- .../datasource/prometheus/querybuilder/shared/types.ts | 2 +- 9 files changed, 26 insertions(+), 16 deletions(-) diff --git a/public/app/plugins/datasource/loki/querybuilder/components/UnwrapParamEditor.test.tsx b/public/app/plugins/datasource/loki/querybuilder/components/UnwrapParamEditor.test.tsx index 59bb8e1ad4c..a0b7803a500 100644 --- a/public/app/plugins/datasource/loki/querybuilder/components/UnwrapParamEditor.test.tsx +++ b/public/app/plugins/datasource/loki/querybuilder/components/UnwrapParamEditor.test.tsx @@ -63,7 +63,7 @@ const createProps = ( onChange: jest.fn(), onRunQuery: jest.fn(), index: 1, - operationIndex: 1, + operationId: '1', query: { labels: [{ op: '=', label: 'foo', value: 'bar' }], operations: [ diff --git a/public/app/plugins/datasource/loki/querybuilder/components/UnwrapParamEditor.tsx b/public/app/plugins/datasource/loki/querybuilder/components/UnwrapParamEditor.tsx index 99852a01640..4e364fc8290 100644 --- a/public/app/plugins/datasource/loki/querybuilder/components/UnwrapParamEditor.tsx +++ b/public/app/plugins/datasource/loki/querybuilder/components/UnwrapParamEditor.tsx @@ -15,7 +15,7 @@ import { LokiVisualQuery } from '../types'; export function UnwrapParamEditor({ onChange, index, - operationIndex, + operationId, value, query, datasource, @@ -27,7 +27,7 @@ export function UnwrapParamEditor({ return ( { diff --git a/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilderContainer.test.tsx b/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilderContainer.test.tsx index 2ad87998957..3816fb9a3ec 100644 --- a/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilderContainer.test.tsx +++ b/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilderContainer.test.tsx @@ -30,7 +30,7 @@ describe('PromQueryBuilderContainer', () => { await userEvent.click(screen.getByTestId('operations.0.add-rest-param')); waitFor(() => { - expect(container.querySelector(`${getOperationParamId(0, 0)}`)).toBeInTheDocument(); + expect(container.querySelector(`${getOperationParamId('0', 0)}`)).toBeInTheDocument(); }); }); }); diff --git a/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationEditor.tsx b/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationEditor.tsx index 12f59778029..1b3370b679c 100644 --- a/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationEditor.tsx +++ b/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationEditor.tsx @@ -1,5 +1,5 @@ import { css, cx } from '@emotion/css'; -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useId, useState } from 'react'; import { Draggable } from 'react-beautiful-dnd'; import { DataSourceApi, GrafanaTheme2 } from '@grafana/data'; @@ -46,6 +46,7 @@ export function OperationEditor({ }: Props) { const def = queryModeller.getOperationDef(operation.id); const shouldFlash = useFlash(flash); + const id = useId(); const isConflicting = operation.id === LokiOperationId.LabelFilter && isConflictingFilter(operation, query.operations); @@ -86,7 +87,7 @@ export function OperationEditor({
{!paramDef.hideName && (
- + {paramDef.description && ( @@ -101,7 +102,7 @@ export function OperationEditor({ paramDef={paramDef} value={operation.params[paramIndex]} operation={operation} - operationIndex={index} + operationId={id} onChange={onParamValueChanged} onRunQuery={onRunQuery} query={query} diff --git a/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationParamEditor.tsx b/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationParamEditor.tsx index de069eb71ff..e0e8673670b 100644 --- a/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationParamEditor.tsx +++ b/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationParamEditor.tsx @@ -33,7 +33,7 @@ export function getOperationParamEditor( function SimpleInputParamEditor(props: QueryBuilderOperationParamEditorProps) { return ( props.onChange(props.index, evt.currentTarget.checked)} /> @@ -63,7 +63,7 @@ function SelectInputParamEditor({ paramDef, value, index, - operationIndex, + operationId, onChange, }: QueryBuilderOperationParamEditorProps) { const styles = useStyles2(getStyles); @@ -99,7 +99,7 @@ function SelectInputParamEditor({ return (