{filters?.map((f, i) => (
@@ -76,13 +87,28 @@ const TagsInput = ({
updateFilter={updateFilter}
tags={getTags(f)}
isTagsLoading={isTagsLoading}
- deleteFilter={deleteFilter}
- allowDelete={true}
hideValue={hideValues}
query={query}
/>
- {i === filters.length - 1 && (
-
+ {(validInput(f) || filters.length > 1) && (
+
deleteFilter?.(f)}
+ tooltip={'Remove tag'}
+ />
+ )}
+ {validInput(f) && i === filters.length - 1 && (
+
+
+
)}
))}
diff --git a/public/app/plugins/datasource/tempo/SearchTraceQLEditor/TraceQLSearch.test.tsx b/public/app/plugins/datasource/tempo/SearchTraceQLEditor/TraceQLSearch.test.tsx
index 6b13f2bc871..1240317deaa 100644
--- a/public/app/plugins/datasource/tempo/SearchTraceQLEditor/TraceQLSearch.test.tsx
+++ b/public/app/plugins/datasource/tempo/SearchTraceQLEditor/TraceQLSearch.test.tsx
@@ -1,7 +1,6 @@
-import { render, screen, waitFor } from '@testing-library/react';
+import { act, render, screen, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
-import React from 'react';
-import { act } from 'react-dom/test-utils';
+import React, { useState } from 'react';
import { config } from '@grafana/runtime';
@@ -89,6 +88,62 @@ describe('TraceQLSearch', () => {
jest.useRealTimers();
});
+ it('should only show add/remove tag when necessary', async () => {
+ const TraceQLSearchWithProps = () => {
+ const [query, setQuery] = useState